Un programmeur de la NASA se souvient du débogage de Lisp dans l'espace lointain

Le débogage d’un logiciel qui tourne à 150 millions de kilomètres est quelque chose que la plupart d’entre nous n’auront jamais à faire, heureusement. Mais un ancien programmeur de la NASA, l’ingénieur logiciel Ron Garret, a partagé son expérience de diagnostic d’un logiciel LISP défectueux lors d’une mission de vaisseau spatial Deep Space, dans un épisode récent du podcast Corecursive d’Adam Gordon Bell.

Garret a partagé une histoire remarquable sur le débogage dans l’espace lointain – ainsi que quelques souvenirs des premiers jours de la programmation. En cours de route, Garret a offert une perspective rafraîchissante sur ce qui a changé – et ce qui n’a pas changé – dans le monde de la programmation. Garret a également exploré les défis uniques de l’écriture de code pour un vaisseau spatial.

Et il se souvenait de son rôle principal dans un moment vraiment glorieux de l’histoire de Lisp.

Utilisateur surpuissant

Garret avait travaillé comme chercheur scientifique au Jet Propulsion Laboratory de la NASA de 1988 à 2000, puis de 2001 à 2004. La spécialité de Garret : les robots mobiles autonomes. Il a aidé à lancer ce qui est aujourd’hui l’architecture de contrôle de robot mobile autonome standard de facto.

L’équipe de Garret a travaillé sur des prototypes pour le rover robotique Mars Sojourner.

Sur le podcast, Garret a décrit les options de programmation très limitées en 1988 – un monde avant Java, Python, JavaScript et même C++. « Il y a Pascal et C et Basic et le code machine. Et c’est à peu près tout en termes de langues populaires. Faire quoi que ce soit dans l’une de ces langues est vraiment très difficile. Le code de la plupart des engins spatiaux a fini par être écrit en langage assembleur.

Mais ensuite, il y avait Lisp – un langage basé sur l’abstraction propre des problèmes dans des listes et des fonctions. Et tandis que les programmeurs C s’inquiètent de choses comme les pointeurs pendants, Lisp a également une gestion automatique de la mémoire. “Il est tellement plus rapide et plus facile de faire avancer les choses lorsque le langage que vous utilisez vous fournit certaines de ces abstractions de haut niveau”, se souvient Garret sur le podcast. “Et dans un monde où le seul langage qui a cela est Lisp, connaître Lisp est vraiment comme une superpuissance.

Avec Lisp, “chaque problème devient un problème de compilateur”

“Cela a juste fait sauter tout le reste hors de l’eau à l’époque.”

À l’époque, Lisp n’était pas vraiment utilisé à la NASA.

“Il y avait pas mal de préjugés contre Lisp parce que c’était bizarre et peu familier, et il avait cette étrange technologie de collecte des ordures dont vous ne saviez jamais quand cela arrêterait votre processus dans son élan”, se souvient Garrett.

Le groupe de Garret l’a trouvé utile pour le matériel à mémoire limitée. Lisp pourrait être utilisé pour façonner un langage personnalisé spécifiquement pour le problème en question, puis le compiler pour le matériel du robot. Ou, comme le dit Bell, “chaque problème devient un problème de compilateur”. L’équipe de Garret a minutieusement écrit et testé son code sur un simulateur de robot (sur un ordinateur Macintosh) avant de l’installer dans le vrai rover et d’effectuer un essai chronophage dans l’Arroyo.

Malgré la base de code développée par le groupe, lorsque le rover Sojourner a atteint Mars, il était alimenté en code C.

Pourtant, en 1998, un nouveau directeur de la NASA a lancé le projet New Millennium de la NASA – un programme pilote de démonstration de technologies différentes (et moins chères), à travers un certain nombre de missions d’exploration de l’espace lointain.

Cela signifiait que leur code Lisp avait une seconde vie, se souvient Garret sur le podcast. La technologie d’autonomie que l’équipe avait commencé à développer pour les rovers a été réorientée. Sa nouvelle mission ? Contrôleur de vol.

