Quando al MIT Instrumentation Laboratory annunciarono che avrebbero dovuto sviluppare il software di controllo per l’Apollo 11 non volevano crederci. E come avrebbero potuto se, negli anni sessanta, quella tecnologia manco esisteva? Se la sarebbero dovuti inventare, per dio.
Il primo passo fu inventare un modo nuovo per avere una memoria non volatile, un tipo di ROM chiamato “rope memory”, il secondo fu addirittura creare una versione speciale del linguaggio Assembly. Sì, molti di voi non lo conosceranno, specialmente se avete un due davanti alla vostra età. Ma, fidatevi di me, è difficile da leggere, difficile da scrivere e debuggare. Per l’Apollo Guidance Computer (AGC) collaborare su migliaia di righe di codice è stato d’obbligo.
Com’era programmare cinquant’anni fa? Nell’immagine che segue c’è la risposta, riassunta in più di dieci blocchi cartacei sui quali era scritto il programma.
Il programma, per chi volesse approfondire, è stato reso pubblico alcuni anni fa, quando nel 2003 un ricercatore di nome Ron Burkey lo trascrisse ricopiando le scannerizzazioni dall’originale fatte da migliaia di fogli svolazzanti. Avete letto bene, ha manualmente copiato ogni singola riga di codice, una per una.
«È stato scannerizzato da un pilota aeronautico di nome Gary Neff, in Colorado», scrisse Burkey in una mail «il MIT caricò le scansioni, ma molte erano storte ed illegibili. Dove non si leggeva, ho completato io il codice. Poi, anni dopo, sono state rese disponbili le scansioni complete. » Ebbene, Burkey aveva completato il codice in maniera corretta.
Questo codice sorgente ora è a disposizione di tutti. Lui stesso ha creato un simulatore del computer di bordo Apollo che gira(va) sul suo Palm. Quando vi sentite pazzamente nerd, guardate questo video e ridimensionatevi pure:
Tuttavia, trovare e studiare questo sorgente fino ad oggi è stato relativamente oscuro. Da qualche mese è interamente disponibile su Github, la piattaforma dove milioni di sviluppatori come me ogni giorno condividono librerie e progetti opensource. L’ha caricato un certo Chris Garry, che sul biglietto da visita tiene scritto NASA.
Ora, se non siete degli sviluppatori, vi racconto una cosa. Impariamo presto che il codice va documentato: all’atto pratico tra le righe di codice eseguibile vi sono dei commenti utili per spiegare il codice a chi lo leggerà (colleghi, noi stessi) in seguito. Queste scritte naturalmente non vengono interpretate quando il programma va in esecuzione. È, però, sempre una parte molto divertente quando un software non pensato per diventare pubblico poi lo diventa, perché nei commenti c’è sempre qualcosa di particolare. Raccontano una storia. Letti dopo quasi sessant’anni diventano una vera macchina del tempo. Dato che nessuno pensa che il proprio codice diventerà di pubblico dominio (specialmente se è roba per la NASA), spesso ci si lascia andare proprio nei commenti. Per fare un esempio, nel sorgente di Windows 2000 pubblicato anni fa compaiono decine di volte le parole fuck, shit o crap.
Anche qui, molti commenti al software Apollo non riguardano esattamente l’esplorazione dello spazio. Uno dei file, per esempio, è chiamato BURN_BABY_BURN–MASTER_IGNITION_ROUTINE, il commento iniziale spiega il perché:
Qui c’è un comando, molto, molto amichevole che probabilmente comunicava agli astronauti di riposizionare l’antenna del Landing Radar, chiamandola la “stupida manovella” (crank silly thing).
Che ci crediate o no, questo programma ha fatto funzionare sia il Modulo di Comando che il Modulo Lunare fino alla luna. C’è poco di che essere complottisti.