All’inizio degli anni ’80, prima dell’esplosione di UNIX come sistema operativo standard per tutte le macchine di piccola e media dimensione, ogni produttore di sistemi sviluppava il proprio sistema operativo e i propri compilatori per i linguaggi allora di uso comune, ovvero il COBOL per le applicazioni gestionali, il FORTRAN per quelle scientifiche, il BASIC per la didattica della programmazione.
Dalla fine degli anni ’70 si era sentito il bisogno, per lo sviluppo del software di sistema, di usare linguaggi di alto livello in sostituzione dell’assembler, per migliorare la produttività, la leggibilità e la qualità complessiva del software di sistema.
Già nel 1978, Honeywell Information Systems Italia, per la sua macchina L62, in stretta collaborazione con l’Istituto di Cibernetica dell’Università di Milano, mi aveva impegnato nello sviluppo di un compilatore Pascal, basandolo sull’esperienza fatta con la mia tesi di laurea.
Olivetti in quel periodo stava per sviluppare la Linea 1 MOS, una famiglia di minisistemi il cui sistema operativo MOS (Multifunctional Operating System) rappresentava un’innovazione architetturale e funzionale senza precedenti per macchine di quella dimensione.
Sandro Osnaghi aveva stabilito che il linguaggio di sviluppo fosse un Pascal, arricchito di alcune caratteristiche per rendere più efficiente la programmazione di sistema, pur mantenendo il più alto livello possibile di robustezza sia statica che dinamica.
In questo contesto, come assistente universitario di Sandro Osnaghi, ho iniziato fin dal 1979 ad occuparmi dello sviluppo di compilatori e strumenti di programmazione con un compilatore Pascal+ per la macchina S6000, precursore della Linea 1 MOS.
Durante il 1981, presso la Olivetti Advanced Technology Center (Olivetti ATC) di Cupertino, insieme a Mauro Fiorentini, abbiamo concluso lo sviluppo di un compilatore Pascal+ per l'S6000, con tecniche di half-bootstrap a partire dal compilatore Pascal+ sviluppato dalla Silicon Valley Software (SVS) per il processore Z8000.
Al mio rientro da Cupertino nel settembre 1981, in modo quasi più interessante, e oserei dire avventuroso, Sandro Osnaghi mi chiese di sviluppare un compilatore FORTRAN 77 per la Linea 1 MOS nel più breve tempo possibile poiché un grande cliente ne aveva esigenza.
Il compito si presentava assai arduo perché l'urgenza non avrebbe consentito uno sviluppo da foglio bianco, senza contare la necessità di sviluppare la necessaria libreria di funzioni matematiche di cui ogni implementazione di FORTRAN doveva obbligatoriamente essere dotata. A questo si aggiungeva la necessità di un emulatore di un processore matematico di cui le macchine Olivetti (ma non solo) non erano normalmente dotate.
Come ne siamo venuti a capo? Dico subito: lo sviluppo ha avuto luogo tra ottobre 1981 e gennaio 1982. Fedeli allo spirito e al coraggio (o incoscienza?) di quei giorni abbiamo subito avviato la mission impossible (anche grazie a un’idea di Mario Lualdi) realizzando il primo esempio industriale di riuso di software e di merging architecture. Come? sapevamo, dai manuali UNIX dell’esistenza di un compilatore F77 per UNIX sviluppato da Stuart Feldman dei Bell Labs. L’abbiamo ottenuto, ma, ovviamente non generava codice per la Linea 1 MOS. Attraverso Roberto Del Moretto dell’Olivetti ATC, siamo venuti a conoscenza dell’esistenza di un compilatore C per Z8000, basato sul PCC (Portable C Compiler) dei Bell Labs. Abbiamo quindi avviato il nostro progetto “Frankenstein", prendendo il front-end del F77 dei Bell Lab, “agganciandolo” al generatore di codice del PCC per Z8000. Operazione non banale anche per la totale assenza di documentazione dei codici intermedi.
Ne frattempo avevamo trovato un insieme di librerie matematiche, scritte in C, sviluppate dall’Università di Berkeley. Anche queste sono state adattate alla Linea 1 MOS. A questo punto mancava “solo” l’emulatore del necessario processore floating point, che è stato scritto ad hoc.
Tutto realizzato in 4 mesi, da 4 persone (il sottoscritto, Mauro Fiorentini, Carlo Tibaldi e Nino Giannuzzi).
Altri tempi, altre avventure, altro coraggio.