L’équipe de Garret a travaillé sur un logiciel de prise de décision innovant – utilisant un langage personnalisé écrit en Lisp spécialement conçu pour éviter la possibilité d’une «condition de concurrence» redoutée (où deux threads s’exécutant simultanément se battent pour le même espace mémoire). “Il a été testé pendant des jours et des jours et des jours” – sur exactement le même matériel allait dans l’espace. «Nous étions donc très confiants que cela allait fonctionner.

“Et ça n’a pas marché…”

Échec de l’espace profond

Garret explique qu’au cours de leurs trois jours de contrôle de vol, « il y a eu un moment où il était censé faire quelque chose et ce moment est passé et il n’a pas fait ce qu’il était censé faire. Et les sonnettes d’alarme sonnèrent…

“Maintenant, ce code qui s’est avéré sans impasse semble être gelé à 150 millions de kilomètres de chez nous.”

C’était une situation tendue. « Nous n’avions aucune idée de ce qui se passait…. Et tout ce que nous faisions lorsque nous décidions de faire quelque chose, nous le faisions, puis nous nous asseyions et attendions une heure pour le résultat. Après qu’une équipe dans une salle de conférence soit parvenue à un consensus, leurs commandes “ont été soumises à un processus d’examen composé d’un certain nombre de niveaux de gestion, qui ont tous dû l’approuver”.

Une fois les approbations obtenues, les commandes ont été transmises via un réseau câblé dédié à l’une des antennes de 70 mètres de large du réseau Deep Space, qui a envoyé les commandes dans l’espace à la vitesse de la lumière… »

Ils ont d’abord demandé un backtrace – une opération de programmation courante qui génère une liste de tous les processus actuellement actifs (et, comme Garret l’a décrit, “ce qu’ils attendent”.)

“C’était en fait presque immédiatement évident ce qui n’allait pas parce qu’il y avait ce processus qui attendait quelque chose qui aurait déjà dû se produire…

“Le problème était qu’il y avait, en fait, une condition de course. Ce qui était censé être impossible. Malheureusement, l’un des codeurs de Garret avait appelé une fonction Lisp de niveau inférieur – qui avait créé par inadvertance “une fin de course autour des garanties de sécurité” de leur langage soigneusement personnalisé. (Garret se reproche de ne pas avoir expliqué cela plus clairement au codeur.)

L’équipe a décidé de déclencher “manuellement” l’événement, ce qui a permis au logiciel de redémarrer.

“Nous n’avons pas perdu le vaisseau spatial et nous avons atteint tous les objectifs de la mission – donc techniquement, ce fut un succès”, a déclaré Garret sur le podcast. «Mais le processus de développement a été si douloureux et semé d’embûches – et encore une fois, il y avait la politique. Donc, malgré le fait que nous ayons réussi à le faire fonctionner, le projet d’autonomie a été annulé par la suite et il n’a plus jamais volé.

Un essai de 2002 sur le site Web personnel de Garret affirme que « la disparition de Lisp au JPL est une tragédie. Le langage est particulièrement bien adapté au type de développement logiciel qui se fait souvent ici : des applications uniques et hautement dynamiques qui doivent être développées avec des budgets et des calendriers extrêmement serrés. »

Mais Lisp a été ignoré pour C ++, puis Java, avec la justification donnée comme une tentative de suivre les «meilleures pratiques». La réponse de Garret ? « Nous confondons les meilleures pratiques avec la norme entraine toi. Les deux ne sont pas les mêmes.” Et même au-delà de cela, ce qui est finalement le mieux n’est pas une norme invariable, mais devrait dépendre des particularités du projet en cours.

Mais dans une discussion sur Hacker News, un commentateur s’est identifié comme un ingénieur de la NASA qui avait été l’ingénieur logiciel de la charge utile pour une mission de 2009 explorant le pôle sud de la lune – et a déclaré qu’il avait utilisé Lisp pour écrire son propre langage personnalisé pour la commande des instruments. séquences (et pour simuler l’ordinateur). “La syntaxe et les macros simples et flexibles de Lisp ont facilité l’expression de modèles de commande et de synchronisation pour cela.”

Ils ont donc quitté Garret avec une pensée rassurante : “Je pense que Lisp est toujours utilisé dans divers coins et recoins de la NASA.”


Image caractéristique par NASA/JPL, domaine public.