Introduction
L'ordinateur de guidage Apollo (AGC) est l'un des codes les plus scrupuleusement examinés de l'histoire. Des milliers de développeurs l'ont lu, des universitaires ont publié des articles sur sa fiabilité et des émulateurs l'exécutent instruction par instruction. Cependant, une équipe a découvert un bogue qui avait été manqué pendant 57 ans : un verrouillage de ressource dans le code de contrôle du gyroscope qui provoque une fuite sur un chemin d'erreur, désactivant silencieusement la capacité de la plateforme de guidage à se réaligner.
Contexte Technique
L'AGC utilise un verrouillage de ressource partagé appelé LGYRO pour gérer le gyroscope. Lorsque l'ordinateur doit appliquer un couple au gyroscope, il acquiert le verrouillage LGYRO au début et le libère une fois que les trois axes ont été appliqués. Cependant, il existe un troisième scénario qui ne libère pas le verrouillage : le « caging », une mesure d'urgence qui verrouille les gimbals de l'IMU pour protéger les gyroscopes contre les dommages.
Lorsque le couple est appliqué normalement, la routine quitte via STRTGYR2 et le verrouillage LGYRO est effacé. Cependant, lorsque l'IMU est « cagée » pendant que le couple est en cours, le code quitte via une routine appelée BADEND, qui ne libère pas le verrouillage. Deux instructions sont manquantes, ce qui provoque un blocage du système.
Analyse et Implications
Ce bogue aurait pu avoir des conséquences graves pendant la mission Apollo 11. Lorsque Michael Collins a orbité seul dans le module de commande Columbia, il a exécuté le programme 52, une alignment de star qui a maintenu la plateforme de guidage pointée dans la bonne direction. Si la plateforme avait dérivé, le moteur de propulsion pour ramener Collins sur Terre aurait pointé dans la mauvaise direction.
Le bogue aurait pu se manifester de manière subtile, sans alarme ni lumière de programme. Collins aurait pu essayer de réaligner la plateforme, mais le système aurait été bloqué. La seule solution aurait été de réinitialiser l'ordinateur, mais cela aurait nécessité une décision rapide et solo de Collins, sans le soutien de la mission de contrôle.
Perspective
Cette découverte souligne l'importance de la vérification formelle et de l'analyse statique dans le développement de logiciels critiques. L'utilisation de langages de spécification comportementale comme Allium peut aider à détecter des bogues qui auraient pu être manqués par la lecture et l'émulation du code.
Il est également important de noter que les concepteurs de l'AGC, comme Margaret Hamilton, ont développé des concepts qui sont maintenant considérés comme fondamentaux dans l'ingénierie logicielle, tels que la planification de priorité et la protection contre les erreurs. Leur travail a contribué à rendre la mission Apollo 11 un succès, et leur héritage continue d'inspirer les développeurs de logiciels aujourd'hui.