Margaret Hamilton: il software dell’Apollo 11
Il 20 luglio 1969, a pochi minuti dall’allunaggio, il computer di bordo del modulo lunare iniziò a segnalare una serie di allarmi. Per qualche istante sembrò che la missione potesse interrompersi proprio durante la discesa verso la superficie lunare. Ma il software sviluppato dal team guidato da Margaret Hamilton riuscì a gestire il sovraccarico del sistema, consentendo all’Apollo 11 di completare l’allunaggio
di Barbara Palombo e Ingrid Hunstad
Quando si racconta la missione Apollo 11, il pensiero corre quasi sempre agli astronauti Neil Armstrong e Buzz Aldrin, alle traiettorie che li portarono fino alla Luna o al Mare della Tranquillità scelto come sito di atterraggio. Dietro quella missione lavorarono però centinaia di scienziati, ingegneri e matematici. Tra loro c’era anche Margaret Hamilton, informatica del Massachusetts Institute of Technology (MIT), che guidò il gruppo responsabile dello sviluppo del software di bordo dell’Apollo Guidance Computer.
Il suo lavoro non consisteva semplicemente nel programmare un computer. Doveva progettare un sistema capace di prendere decisioni nei momenti più critici della missione.
In un’epoca in cui l’informatica era ancora una disciplina nascente, Hamilton contribuì a definire un nuovo modo di progettare il software, rendendolo abbastanza affidabile da controllare una missione spaziale. Proprio durante l’allunaggio dell’Apollo 11 quel lavoro avrebbe dimostrato tutta la sua importanza.
Quando il software era una frontiera
Margaret Heafield Hamilton nacque il 17 agosto 1936 a Paoli, nello stato dell’Indiana. Si laureò in matematica all’Earlham College nel 1958 e, dopo un breve periodo come insegnante, iniziò a lavorare al Massachusetts Institute of Technology (MIT), uno dei principali centri di ricerca scientifica degli Stati Uniti.
Erano gli anni in cui l’informatica stava muovendo i primi passi. I computer occupavano intere stanze, disponevano di una capacità di calcolo estremamente limitata e programmare significava lavorare direttamente con macchine molto diverse da quelle che conosciamo oggi. Il software non era ancora considerato una disciplina autonoma: l’attenzione era rivolta soprattutto all’hardware, mentre i programmi erano spesso visti come un semplice complemento.
Nel 1961 il MIT Instrumentation Laboratory ricevette dalla NASA l’incarico di sviluppare il sistema di guida del programma Apollo. Margaret Hamilton entrò a far parte del progetto e, nel giro di pochi anni, assunse la direzione della Software Engineering Division, il gruppo responsabile dello sviluppo del software di bordo del modulo di comando e del modulo lunare. In un settore quasi interamente maschile e in una disciplina ancora priva di regole consolidate, guidò un team di giovani programmatori chiamato a risolvere problemi che nessuno aveva mai affrontato prima.
Il loro compito era progettare un software capace di funzionare in condizioni estreme, senza possibilità di intervento esterno e con margini di errore praticamente nulli. Come avrebbe ricordato la stessa Hamilton molti anni dopo, «non c’era una seconda possibilità. Lo sapevamo. Dovevamo trovare una soluzione e l’abbiamo trovata».

