QUESTION: I study Computer Science, and would like you to tell me about the history and trade-offs that led you to choose C (with some assembler) as the language for the lander and the rover. Several other choices come to my mind: Forth for compactness, C++ for more "modern" programming, pure assembler, etc. Also, Java is now touted to be good for both distributed computing and toasters. Do you expect Java to become the language for rovers or landers in the future? ANSWER from Jesse Wright on August 4, 1997: I can answer for the lander. First remember that we started 5 years ago on our development. We needed a language that would work on these platforms: * Wind Rivers VXworks for 68000 -- hardware tests with flight s/w * Sun OS 4.1.2 -- high level flight s/w tests * IBM R6000 workstations/cards -- low level flight s/w test & compile/link * Wind Rivers VXworks for IBM RAD6000 -- final configuration (note: flight computer built by Loral) The Wind Rivers VXworks operating system was the main driver. It only had support for C until recently. Also we had to pay for the port and test of VCworks for IBM R6000 and IBM RAD6000 machines. C++ was not an option because we did not have a compiler for it when we needed one. Assembly just does not give the right "bang-for-the-buck" -- it is very costly to write and test. We rejected other languages mainly for 2 reasons: (a) it would be very difficult to hire people with that language experience, and (b) other languages, at the time, would not enhance peoples chance of advancement. What we did do is design the software in an Object-Oriented manner using C. (David Smyth, one of the team members has presented some professional papers on the subject). This gives us most of the advantages of C++ with using C. The gain we had in productivity on Mars Pathfinder s/w development was mainly from using Object-Oriented designs. As you know people can code C++ without out really using objects. We are in process of developing the next generation of flight/ground computer system design using C++ for the high speed servers and computationally intensive code, and Java for the analysis, command, and display code. This might migrate to pure Java as Java "native code compilers" become available. In my view, the gain is to use better object-oriented techniques for "better-faster-cheaper". The languages C++ and Java, right now are suited for our applications. C++, for various technical reasons (multiple inheritence, operator overloading, ...) make it less suited for our work than Java (multiple person development teams, long life cycle, multiple platform, distributed, time-sensitive). Java is also Hot -- we can hire people with Java experience, and Java experience on a resume will help people get jobs. For the next series of launches (98), the flight software is directly inherited from Mars Pathfinder and is in C. The new systems should be in the 2001 Mars launches, and earlier on some other flights.