Gran parte dell’informatica moderna poggia su un’idea che Ken Thompson mise in pratica alla fine degli anni Sessanta: un sistema potente non deve essere complicato se i suoi elementi più semplici sanno lavorare insieme. L’idea struttura Unix, attraversa il linguaggio B, prepara C e riappare decenni dopo in Go.
Thompson non seguì un unico programma teorico. Costruì strumenti per problemi concreti: usare interattivamente un piccolo computer, scrivere un sistema con pochissima memoria, elaborare testo o compilare rapidamente software di grandi dimensioni. La continuità è nel metodo: meccanismi ridotti, comprensibili e componibili.
Da Multics a Unix
Kenneth Lane Thompson nacque nel 1943 a New Orleans. Studiò alla University of California, Berkeley, e nel 1966 entrò ai Bell Labs, dove partecipò a Multics.
Multics mirava a offrire a molti utenti un ambiente interattivo, ma divenne complesso e costoso. Quando Bell Labs abbandonò il progetto nel 1969, Thompson volle conservare le qualità dell’interazione su una macchina molto più piccola.
Su un PDP-7 sviluppò nel 1969 un file system, una shell e le prime funzioni di ciò che sarebbe diventato Unix. Dennis Ritchie si unì presto al lavoro.
Quando i vincoli favoriscono la semplicità
Il PDP-7 aveva poca memoria. Ogni astrazione doveva giustificare il proprio costo. Thompson preferì piccoli programmi specializzati e la possibilità di usare l’uscita di uno come ingresso di un altro.
Doug McIlroy aveva promosso l’idea dei flussi; Thompson implementò le pipe in Unix nel 1973. Il carattere | permise di collegare comandi e costruire piccoli programmi da elementi riutilizzabili. Il principio influenza ancora sistemi Unix e pipeline di dati.
Dal linguaggio B alla nascita di C
Le prime versioni di Unix erano in assembler e dipendevano strettamente dal processore. Thompson creò B, adattamento di BCPL abbastanza piccolo per le macchine disponibili.
B mostrò limiti sul PDP-11. Dennis Ritchie aggiunse tipi e migliorò il modello dei dati, arrivando a C nei primi anni Settanta. Thompson creò B e il contesto tecnico; Ritchie fu il principale progettista di C.
La collaborazione permise di riscrivere gran parte di Unix in C, rendendolo molto più portabile. Il sistema e il linguaggio si diffusero insieme. La biografia di Dennis Ritchie e la storia di C approfondiscono questa evoluzione.
Espressioni regolari, Plan 9 e UTF-8
Thompson sviluppò anche l’editor ed e contribuì a diffondere le espressioni regolari come notazione pratica per descrivere schemi di testo.
Lavorò poi a Plan 9, sistema distribuito sperimentale dei Bell Labs. Nel 1992 progettò con Rob Pike UTF-8, codifica Unicode compatibile con ASCII che sarebbe diventata dominante sul Web.
Questi contributi condividono una domanda: come creare una rappresentazione abbastanza semplice da essere usata ovunque, ma abbastanza estensibile per esigenze più ampie?
«Reflections on Trusting Trust»
Nel 1983 Thompson e Ritchie ricevettero il premio Turing. Nella conferenza Reflections on Trusting Trust, Thompson descrisse un compilatore modificato capace di inserire segretamente una backdoor in un programma di login e di riprodurre la modifica nelle versioni successive del compilatore.
La dimostrazione rivela un limite fondamentale della fiducia nel software: verificare il sorgente non basta se la catena di strumenti che lo trasforma è compromessa. Build riproducibili e sicurezza della supply chain affrontano ancora questo problema.
Perché Thompson tornò ai linguaggi con Go
Thompson entrò in Google nel 2006 e incontrò un diverso problema di scala: enormi repository, compilazioni lente e concorrenza difficile da gestire.
Nel 2007 Thompson, Rob Pike e Robert Griesemer iniziarono a definire Go. Il linguaggio privilegia compilazioni rapide, formattazione standard, gestione automatica della memoria e concorrenza integrata. La sintassi è volutamente ridotta per mantenere leggibile il codice di grandi squadre.
Go non copia C e non sostituisce Unix: trasferisce un metodo in un altro contesto. Pubblicato come open source nel 2009, ha trovato spazio nei servizi di rete, nelle infrastrutture e nei sistemi distribuiti.
Un’eredità fondata sulle relazioni tra strumenti
Unix vive in Linux, macOS, BSD, Android e nell’infrastruttura dei server. C resta fondamentale nei sistemi. UTF-8 consente lo scambio globale di testo. Go è diffuso nel cloud.
Il filo comune non è un elenco di invenzioni, ma un modo di costruire: componenti che fanno poche cose, restano comprensibili e possono essere combinati tramite interfacce chiare.
Cronologia
- 1943: nascita di Kenneth Lane Thompson a New Orleans.
- 1966: ingresso ai Bell Labs e partecipazione a Multics.
- 1969: prima versione di Unix sul PDP-7.
- 1969–1970: sviluppo di B da BCPL.
- 1973: pipe in Unix e riscrittura del sistema in C con Dennis Ritchie.
- 1983: premio Turing con Ritchie e Reflections on Trusting Trust.
- 1992: progettazione di UTF-8 con Rob Pike.
- 2006: ingresso in Google.
- 2007: inizio di Go con Robert Griesemer e Rob Pike.
- 2009: pubblicazione open source di Go.
Domande frequenti
Ken Thompson creò Unix da solo?
Scrisse la prima versione nel 1969 e fu il principale motore iniziale. Dennis Ritchie e altri ricercatori dei Bell Labs contribuirono poi a renderlo un’opera collettiva.
Qual è la differenza tra i contributi di Thompson e Ritchie?
Thompson creò Unix e B; Ritchie fu il principale progettista di C e partecipò alla riscrittura di Unix in C.
B è ancora usato?
Non comunemente. È importante soprattutto come predecessore diretto di C.
Thompson inventò le pipe Unix?
Doug McIlroy formulò e sostenne l’idea; Thompson la implementò in Unix nel 1973.
Qual è il legame tra Unix e Go?
Non c’è una discendenza tecnica diretta. Entrambi riflettono però la preferenza di Thompson per concetti semplici e componibili.