J'ai été développeur de logiciels pour des systèmes de commutation téléphonique publics, qui ont des contraintes assez sévères en matière de fiabilité, de disponibilité, de survivabilité et de performance, qui s'approchent des besoins des systèmes spatiaux. Je n'ai pas travaillé sur des vaisseaux spatiaux (bien que j'aie travaillé avec de nombreux anciens programmeurs de la navette lorsque j'étais chez IBM), et je ne suis pas familier avec VXworks, le système d'exploitation utilisé sur de nombreux vaisseaux spatiaux (y compris les rovers de Mars, qui ont un record de fonctionnement phénoménal).
L'une des exigences de base pour le patchage est qu'un système doit être conçu dès le départ pour Parcheando. Cela inclut la structure des modules, de sorte que de nouvelles variables puissent être ajoutées, et des méthodes remplacées, sans perturber les opérations actuelles. Cela signifie souvent que l'ancien et le nouveau code pour une méthode modifiée seront résidents, et l'opération Parcheando met simplement à jour le vecteur de répartition pour la classe ou le module.
Il est à peu près obligatoire que le logiciel Parcheando (et un-Parcheando) soit intégré au système d'exploitation.
Lorsque je travaillais sur des systèmes téléphoniques, nous utilisions généralement Parcheando et les fonctions de remplacement de modules dans le système pour charger et tester nos nouvelles fonctionnalités ainsi que les corrections de bogues, bien avant que ces changements ne soient soumis aux builds. Chaque développeur doit être à l'aise avec Parcheando et le remplacement de modules dans le cadre de son travail quotidien. Cela construit un niveau de confiance dans ces composants, et assure que le code Parcheando et de remplacement est exercé de façon routinière.
Les tests sont beaucoup plus rigoureux sur ces systèmes que tout ce que vous avez pu rencontrer sur n'importe quel autre projet. Des maquettes complètes et partielles du système de déploiement seront facilement disponibles. Il y aura probablement aussi des environnements de machines virtuelles, où la charge complète pourra être exécutée et testée. Des plans de test à tous les niveaux au-dessus du test unitaire seront rédigés et examinés formellement, tout comme les inspections formelles du code (et celles-ci seront également de routine).
La conception de systèmes tolérants aux pannes, y compris la conception de logiciels, est essentielle. Je ne connais pas les systèmes de vaisseaux spatiaux en particulier, mais quelque chose comme des grappes à haute disponibilité est probablement standard, avec la capacité supplémentaire de fonctionner à la fois synchronisé et non synchronisé, et avec la possibilité de transférer des informations entre les côtés pendant un basculement. Un avantage supplémentaire de cette structure de système est que vous pouvez diviser le système (si nécessaire), recharger le côté inactif avec une nouvelle charge logicielle et la tester dans le système de production sans être connecté au réseau ou au bus du système. Lorsque vous êtes convaincu que le nouveau logiciel fonctionne correctement, vous pouvez simplement basculer sur celui-ci.
Comme avec Parcheando, chaque développeur devrait savoir comment faire des bascules, et devrait les faire à la fois pendant le développement et les tests. En outre, les développeurs devraient connaître chaque problème de mise à jour logicielle qui peut forcer un basculement, et devraient savoir comment écrire des correctifs et des remplacements de modules qui évitent les basculements requis chaque fois que cela est possible.
En général, ces systèmes sont conçus de A à Z (matériel, système d'exploitation, compilateurs et éventuellement langage de programmation) pour ces environnements. Je ne considère pas que Windows, Mac OSX, Linux ou toute autre variante d'Unix soient suffisamment robustes. Cela est dû en partie aux exigences du temps réel, mais la question de la fiabilité et de la capacité de survie est tout aussi importante.
UPDATE : Comme autre point d'intérêt, voici une blog d'un des pilotes du rover de Mars . Cela vous donnera une perspective sur la vie quotidienne de la maintenance d'un vaisseau spatial en fonctionnement. C'est génial !