I think software and firmware are a critically important component of a spacecrafts design. It seems quite often that the focus is on hardware, and software is cobbled together at the end and often not rigorously tested or not feature complete due to time constraints. One of the first choices that I will make will be around flight software, operating systems and development environments. After I have selected the most appropriate software ecosystem I will choose the hardware to go with it. There seems to be no shortage of Single Board Computers and micro-controllers to choose from and they are all very similar in general.
I recently read a thesis from Cal Poly called “Fault tolerant and Flexible Cubesat Software Architecture” by Greg Manyak. Part of this thesis researches the concept of implementing fault tolerance in software rather than in hardware. Fault tolerance is traditionally provided by adding redundant systems to compensate for errors caused by ionising radiation events, such as Single Event Upsets (SEU) that typically result in bit flips . This thesis explores the concept of detecting and compensating for such error in software instead, thereby reducing the hardware complexity and redundancy.
The thesis is focused around creating a new reusable software architecture to be used in their Polysat program for upcoming cubesat projects. They analysed the previous Polysat missions and numerous other Cubesat missions comparing the hardware and software choices and the successes and failures of each. One of the choices that they made was to develop a system that ran on top of the Linux operating system. This is a question that I have been considering myself. Do you keep the system small and as simple as possible to minimise the chances of errors, or do you use Linux, a much more complex software system on a more complex computing platform where there are many more chances of errors but the code is also more mature and tested.
I agree with their conclusions and the need to follow the path of an existing code base that I can draw upon as it would not be possible for me to write everything from scratch. Further to this, there is a Cubesat Flight Control Software system called Kubos that has been developed which is open source and runs on top of Linux. It seems quite mature, well designed and well documented. Another advantage is that the Beaglebone Black (BBB) single board computer is a supported platform which is readily available. There is also and industrial version available which has an extended temperature range.
A Beaglebone Black running Linux is probably overkill for a Cubesat however I am sure that creative people will find uses for the extra computational power available and having too much is better that having not enough. Power consumption will possibly be a problem but there are ways to reduce the power required of a BBB, but that will be a discussion for another time.