web analytics

Su GitHub il codice che ci ha portati sulla luna

Quando i programmatori del MIT Instrumentation Laboratory hanno iniziato a sviluppare il software di volo per il programma spaziale Apollo 11 a metà degli anni ’60, la tecnologia necessaria non esisteva. Hanno dovuto inventarla.
Gli sviluppatori hanno ideato un nuovo modo di archiviare i programmi per l’elaboratore, chiamato “rope memory”, e hanno creato una versione speciale del linguaggio di programmazione Assembly. L’Assembly, ai giorni nostri, è sconosciuto a molti programmatori, essendo molto difficile da leggere. Assembly è facilmente comprensibile ai computer, ma non agli esseri umani. Per l’Apollo Guidance Computer (AGC), i programmatori del MIT hanno dovuto scrivere migliaia di righe in questo linguaggio.
Questa è un’immagine degli anni ’60 che esplicita quanto codice è stato scritto. Margaret Hamilton, direttrice dell’ingegneria del software del progetto, in piedi a fianco del codice cartaceo
Code-moon-1
Il codice dell’AGC è stato a disposizione del pubblico per un po ‘di tempo. Fu caricato per la prima volta dal tecnico ricercatore Ron Burkey nel 2003. Burkey ha trascritto il codice direttamente dalle immagini scannerizzate delle copie cartacee originali, messe online dal MIT.
Ha digitato manualmente ogni linea, una ad una.
Lo sforzo rese il codice a disposizione di qualsiasi ricercatore o hobbista che volesse studiarlo. Burkey stesso ha utilizzato il software per creare una simulazione del AGC:
Pur essendo stato il progetto di Burkey un grande successo, il codice è rimasto un po’ oscuro a molti sviluppatori. Questo fino allo scorso Giovedì (7 luglio), quando l’ex stagista della NASA Chris Garry ha caricato il software nella sua interezza su GitHub, il sito di code-sharing dove milioni di programmatori possono accedere ai files liberamente.
In poche ore, i programmatori hanno iniziato a dissezionare il software, guardando con particolare interesse i commenti che i programmatori originali dell’AGC avevano scritto. In programmazione, i commenti sono descrizioni che esplicitano che lavoro viene svolto dal programma in un certo punto.
La maggior parte dei commenti del codice va al di là della noiosa spiegazione del programma. Sono infatti caratterizzati da battute, messaggi e riferimenti ai costumi dell’epoca.
Per esempio uno dei file del codice sorgente è chiamato BURN_BABY_BURN--MASTER_IGNITION_ROUTINE, e il commento iniziale spiega il perchè:moon-code-4
O anche nel file chiamato LUNAR_LANDING_GUIDANCE_EQUATIONS.s, dove si vedono due linee di codice pensate per rimanere temporanee, ma che hanno finito per essere permanenti, contro le speranze del programmatore:moon-code-3
E nel filePINBALL_GAME_BUTTONS_AND_LIGHTS.s, compare una peculiare citazione di Shakespeare:moon-code-2
Questa è una plausibile riferimento al linguaggio di programmazione dell’AGC stesso, come un utente Reddit ha messo in chiaro. Il linguaggio usa predeterminati “nomi” e “verbi” per eseguire le operazioni. Il verbo 37, per esempio, significa “Esegui programma“, mentre il sostantivo 33 significa “Tempo di accensione”.
Ora che il codice è su GitHub, i programmatori possono suggerire cambiamenti e segnalare problemi nei files. E, ovviamente, hanno già iniziato. Se siete curiosi, vi consigliamo di andare a leggere i vari commenti lasciati nel link relativo al codice su GitHub.
Per molti, questa divulgazione è stata un bel viaggio nel tempo.