Il computer che guidò l’Apollo
Il software sviluppato dal gruppo di Margaret Hamilton era destinato all’Apollo Guidance Computer (AGC), il computer di bordo che assisteva gli astronauti durante le fasi di navigazione e di allunaggio.
Oggi può sembrare difficile da immaginare, ma quel computer disponeva di una memoria di appena poche decine di kilobyte e di una capacità di elaborazione infinitamente inferiore a quella di qualsiasi dispositivo elettronico moderno. Eppure era chiamato a svolgere un compito straordinariamente complesso: elaborare continuamente i dati provenienti dagli strumenti di bordo, calcolare la posizione del veicolo spaziale, assistere gli astronauti nelle manovre e controllare le procedure necessarie per l’allunaggio.
In un sistema con risorse così limitate non era possibile prevedere ogni situazione. Il software doveva essere progettato per riconoscere gli imprevisti e reagire autonomamente, continuando a svolgere le operazioni più importanti anche in presenza di errori o sovraccarichi.
Questa filosofia progettuale rappresentava una novità assoluta. Invece di limitarsi a eseguire una sequenza prestabilita di istruzioni, il software dell’Apollo era in grado di stabilire delle priorità, interrompere le attività non essenziali e concentrare tutta la capacità di calcolo disponibile sulle funzioni indispensabili per la sicurezza della missione.
Quella scelta progettuale avrebbe dimostrato tutta la sua efficacia il 20 luglio 1969, durante gli ultimi minuti della discesa dell’Apollo 11 verso la superficie lunare.
Gli allarmi 1201 e 1202
Il 20 luglio 1969 il modulo lunare Eagle stava ormai completando la discesa verso il Mare della Tranquillità. Dopo quattro giorni di viaggio, mancavano pochi minuti al primo allunaggio della storia.
Improvvisamente, il computer di bordo iniziò a visualizzare due messaggi: 1201 e 1202.
Per gli astronauti Neil Armstrong e Buzz Aldrin quei numeri non avevano un significato immediato. Il computer stava segnalando un executive overflow, cioè un sovraccarico del sistema: il processore stava ricevendo più richieste di quante fosse in grado di elaborare.
Nella sala di controllo della NASA si susseguirono rapidamente le verifiche. Se gli allarmi avessero indicato un malfunzionamento grave, l’allunaggio avrebbe dovuto essere interrotto. Il tempo per decidere era pochissimo.
In seguito si scoprì che il problema era stato causato dal radar di rendezvous che, pur non essendo necessario durante la fase di allunaggio, stava continuando a inviare dati al computer, sottraendo prezioso tempo di elaborazione. Il rischio era che il sistema si bloccasse proprio nel momento più delicato della missione.
Fu allora che entrò in gioco una delle scelte progettuali introdotte dal gruppo guidato da Margaret Hamilton.
Il software era stato progettato per riconoscere automaticamente una situazione di sovraccarico. Anziché interrompere tutte le operazioni, eliminava temporaneamente quelle meno importanti e continuava a eseguire soltanto le funzioni indispensabili per la sicurezza della missione. In altre parole, il computer era in grado di stabilire delle priorità e di “proteggere” l’allunaggio anche quando le sue risorse non erano più sufficienti per svolgere ogni attività contemporaneamente.
Grazie a questo meccanismo, il computer continuò a fornire agli astronauti le informazioni essenziali per la discesa. Dopo pochi istanti di incertezza, dalla sala di controllo arrivò il messaggio che avrebbe deciso le sorti della missione: “Go”. La discesa riprese.
Pochi minuti dopo Neil Armstrong comunicò al mondo: “The Eagle has landed”. Dietro quella frase rimasta nella storia c’era anche il lavoro di Margaret Hamilton e del suo gruppo, che avevano progettato un software capace di gestire un imprevisto senza compromettere l’obiettivo della missione. La stessa Hamilton ricordò molti anni dopo quel momento come uno dei più intensi della sua carriera: il software non stava soltanto segnalando un problema, ma stava anche compensandolo, permettendo all’equipaggio di completare l’allunaggio in sicurezza
La nascita dell’ingegneria del software
L’esperienza maturata durante il programma Apollo cambiò profondamente il modo di progettare i programmi informatici. Fino ad allora il software era spesso considerato privo di una propria identità scientifica e ingegneristica.
Margaret Hamilton contribuì a cambiare questa visione. Fu tra le prime a sostenere che lo sviluppo del software dovesse seguire criteri rigorosi, analoghi a quelli utilizzati nelle altre discipline dell’ingegneria. Per descrivere questo nuovo approccio contribuì a diffondere l’espressione Software Engineering, “ingegneria del software”, oggi utilizzata in tutto il mondo.
L’obiettivo non era soltanto scrivere programmi funzionanti, ma realizzare sistemi affidabili, capaci di prevedere gli errori, gestire gli imprevisti e continuare a operare anche in condizioni critiche. I meccanismi di rilevamento degli errori, la gestione delle priorità e le procedure di recupero sviluppati per il programma Apollo rappresentarono un’importante innovazione e contribuirono a definire molti dei principi che guidano ancora oggi la progettazione del software per applicazioni critiche.
Dalle missioni spaziali ai satelliti per l’osservazione della Terra, dai sistemi di navigazione ai dispositivi medici, molti dei criteri di affidabilità introdotti in quegli anni continuano a essere un punto di riferimento per l’ingegneria del software moderna.
Margaret Hamilton ha dimostrato che una delle più grandi imprese scientifiche del Novecento non dipese soltanto da razzi e astronauti. Dipese anche dalla capacità di progettare un software in grado di affrontare l’imprevisto. Ancora oggi molti dei principi sviluppati per il programma Apollo continuano a guidare la progettazione dei sistemi informatici più critici.
Questo articolo conclude lo speciale dedicato alle donne che contribuirono alla missione Apollo 11. Scopri anche Katherine Johnson: la matematica che tracciò la rotta verso la Luna e Mareta Nelle West: la geologa dietro l’allunaggio dell’Apollo 11.
Oltre Apollo
L’immagine più celebre di Margaret Hamilton la ritrae accanto alla gigantesca pila di fogli contenente il codice sorgente del software sviluppato dal suo gruppo per le missioni Apollo. Scattata nel 1969 al MIT, quella fotografia è diventata il simbolo della nascita dell’ingegneria del software.
Dopo il programma Apollo, Hamilton continuò a sviluppare metodologie per la progettazione di software affidabili e nel 1986 fondò la Hamilton Technologies. Nel 2016 ricevette la Presidential Medal of Freedom, la più alta onorificenza civile degli Stati Uniti.
Oggi molti dei principi introdotti dal suo gruppo, come la gestione delle priorità e degli errori nei sistemi critici, continuano a essere utilizzati nello sviluppo del software per missioni spaziali e altre applicazioni ad alta affidabilità.

