Lorsque nous avons pensé à la mission Apollo 11, qui en 1969 a pris l'être humain pour la première fois à la surface de la lune, l'image qui vient généralement à l'esprit est celle des astronautes Neil Armstrong et Buzz Aldrin descendant par l'échelle du module lunaire. Un petit pas pour l'homme et tout ça. Cependant, après cet exploit épique, il y avait un protagoniste moins visible, mais tout aussi crucial (ou plus, même): le logiciel qui contrôlait le navire.
À une époque où les ordinateurs occupaient des salles entières et étaient programmées avec des cartes perforées, la NASA a dû faire confiance à cette tâche dans un système d'exploitation pionnier qui a marqué le cours de l'informatique moderne.
L'ordinateur sur le panneau: ordinateur de guidage Apollo (AGC)
Le cœur numérique de la mission était l'Apollo Guidance Computer (AGC), conçu au Massachusetts Institute (MIT) sous contrat avec la NASA. Cet ordinateur ne ressemblait pas aux appareils que nous portons aujourd'hui dans la poche:
- Vitesse de l'horloge: 1 024 MHz
- Mémoire de RAM: 2 Ko
- Lecture de la mémoire (ROM): 36 kb, stocké dans Mémoire de corde centrale (Mémoire de base tressée, littéralement « transmise » par les travailleurs qui ont passé des fils à travers des anneaux magnétiques).
- Poids: environ 32 kg.
C'était, en substance, un énorme ordinateur (pour les critères actuels … à cette époque, c'était un ultra-léger) qui était extrêmement limité dans les ressources, mais conçu pour être fiable, léger et résistant aux conditions de l'espace.
Le système d'exploitation: L'exécutif et la « liste d'attente »
Le logiciel AGC était basé sur un système d'exploitation rudimentaire mais étonnamment avancé pour son époque. Ses principaux composants étaient:
- Executive: Tâches réelles gérées, attribuant la priorité aux processus les plus importants. Par exemple, si le radar du module lunaire envoyait trop d'informations et saturé l'ordinateur, l'exécutif savait comment exclure les processus secondaires et se concentrer sur les processus vitaux: maintenir le contrôle du navire.
- Liste d'attente: cela a fonctionné comme une liste d'attente de tâches planifiée pour s'exécuter à des moments précis. C'était une sorte de planificateur qui garantissait que les opérations critiques (telles que les moteurs d'éclairage ou l'ajustement de l'orientation du navire) se sont produites exactement quand elles le devraient.
La vérité est que ce schéma d'exploitation a fait de l'AGC l'un des premiers systèmes d'exploitation multitâche de l'histoire.
Mais quel était le système d'exploitation? AGC, exécutif ou liste d'attente?
Aucun des trois. L'ordinateur de guidage Apollo (AGC) était le nom de l'ordinateur en panneau (d'Ahrdware, allons-y), et n'a pas exécuté de système d'exploitation avec un nom commercial comme ceux que nous connaissons aujourd'hui (Windows, Linux, macOS). Ce qu'il a transporté était un ensemble de routines réelles développées au MIT Instrumentation Laboratory, connu en interne avec le nom créatif du «logiciel AGC» ou plus formellement comme logiciel de guidage Apollo.
Au sein de ce logiciel, le noyau du système d'exploitation était composé de deux parties principales de «Executive» en tant que planificateur de tâches et de «liste d'attente» en tant que gestionnaire des processus programmés. Sans plus.
Le langage de programmation: assemblage AGC … et «verbes» + «noms»
Les programmes AGC ont été écrits dans leur propre langage d'assemblage, AGC Assembly, mais pour les astronautes, l'interaction a été simplifiée par une interface basée sur des combinaisons de verbes et de noms, qui en soi était un langage de programmation de haut niveau.
- Verbes: actions qui pourraient être exécutées (afficher, calculer, démarrer).
- Noms: données ou paramètres sur lesquels il a agi (vitesse, angle, temps).
Par exemple, pour afficher la vitesse à l'écran, l'astronaute a introduit un code verbe (tel que «16» pour «montrer») et l'un des noms (comme «65» pour «vitesse»). C'était un langage simple mais efficace, qui a permis à l'équipage de communiquer avec l'ordinateur en vol.
La célèbre «erreur 1202» et la tolérance à l'échec
L'un des moments les plus tendus de la mission Apollo 11 s'est produit pendant l'atterrissage de la lune, lorsque l'AGC a commencé à montrer Alarmes 1201 et 1202. Ces avertissements ont indiqué que l'ordinateur était surchargé: le radar de couplage envoyait des données inutiles qui consommaient trop de cycles de traitement.
Ici, le système d'exploitation a montré son génie. Au lieu de bloquer ou de redémarrer complètement, l'exécutif a exclu les tâches non essentielles et garantissait que les fonctions critiques – contrôler l'orientation du moteur et du module – ont continué à s'exécuter. Grâce à cette conception, la mission pourrait se poursuivre jusqu'à ce qu'Armstrong prenne le contrôle manuel pour se percher sur la surface lunaire.
Selon les mots d'aujourd'hui, c'était une démonstration précoce de la façon dont un système pouvait maintenir la stabilité sous une forte surcharge de travail, quelque chose que même de nombreuses technologies modernes ne parviennent toujours pas à gérer avec une telle efficacité.
Un logiciel pionnier écrit par une équipe visionnaire
Le développement du logiciel a été dirigé par Margaret Hamilton, ingénieur du MIT qui était responsable de l'indice du terme génie logiciel pour donner de la dignité et une rigueur à cette discipline émergente.
Les premiers travaux de développement du logiciel AGC ont commencé en 1965, alors que Hamilton n'avait que 29 ans. Il a dirigé le programme de programmeurs jusqu'en juillet 1969, date à laquelle il avait 32 ans et sa création a permis aux espèces humaines d'atteindre la lune.
Son équipe a écrit et purifié des dizaines de milliers de lignes de code, le tout en assemblage, testant chaque module avec des simulations complètes. Hamilton a insisté pour concevoir le système avec tolérance aux erreurs humaines et situations imprévues.
La célèbre «alarme 1202» était, en quelque sorte, la validation de cette philosophie: un ordinateur qui non seulement exécuté des instructions, mais savait également comment donner la priorité et survivre à l'inattendu.
L'héritage de l'AGC et de son logiciel
Bien que primitive par rapport à tout microcontrôleur actuel, l'AGC et son système d'exploitation ont posé des bases fondamentales:
- Multure en temps réel: aujourd'hui essentiel dans les systèmes critiques, des avions commerciaux aux stimulateurs cardiaques.
- Interfaces simplifiées pour les utilisateurs non-experts: un antécédent de convivialité moderne.
- Tolérance aux défaillances: principe central des logiciels qui ne peuvent pas se permettre des erreurs, telles que des satellites, des trains ou des centrales nucléaires.
L'AGC ne se limitait pas à amener les astronautes sur la lune: il a également conduit à l'informatique un peu plus loin, démontrant que le logiciel était aussi crucial que le matériel dans l'exploration spatiale.