Ogni volta che si apre un terminale su un server Linux, su un Mac o su uno smartphone Android, si usa qualcosa che discende direttamente da un sistema operativo nato quasi per caso nel 1969. Unix e il linguaggio C, creati ai Bell Labs da un piccolo gruppo di ricercatori, sono tra le tecnologie più influenti della storia dell'informatica. Molte delle loro idee sono così diffuse che non le notiamo più.
Dopo Multics
Negli anni Sessanta i Bell Labs partecipavano, insieme al MIT e a General Electric, allo sviluppo di Multics, un ambizioso sistema operativo a condivisione di tempo. Il progetto era molto complesso e procedeva lentamente. Nel 1969 i Bell Labs decisero di ritirarsi.
Alcuni ricercatori che vi avevano lavorato, tra cui Ken Thompson e Dennis Ritchie, non volevano rinunciare all'ambiente di lavoro interattivo che Multics prometteva. Thompson trovò un minicomputer poco usato, un PDP-7 della Digital Equipment Corporation, e cominciò a scrivere per conto suo un sistema più semplice. Il nome Unix nacque come gioco di parole su Multics, a sottolineare la sua semplicità.
Dal PDP-7 al PDP-11
La prima versione era scritta in linguaggio assembly. Quando il gruppo ottenne un PDP-11, più potente, il sistema fu portato sulla nuova macchina e cominciò a essere usato all'interno dei Bell Labs, inizialmente anche per la preparazione di documenti dell'ufficio brevetti. Fu questo uso pratico a giustificare l'acquisto dell'hardware.
La nascita del C
Thompson aveva creato un linguaggio chiamato B, derivato da BCPL, un linguaggio progettato da Martin Richards. B però non aveva tipi di dati e si adattava male al PDP-11, che lavorava con byte e parole di dimensioni diverse.
Tra il 1971 e il 1973 Ritchie sviluppò un successore, il C, che aggiungeva tipi di dati, strutture e un modello di memoria vicino all'hardware. Il C permetteva di scrivere codice efficiente quasi quanto l'assembly, ma molto più leggibile e soprattutto portabile.
Il passo decisivo
Nel 1973 il nucleo di Unix fu riscritto in C. Era una scelta insolita: allora i sistemi operativi si scrivevano in assembly, perché si riteneva che solo così si potessero ottenere le prestazioni necessarie. Scrivere Unix in C significava che, per portarlo su un nuovo computer, bastava in gran parte scrivere un compilatore C per quella macchina e adattare una piccola parte di codice dipendente dall'hardware.
Le idee di Unix
Unix si distingueva per alcune idee semplici e potenti:
- Tutto è un file. Documenti, dispositivi e, in molti casi, canali di comunicazione si leggono e si scrivono con le stesse operazioni.
- Un file system gerarchico, con directory annidate e percorsi come
/usr/bin. - Programmi piccoli che fanno una cosa sola e la fanno bene.
- Le pipe, che collegano l'uscita di un programma all'ingresso di un altro.
Le pipe
Le pipe furono introdotte nel 1973, su insistenza di Doug McIlroy, che da anni sosteneva che i programmi dovessero potersi collegare come tubi da giardino. Il risultato è che compiti complessi si ottengono combinando strumenti semplici:
grep " 404 " accessi.log | awk '{print $7}' | sort | uniq -c | sort -nr | head
In un log di un server web in formato comune, questa riga mostra quali pagine hanno generato più errori 404, combinando sei programmi diversi, nessuno dei quali sa nulla degli altri. È l'applicazione pratica della filosofia Unix.
Perché si diffuse
C'è anche una ragione legale. A causa di un accordo antitrust del 1956, AT&T, proprietaria dei Bell Labs, non poteva commercializzare prodotti informatici. Unix fu quindi concesso in licenza a centri di ricerca e istituti accademici a costi molto bassi, insieme al codice sorgente. Migliaia di studenti impararono i sistemi operativi studiando e modificando il codice di Unix.
A Berkeley, in California, nacque una variante importante, BSD, che introdusse tra l'altro una delle prime implementazioni diffuse di TCP/IP. Quando poi negli anni Ottanta AT&T poté commercializzare Unix, il mondo si ritrovò con molte versioni diverse. Per garantire la compatibilità tra esse fu definito lo standard POSIX.
Il libro K&R
Nel 1978 Brian Kernighan e Dennis Ritchie pubblicarono The C Programming Language, noto come «il K&R». Il libro fu per anni la definizione di fatto del linguaggio e rese celebre il primo esempio di ogni corso di programmazione:
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
return 0;
}
Il C fu standardizzato dall'ANSI nel 1989 e dall'ISO poco dopo.
L'eredità
Nel 1983 Thompson e Ritchie ricevettero il premio Turing. L'eredità di Unix è ovunque: Linux, i sistemi BSD, macOS, Android e iOS discendono da Unix o ne riprendono il modello. Il C è ancora uno dei linguaggi più usati per sistemi operativi, firmware e software embedded, e la sua sintassi ha influenzato C++, Java, JavaScript, C# e molti altri.
Nel mio lavoro quotidiano su server e analisi di log, la riga di comando e le pipe restano gli strumenti più rapidi per rispondere a una domanda concreta. È una prova notevole della solidità di quelle idee.
In sintesi
- Unix nacque nel 1969 ai Bell Labs, dopo l'uscita dal progetto Multics, ad opera di Ken Thompson e Dennis Ritchie.
- Ritchie sviluppò il linguaggio C tra il 1971 e il 1973; nel 1973 il nucleo di Unix fu riscritto in C, rendendolo portabile.
- File system gerarchico, «tutto è un file», piccoli programmi e pipe sono le idee chiave di Unix.
- Le licenze a basso costo diffusero Unix nel mondo della ricerca; da esso discendono Linux, BSD, macOS e molti altri sistemi.