Una breve storia di UNIX
Linux è un membro della famiglia di sistemi operativi UNIX. In termini informatici, UNIX ha una lunga storia.
Iniziamo descrivendo le origini del sistema UNIX e del linguaggio di programmazione C, per poi considerare le due correnti chiave che hanno condotto al sistema Linux così com'è oggi: il progetto GNU e lo sviluppo del kernel Linux.
Una delle caratteristiche più notevoli di UNIX è che il suo sviluppo non è stato controllato da un unico fornitore o organizzazione. Al contrario, molti gruppi, sia commerciali che non commerciali, hanno contribuito alla sua evoluzione. Questa storia ha portato all'aggiunta di numerose funzionalità innovative, ma ha anche avuto la conseguenza negativa che le implementazioni di UNIX si sono moltiplicate nel tempo, rendendo sempre più difficile scrivere applicazioni che funzionassero su tutte le versioni.
Ciò ha spinto verso una spinta alla standardizzazione delle implementazioni UNIX, di cui parleremo più avanti.
Due definizioni del termine UNIX sono in uso comune. Una di queste indica i sistemi operativi che hanno superato i test di conformità ufficiali per la Single UNIX Specification e che quindi hanno il diritto ufficiale di essere marchiati come "UNIX" da The Open Group (i detentori del marchio UNIX). Al momento della scrittura, nessuna delle implementazioni UNIX libere (ad es. Linux e FreeBSD) ha ottenuto questo marchio.
L'altra accezione comune del termine UNIX indica quei sistemi che hanno l'aspetto e il comportamento dei classici sistemi UNIX (cioè l'originale UNIX dei Bell Laboratories e i suoi principali rami successivi, System V e BSD). Con questa definizione, Linux è generalmente considerato un sistema UNIX (così come i moderni BSD). Sebbene in queste lezioni prestiamo molta attenzione alla Single UNIX Specification, adotteremo la seconda definizione di UNIX, così da dire spesso cose del tipo "Linux, come le altre implementazioni UNIX...".
Breve storia dello sviluppo di UNIX
La prima implementazione di UNIX fu sviluppata nel 1969 (lo stesso anno in cui nacque Linus Torvalds) da Ken Thompson presso i Bell Laboratories, una divisione della società telefonica AT&T.
Fu scritta in assembler per un minicomputer Digital PDP‑7. Il nome UNIX era un gioco di parole su MULTICS (Multiplexed Information and Computing Service), il nome di un progetto di sistema operativo precedente in cui AT&T collaborava con il Massachusetts Institute of Technology (MIT) e la General Electric. (AT&T si era già ritirata dal progetto, frustrata per il suo iniziale fallimento nel produrre un sistema economicamente utile.)
Thompson trasse diverse idee per il suo nuovo sistema operativo da MULTICS, tra cui un file system ad albero, un programma separato per l'interpretazione dei comandi (la shell) e la nozione di file come flussi non strutturati di byte.
Nel 1970 UNIX fu riscritto in linguaggio assembly per un nuovo e potente minicomputer Digital PDP‑11 appena acquisito. Le tracce di questa eredità PDP‑11 si trovano ancora in vari nomi usati nella maggior parte delle implementazioni UNIX, incluso Linux.
Poco dopo, Dennis Ritchie, collega di Thompson ai Bell Laboratories e primo collaboratore di UNIX, progettò e implementò il linguaggio di programmazione C. Fu un processo evolutivo: C seguì un linguaggio interpretato precedente, il B. Il B era stato inizialmente implementato da Thompson e trasse molte delle sue idee da un linguaggio ancora più antico chiamato BCPL.
Entro il 1973 C era maturato al punto da permettere la quasi totale riscrittura del kernel UNIX nel nuovo linguaggio. UNIX divenne così uno dei primi sistemi operativi scritti in un linguaggio di alto livello, un fatto che rese possibile il successivo porting su altre architetture hardware. L'origine di C spiega perché esso, e il suo discendente C++, siano diventati così ampiamente usati come linguaggi di programmazione di sistema.
I linguaggi precedentemente diffusi erano stati progettati per altri scopi: FORTRAN per compiti matematici di ingegneri e scienziati; COBOL per sistemi commerciali che elaboravano flussi di dati orientati a record. C colmò una nicchia finora vuota e, a differenza di FORTRAN e COBOL (progettati da grandi comitati), il design di C nacque dalle idee e dalle necessità di pochi individui che lavoravano verso un unico obiettivo: sviluppare un linguaggio di alto livello per implementare il kernel UNIX e il software correlato.
Come il sistema operativo UNIX stesso, C fu progettato da programmatori professionisti per il proprio uso. Il risultato è stato un linguaggio piccolo, efficiente, potente, conciso, modulare, pragmatico e coerente nella sua progettazione.
Le Edizioni di UNIX
Tra il 1969 e il 1979 UNIX attraversò una serie di rilasci, noti come editions. In sostanza, questi rilasci erano istantanee della versione di sviluppo in evoluzione presso AT&T. Ecco le date per le prime sei edizioni di UNIX:
- First Edition, novembre 1971: a questo punto UNIX girava sul PDP‑11 e disponeva già di un compilatore FORTRAN e di versioni di molti programmi ancora usati oggi, tra cui
ar,cat,chmod,chown,cp,dc,ed,find,ln,ls,mail,mkdir,mv,rm,sh,suewho. - Second Edition, giugno 1972: UNIX era installato su dieci macchine all'interno di AT&T.
- Third Edition, febbraio 1973: questa edizione includeva un compilatore C e la prima implementazione delle pipe.
- Fourth Edition, novembre 1973: fu la prima versione quasi interamente scritta in C.
- Fifth Edition, giugno 1974: UNIX era installato su più di 50 sistemi.
- Sixth Edition, maggio 1975: fu la prima edizione ampiamente usata al di fuori di AT&T.
Nel corso di questi rilasci l'uso e la reputazione di UNIX cominciarono a diffondersi, prima all'interno di AT&T e poi oltre.
Un contributo importante a questa crescente notorietà fu la pubblicazione di un articolo su UNIX nella rivista molto letta Communications of the ACM ([Ritchie & Thompson, 1974]). All'epoca AT&T deteneva un monopolio, con l'autorizzazione del governo statunitense, sul sistema telefonico degli USA.
I termini dell'accordo con il governo impedivano ad AT&T di vendere software, il che significava che non poteva commercializzare UNIX come prodotto. Invece, a partire dal 1974 con la Fifth Edition, e soprattutto con la Sixth Edition, AT&T concesse licenze di UNIX per l'uso nelle università dietro una modesta tassa di distribuzione.
Le distribuzioni universitarie includevano la documentazione e il codice sorgente del kernel (circa 10000 righe all'epoca). Il rilascio di UNIX nelle università contribuì notevolmente alla popolarità e all'uso del sistema operativo; entro il 1977 UNIX era in esecuzione in circa 500 sedi, comprese 125 università negli Stati Uniti e diverse altre nazioni.
UNIX offriva alle università un sistema operativo multi‑utente interattivo, economico ma potente, in un periodo in cui i sistemi operativi commerciali erano molto costosi. Inoltre forniva ai dipartimenti di informatica il codice sorgente di un vero sistema operativo, che potevano modificare e utilizzare per l'insegnamento e la sperimentazione.
Alcuni di questi studenti, armati della conoscenza di UNIX, divennero evangelisti di UNIX. Altri fondarono o si unirono a numerose startup che vendevano workstation economiche basate sul facilmente portabile sistema UNIX.
La nascita di BSD e System V
Il Gennaio del 1979 vide il rilascio della Seventh Edition di UNIX, che migliorò l'affidabilità del sistema e fornì un file system potenziato. Questa versione conteneva anche numerosi nuovi strumenti, tra cui awk, make, sed, tar, uucp, la Bourne shell e un compilatore FORTRAN 77.
Il rilascio della Seventh Edition è significativo perché, da quel momento, UNIX si divise in due varianti importanti: BSD e System V, le cui origini descriviamo brevemente.
Thompson trascorse l'anno accademico 1975/1976 come professore ospite all'Università della California a Berkeley, l'università dalla quale si era laureato. Lì lavorò con diversi dottorandi, aggiungendo molte nuove funzionalità a UNIX. (Uno di questi studenti, Bill Joy, in seguito co‑fondò Sun Microsystems, un primo attore nel mercato delle workstation UNIX.)
Nel tempo, a Berkeley furono sviluppati molti nuovi strumenti e funzionalità, tra cui la C shell, l'editor vi, un file system migliorato (il Berkeley Fast File System), sendmail, un compilatore Pascal e la gestione della memoria virtuale sulla nuova architettura Digital VAX.
Sotto il nome Berkeley Software Distribution (BSD), questa versione di UNIX, compreso il suo codice sorgente, fu ampiamente distribuita. La prima distribuzione completa fu la 3BSD, rilasciata nel dicembre 1979. (Le versioni precedenti, 2BSD e le distribuzioni Berkeley‑BSD, erano raccolte di nuovi strumenti prodotti a Berkeley, non distribuzioni UNIX complete.)
Nel 1983 il Computer Systems Research Group dell'Università della California a Berkeley rilasciò la 4.2BSD. Questo rilascio fu importante perché conteneva un'implementazione TCP/IP completa, inclusa l'interfaccia di programmazione delle socket (API) e una varietà di strumenti di rete.
La 4.2BSD e la versione precedente 4.1BSD furono ampiamente distribuite nelle università di tutto il mondo e formarono la base per SunOS (primo rilascio nel 1983), la variante UNIX venduta da Sun. Altri rilasci BSD significativi furono la 4.3BSD (1986) e l'ultima, la 4.4BSD (1993).
I primi port di UNIX su hardware diverso dal PDP‑11 avvennero nel 1977‑1978, quando Dennis Ritchie e Steve Johnson lo portarono su Interdata 8/32 e Richard Miller dell'Università di Wollongong in Australia lo portò simultaneamente su Interdata 7/32.
Il port Berkeley Digital VAX si basò su un port precedente (1978) di John Reiser e Tom London. Conosciuto come 32V, questo port era essenzialmente identico alla Seventh Edition per PDP‑11, eccetto per lo spazio di indirizzamento più ampio e i tipi di dato più larghi.
Nel frattempo, la legislazione antitrust statunitense costrinse allo smembramento di AT&T (le manovre legali iniziarono a metà degli anni '70 e lo smembramento divenne effettivo nel 1982), con la conseguenza che, non più detentrice del monopolio sul sistema telefonico, l'azienda poté commercializzare UNIX.
Ciò portò al rilascio di System III nel 1981. System III fu prodotto dal UNIX Support Group (USG) di AT&T, che impiegava centinaia di sviluppatori per migliorare UNIX e sviluppare applicazioni UNIX (in particolare pacchetti di preparazione documenti e strumenti di sviluppo software).
Il primo rilascio di System V arrivò nel 1983, e una serie di versioni condussero al definitivo System V Release 4 (SVR4) nel 1989, momento in cui System V aveva incorporato molte funzionalità da BSD, incluse le capacità di rete.
System V fu concesso in licenza a vari fornitori commerciali, che lo usarono come base per le proprie implementazioni UNIX. Così, oltre alle varie distribuzioni BSD che si diffondevano nel mondo accademico, alla fine degli anni '80 UNIX era disponibile in una gamma di implementazioni commerciali su diverse architetture hardware.
Queste implementazioni includevano SunOS (e successivamente Solaris) di Sun, Ultrix e OSF/1 (oggi HP Tru64 UNIX) di Digital, AIX di IBM, HP‑UX di Hewlett‑Packard, NeXTStep di NeXT, A/UX per il Macintosh di Apple, e XENIX di Microsoft e SCO per l'architettura Intel x86‑32. (In tutto il libro, l'implementazione Linux per x86‑32 è indicata come Linux/x86‑32.)
Questa situazione era in netto contrasto con gli scenari tipici dell'epoca, in cui ogni fornitore produceva una o al più poche architetture di chip proprietarie, su cui vendeva il proprio sistema operativo proprietario.
La natura proprietaria della maggior parte dei sistemi dei fornitori significava che gli acquirenti rimanevano vincolati a un unico fornitore. Passare a un altro sistema operativo e piattaforma hardware proprietari poteva risultare molto costoso a causa della necessità di portare le applicazioni esistenti e di riqualificare il personale. Questo fattore, insieme all'apparizione di workstation UNIX a basso costo prodotte da vari fornitori, rese il sistema UNIX portabile sempre più attraente dal punto di vista commerciale.
In Sintesi
UNIX nacque nel 1969 come progetto interno di AT&T e, grazie al linguaggio C, divenne uno dei primi sistemi operativi scritti in un linguaggio di alto livello, facilitandone il porting. Le prime sei edizioni, distribuite principalmente nelle università, favorirono la diffusione di UNIX, che si divise poi in due linee principali: BSD e System V. Queste varianti, insieme al progetto GNU, hanno gettato le basi per l'emergere di Linux come sistema operativo moderno e portabile.