À 102 heures, 38 minutes et 26 secondes de vol, le 20 juillet 1969, Neil Armstrong prononce deux mots que Houston n'a aucune envie d'entendre : « Program alarm. » Le module lunaire Eagle descend vers la mer de la Tranquillité, à un peu plus de sept minutes du sol. Entre les deux hommes, un petit panneau noir, trois rangées de chiffres verts, un voyant allumé. Armstrong lit le code : « It's a 1202. » Jack Garman, vingt-quatre ans, baisse les yeux vers une feuille manuscrite glissée sous le plexiglas de son bureau. Gene Kranz avait ordonné qu'on y écrive tous les codes d'alarme possibles, y compris ceux qui n'étaient pas censés arriver en vol. 1202 : débordement de l'exécutif. Garman dit à Steve Bales, vingt-six ans, responsable du guidage, que ça passe tant que l'alarme ne devient pas continue. Bales dit « Go ». Charlie Duke le transmet : « We're Go on that alarm. » Vingt-sept secondes ont passé.
Pendant ces vingt-sept secondes, l'ordinateur a continué à calculer. Il a jeté ce qui pouvait attendre, gardé ce qui faisait atterrir, et relancé ses tâches dans l'ordre de leur importance. Il pèse trente-deux kilos et dispose de 4 Ko de mémoire vive.
Trente-deux kilos, 55 watts, 2 MHz
L'Apollo Guidance Computer, l'AGC, conçu au MIT Instrumentation Laboratory, tient dans une boîte de 61 centimètres sur 32 sur 17 et consomme 55 watts. Son quartz bat à 2,048 MHz, divisé en une horloge interne de 1,024 MHz, pour une quarantaine de milliers d'instructions par seconde. Ses mots font 16 bits, dont un de parité. Il possède 2 048 mots de mémoire vive à tores magnétiques et 36 864 mots de mémoire morte, soit 76 Ko en tout à seize bits par mot. Pour l'échelle : l'ESP32, puce de bricoleur sortie en 2016, bat à 240 MHz avec 520 Ko de mémoire vive. Une Apple Watch Series 11, sortie en 2025, stocke 64 Go : plus de 800 000 fois les 76 Ko de l'AGC. Ce qui compte, c'est ce qu'on a fait tenir dans 76 Ko.
Eldon Hall, qui dirige la conception du matériel, obtient fin 1962 l'accord de la NASA pour construire toute la logique du calculateur avec un seul composant, une porte NOR à trois entrées de la gamme Micrologic de Fairchild Semiconductor. Le circuit intégré a trois ans, les cent premiers exemplaires commandés par le laboratoire coûtent 43,50 dollars pièce, et aucun n'a encore volé. En 1963, le programme Apollo absorbe à lui seul 60 % de la production américaine de circuits intégrés. Le Block II, qui vole sur Apollo 11, en contient environ 2 800. L'AGC est l'un des premiers ordinateurs bâtis sur des circuits intégrés au silicium ; aucun exemplaire n'a connu de panne matérielle en mission.
Un programme tissé à la main
Le logiciel, lui, ne se charge pas : il se tisse. La mémoire morte de l'AGC est une « core rope », une corde de tores. Des anneaux de ferrite gros comme une gomme de crayon, et des fils de cuivre qui les traversent ou les contournent : un fil qui passe dans l'anneau code un 1, un fil qui passe à côté code un 0. Chaque tore voit passer 192 fils, soit douze mots ; chaque module en aligne 512 ; six modules font les 36 864 mots du programme. Chez Raytheon, à Waltham, dans le Massachusetts, des ouvrières recrutées dans l'industrie textile enfilent ces fils à la main. Un module demande environ huit semaines et coûte 15 000 dollars. Une fois tissé, il ne se corrige plus. Des ingénieurs du MIT appellent ça la « LOL memory », Little Old Lady memory, la mémoire des petites vieilles dames. Le programme qui a posé Eagle sur la Lune est passé entre leurs doigts, bit par bit.
Verbe, nom, entrée
Pour parler à la machine, l'équipage dispose du DSKY, display and keyboard, prononcé « diskey » : un clavier de calculatrice et des chiffres verts à sept segments, électroluminescents, commandés par des relais. On tape un verbe, l'action, puis un nom, la donnée, chacun sur deux chiffres. Pendant la descente, Aldrin tape « Verb 16 Noun 68 » : affiche en continu la distance qui reste, le temps avant le basculement et l'écart entre l'altitude radar et l'altitude calculée. Le fichier source qui gère tout cela s'appelle PINBALL_GAME_BUTTONS_AND_LIGHTS, le flipper, ses boutons et ses lumières.
Ce que l'alarme voulait dire
Au centre du logiciel, il y a un ordonnanceur conçu par Hal Laning, l'Executive. Chaque tâche reçoit une priorité, et la plus urgente passe devant. Le radar de rendez-vous, prévu pour retrouver Columbia en cas de remontée d'urgence, est resté allumé pendant la descente, par précaution. Un défaut de synchronisation entre deux signaux à 800 Hz, oublié dans le document d'interface, lui fait voler au calculateur 6 400 cycles par seconde : 13 % de charge en plus sur une machine déjà occupée à 85 %. Quand Aldrin demande un affichage supplémentaire, les derniers pourcents partent avec. L'Executive manque de place, crie 1202, abandonne ce qui a la priorité la plus basse, l'affichage compris, et reprend le guidage. À 102:42:19, l'alarme 1201 suit, même famille. Duke : « Same type. We're Go. » À 102:45:02, Duke annonce « 60 seconds » de carburant avant le seuil d'abandon. À 102:45:58, 20 h 17 UTC : « Houston, Tranquility Base here. The Eagle has landed. »
L'ordinateur (ou plutôt le logiciel qu'il contenait) était assez intelligent pour reconnaître qu'on lui demandait d'exécuter plus de tâches qu'il n'aurait dû. Il a alors envoyé une alarme, qui voulait dire pour l'astronaute : je suis surchargé, et je ne vais garder que les tâches les plus importantes, c'est-à-dire celles qui servent à atterrir.
Margaret Hamilton, qui dirige l'équipe du logiciel de vol, l'écrit en mars 1971 dans une lettre à la revue Datamation, pour tordre le cou à la version du bug : « Si l'ordinateur n'avait pas reconnu ce problème et pris des mesures de récupération, je doute qu'Apollo 11 aurait été l'alunissage réussi qu'il a été. » Deux semaines plus tôt, en simulation, une alarme du même type avait conduit Bales à ordonner un abandon. C'est de là que vient la liste sous le plexiglas.
La pile de listings
En 1969, un photographe du MIT Instrumentation Laboratory fait poser Hamilton, née en 1936, directrice de la division de génie logiciel, à côté d'une pile de listings aussi haute qu'elle : le code de vol des modules de commande et lunaire, plusieurs programmes et versions. Le terme « software engineering », c'est elle qui l'a mis en circulation au laboratoire pour distinguer son travail de celui du matériel ; longtemps, raconte-t-elle, on en a ri.
Ce code se lit aujourd'hui. Transcrit depuis les listings du MIT Museum par les bénévoles du projet Virtual AGC, il est sur GitHub, dans un dépôt qui compte plus de 72 000 étoiles. La routine qui allume le moteur s'appelle BURN_BABY_BURN, un clin d'œil, raconte Don Eyles, qui l'a écrite avec Peter Adler, au disc-jockey Magnificent Montague. Dans les équations de guidage de l'atterrissage, deux lignes portent le commentaire « TEMPORARY, I HOPE HOPE HOPE ». Elles ont volé. En juillet 2016, un visiteur a ouvert un ticket sur le dépôt : erreur 1201 et 1202 si le radar de rendez-vous est allumé. Fermé, avec deux étiquettes : « Wont Fix » et « Humour ».
Ce qu'il en reste
Le 21 juillet à 2 h 56 UTC, Armstrong pose le pied sur la Lune devant quelque 600 millions de téléspectateurs, selon les estimations courantes. Le petit pas est resté. Le mécanisme aussi, et il est moins connu : un ordonnanceur à priorités qui, quand il n'a plus de place, sacrifie le moins important plutôt que de s'arrêter. Quand Barack Obama remet à Hamilton la Presidential Medal of Freedom, le 22 novembre 2016, la notice de la Maison Blanche parle de logiciel asynchrone, d'ordonnancement par priorités et de décision avec l'humain dans la boucle. C'est la description de ce qui s'est passé à 102:38:26.
Quand on ne peut pas tout faire, on garde ce qui fait atterrir.
Sur la photo, la pile de listings arrive au niveau de la tête de Hamilton. Quelque part dedans, sans doute, deux lignes disent « temporaire, j'espère, j'espère, j'espère ».