Sta tutto in file zip di circa 178 kB (2,2 MB decompresso) il codice della missione Apollo 11, la prima che portò un equipaggio umano sulla Luna il 20 luglio 1969.

Curiosamente 178 kB pesa l'immagine, distribuita dalla NASA nel pubblico dominio, che mostra la capo progettista di quel software, Margaret H. Hamilton, all'opera.

I sorgenti dell'Apollo 11 Guidance Computer (AGC) sono disponbili su https://github.com/chrislgarry/Apollo-11. Si tratta del software che gestiva il Modulo Comando (Comanche055) e il Modulo Lunare (Luminary099).

I file sono stati ottenuti dalla scansione degli originali cartacei custoditi al museo del MIT, eseguita da Paul Fjeld e organizzata da Deborah Douglas, depositati su Github da Chris Garry (https://github.com/chrislgarry). 

I sorgenti, rilasciati nel marzo 1969, portano la firma, tra gli altri, proprio della Hamilton, all'epoca a capo della Software Engineering Division del MIT Instrumentation Laboratory il cui grupp - come spiega il primo dei file CONTRACT_AND_APPROVALS.agc – ha realizzato i programmi su commessa della National Aeronautics and Space Administration, altrimenti detta NASA. 

Questo software era orientato al controllo diretto dell'hardware. Il linguaggio con il quale fu sviluppato era l'Assembly, un linguaggio a “basso livello”, ossia più vicino alla gestione diretta della macchina.

Scopo del software era gestire un hardware che avrebbe dovuto essere scagliato nello spazio e sul quale non si sarebbe potuti intervenire una volta partita la missione: le due parti che componevano l'Apollo 11, ossia il Modulo Comando e il Modulo Lunare erano dotate ciascuna di un AGC, che doveva funzionare anche senza l'assistenza degli astronauti.

I "credits" del software dell'Apollo 11
I "credits" del software dell'Apollo 11

A livello hardware i due AGC erano identici e intercambiabili, quello che li differenziava era il software, adatto ai compiti di ciascun modulo. Un software che subì una evoluzione, pertanto quello che girò sull'Apollo 11 era diverso da quello che poi girò su Apollo 17. 

Le caratteristiche hardware erano veramente risibili rispetto a quelle disponibili oggi persino su un cellulare. Stiamo parlando di un sistema che aveva 2048 “parole” di RAM. Una “parola” era di 15 bit, quindi la memoria volatile era di 30720 bit, ossia 3840 byte (3,75 kB). La ROM era di 36.864 parole, ossia 69.120 byte (67,5 kB). La CPU era capace di compiere "ben" 85.000 istruzioni al secondo.

Oggi la memoria e le istruzioni si misurano rispettivamente in miliardi di byte (GB) e in milioni al secondo (MIPS).

Codice Assembly del software dell'Apollo 11
Codice Assembly del software dell'Apollo 11

Eppure, con questi hardware e software l'uomo è andato sulla Luna. E si trattava di buon software visto che le sue caratteristiche di progettazione hanno consentito di salvare la missione, che stava per essere abbandonata a tre minuti dall'allunaggio, quando in seguito a un errore nella compilazione di una checklist i sistemi furono sovraccaricati. Ma poiché il sistema era progettato per dare priorità alle operazioni più importanti in caso di sovraccarico, il software diede priorità all'allunaggio, che fu quindi consentito grazie alla buona ingegnerizzazione. Il racconto completo dell'episodio lo trovate raccontato anche sulla Wikipedia.

Non è un caso se la Hamilton, ad agosto ottantunenne, è ricordata come colei che ha dato un senso compiuto e piena dignità al concetto di “ingegneria del software” teorizzato da Oettinger.

Viene da chiedersi a cosa serva oggi disporre dei sorgenti del software dell'AGC.

Da un lato lo scopo del rendere disponibili i sorgenti su Github è quello di creare un progetto partecipativo, dando modo agli utenti di segnalare eventuali problemi di scansione, di perdita di caratteri o di interi file. Le immagini a bassa risoluzione sono disponibili online sia per Luminary099 che per Comanche055. Inoltre Ron Burkey (info@sandroid.org), curatore del progetto Virtual AGC, è disponibile a inviare su richiesta le scansioni ad alta risoluzione non presenti sul sito per ragioni di spazio.

Codice Assembly del software dell'Apollo 11
Codice Assembly del software dell'Apollo 11

Questi sorgenti sono assemblabili su un moderno PC (Windows, Linux e Mac), allo scopo di creare una simulazione dei computer di bordo delle missioni lunari del programma Apollo, per comprenderne il funzionamento.

Ma non aspettatevi che assemblando questo sorgente per com'è, si possa creare un simulatore di volo spaziale o di allunaggio, o che si possano simulare i pannelli di controllo del Modulo Lunare o del Modulo Comando. Pur tuttavia gli sviluppatori sono incoraggiati a usare il codice come parte di un progetto di simulatore.

Da un lato quindi, ricostruire un pezzo importante della storia del software, ma anche dell'umanità, dall'altro la possibilità che questi programmi, in una versione aggiornata, possano insegnarci ancora qualcosa, diventando parte di un progetto Open Source. Magari aiutare a realizzare la missione su Marte, perché no?

Sul sito http://www.ibiblio.org/apollo/ oltre a trovare tutte le informazioni sul progetto, da leggere con cura se si vuole partecipare, c'è anche il video che riporto di seguito, che mostra una di queste implementazioni, per ora del tutto fini a se stesse.