I'm really curious to know how different it is from the web or enterprise development worlds.
I'm really curious to know how different it is from the web or enterprise development worlds.
* The Rosetta probe ultimately runs SCL (Spacecraft Command Language) [1], a COTS spacecraft programming language developed for sale to the military [2]; SCL is based on the syntax of Ada 83, which has a long legacy in spaceflight and other real-time applications (e.g. Boeing 777) [3]. However, what are known as Flight Control Procedures (uploaded commands), are written using another language and transformed and compiled into SCL in a two-step process that involves XSLT [1]. On-board Control Procedures, which are procedures the probe decides on its own to run, and handle tasks such as receiving FCPs and sending back telemetry, are written in SCL [1].
* The Mars rover Curiosity is programmed in C and uses the VxWorks RTOS [4], which is very much like many commercial embedded systems. It has about 2.5 million lines of code, much of it autogenerated. Curiosity's predecessors, Spirit and Opportunity, used the same software stack, as did their predecessor, Sojourner [8].
* The Voyager probe, which has now left the solar system and entered interstellar space, uses "...interrupt driven computer[s], similar to processors used in general purpose computers with a few special instructions for increased efficiency. The programming is a form of assembly language." [5]
* The Space Shuttle was programmed in a custom language called HAL/S (High-order Assembly Language/Shuttle) [6], as was the Jupiter probe Galileo [7]. The language is descended from PL/I and its compiler is written in a subset of PL/I called XPL.
[1]: http://www.rheagroup.com/wp-content/uploads/2014/01/SpaceOps...
[3]: https://en.wikipedia.org/wiki/Ada_(programming_language)
[4]: http://programmers.stackexchange.com/a/159638
[5]: http://voyager.jpl.nasa.gov/faq.html
[6]: https://en.wikipedia.org/wiki/HAL/S
Which makes me wonder, since this is HN after all, if Rust wouldn't be an ideal candidate for coding this kind of layer in the future. Maybe a compiler targeting VxWorks is in progress somewhere.. ? :))
C and languages that compile to C (Fortran is used as well) are often employed since you have powerful control over memory usage.
Source: I work in the aviation industry, where the technologies are different but the lifecycle concerns are very similar.
Science fiction has some great depictions of interstellar communications, such as my favorite by Vernor Vinge, the Hugo award-winning novel A Fire Upon the Deep. It is a most excellent space opera that prominently features an interstellar system like Usenet as part of the plot [3], as well as superhuman intelligence, physics, and all sorts of other wonderful bits.
[1]: https://en.wikipedia.org/wiki/Interplanetary_Internet
[2]: https://en.wikipedia.org/wiki/Delay-tolerant_networking
eg: "The on-board software of the central computer of the Philae Lander consists of a real-time operating system and 8 application tasks. All these software modules are specially developed by our team for the Harris RTX2010RH microprocessor. The co-ordination of the scientific program and the overall control of the algorithms used by the application tasks are done by the MSO modelling language."
http://www.hiradastechnika.hu/data/upload/file/2004/2004_12/...
Also the "scheduling system, called the Rosetta SGS Scheduling Component" is discussed here:
https://ai.jpl.nasa.gov/public/papers/chien_iwpss2013_schedu...
which uses a framework called APSEN written by NASA:
which takes code like this:
Activity prevalve removal {
duration = 15
slot subsystem
after prevalve prep with (subsystem == this.subsystem)
before prevalve replace with (subsystem == this.subsystem)
Reservation hydraulic lift usage {
resource = hydraulic lift; usage = 1;
duration = 5;
requires state prevalve-purged TRUE
requires state prevalve-illuminated TRUE
to control the thing
No idea how relevant it is today, or any differences between the shuttle team and whoever's building/built the software for this lander, but it's definitely worth a read.
I'm not sure how I stand on "w/ a great language one does great things" vs "great engineers do great things with any tools they have" debate.
* VxWorks for real time operating system (proprietary)
* Ada/C++ for programming language.
The last answer here has a lot of links for the Curiosity Rover: http://programmers.stackexchange.com/questions/159637/what-i...