Il software, scritto in linguaggi diversi e pensato per funzionare su modelli di computer diversi, è una lingua universale? Affronta problemi che cambiano, ma a questo servono gli algoritmi. La grammatica e la sintassi sono mutevoli ma non la logica della macchina sottostante e soprattutto fa velo al tutto il modo di pensare computazionale che designa lo specifico dell’informatico.
Una possibile dimostrazione di queste idee viene se si va a curiosare tra le numerose righe di codice rese adesso disponibili per tutti su GitHub da parte di gruppi di appassionati e bibliotecari che hanno digitalizzato l’ampia documentazione del software usato dalla Nasa per le missioni Apollo.
Attenzione, disponibili per tutti su GitHub non vuol dire che basta scaricarli e compilare per avere un simulatore del modulo Lem o dei sistema di navigazione dell’Apollo.
Negli anni Sessanta, mentre la Nasa cercava di recuperare il terreno perduto rispetto all’Unione Sovietica (che per prima aveva messo in orbita un satellite e poi mandato esseri viventi come la cagnolina Laika e poi Yuri Gagarin), non solo faticavano gli ingegneri esperti di razzi vettori e di moduli di volo guidati da Wernher von Braun (l’ex scienziato nazista inventore delle V1 e V2, arresosi agli americani, graziato e diventato responsabile dei vettori del progetto spaziale della Nasa), c’era tanto da fare anche per i primi scienziati informatici. Le macchine universali di Turing e l’architettura pensata John von Neumann per il computer digitale erano già acquisite ma c’era tanto da inventare e su cui lavorare ancora.
In particolare, gli scienziati della Nasa si misero di impegno per realizzare i sistemi digitali di controllo sia del vettore che delle navicelle Apollo e dei moduli di atterraggio, utilizzando tecniche all’avanguardia di scrittura e archiviazione del software, realizzato in una variante del codice Assembly.
Il codice venne realizzato per una serie di computer differenti ma semplificati in tre: l’Apollo Guidance Computer (AGC), per il quale sono sviluppati due blocchi di software, quello per l’AGC del Command Module (Comanche055) e quello per l’AGC del Lunar Module (Luminary099). Vari sistemi e sottosistemi, che richiesero migliaia e migliaia di righe di codice in Assembly (reperibili qui), con uno sforzo titanico coordinato da una donna, una delle figure meno note ma più importanti nel mondo dell’informatica applicata, cioè Margaret H. Hamilton, rappresentata nella foto storica a corredo di questo articolo (qui sotto) mentre mostra i volumi originali sui quali era stato stampato tutto il codice impiegato nelle missioni Apollo.
Epocale è stata anche la fatica portata avanti da vari volontari nel riprendere tutti i volumi, scansionarli, renderli disponibili online per poi essere nuovamente digitalizzati a mano, con un lavoro certosino riga dopo riga, per il rischio che i sistemi di OCR facessero eccessive interpolazioni, dato che i software di riconoscimento ottico migliori sono basati su sistemi di dizionari e meccanismi di grammatica e sintassi che non funzionerebbero per il codice Assembly, praticamente una serie apparentemente casuale di parole molto brevi e numeri.
Alla fine, lo sforzo iniziato nel 2003 è giunto a compimento da pochissime ore, quando sono stati pubblicati su GitHub i sorgenti “normalizzati” che sono stati originariamente scritti dall’Instrumentation Laboratory del MIT, conosciuto anche come Draper Lab. Esistono anche emulatori nei quali far girare questi pezzi di codice, ma le cose sono piuttosto complesse anche perché il loro scopo è quello di essere utilizzati all’interno di simulatori più ampi (che ancora non ci sono) e costituiscono uno sforzo poco popolare ma molto interessante delle comunità di appassionati del pianeta. La principale delle quali è questa.