Kenneth Lane Thompson, (nato il 4 febbraio 1943, New Orleans, USA), è uno scienziato informatico americano, co-vincitore nel 1983 dell’A.M. Turing Award – la più alta onorificenza informatica.
Thompson e lo scienziato informatico americano Dennis M. Ritchie sono stati citati congiuntamente per «il loro sviluppo della teoria dei sistemi operativi generici e in particolare per l’implementazione del sistema operativo UNIX», a cui hanno collaborato presso i Bell Laboratories.
Ha anche inventato il linguaggio di programmazione B, il diretto predecessore del linguaggio di programmazione C, ed è stato uno dei creatori e dei primi sviluppatori del sistema operativo Plan 9. Dal 2006, Thompson ha lavorato presso Google, dove ha co-sviluppato il linguaggio di programmazione Go.
Altri contributi degni di nota includono il suo lavoro sulle espressioni regolari e sui primi editor di testo per computer QED, la definizione della codifica UTF-8 e il suo lavoro sugli scacchi per computer che includeva la creazione di tavoli da gioco finali e la macchina per scacchi Belle.

Biografia
Ken Thompson nasce a New Orleans, in Louisiana, nel 1943.
Durante un’intervista, quando gli è stato chiesto come ha imparato a programmare, ha dichiarato: «Sono sempre stato affascinato dalla logica e già alle scuole elementari lavoravo su problemi aritmetici in sistema binario. Sono cose che mi hanno sempre affascinato».
Thompson consegue una laurea (1965) e un master (1966) in ingegneria elettrica presso l’Università della California, a Berkeley.
Dopo la laurea viene assunto presso i Bell Labs, dove ha lavorato per la prima volta su Multics (OS), un sistema operativo di time-sharing finanziato dall’ARPA (Advanced Research Projects Agency) e sviluppato congiuntamente da ricercatori di MIT, Bell Labs e General Electric Co.
La nascita di Unix
Mentre scriveva Multics, Thompson creò il linguaggio di programmazione Bon.
Successivamente, i Bell Labs si ritirarono dal progetto Multics e, per continuare a giocare, Thompson trovò una vecchia macchina PDP-7 e ci riscrisse un videogioco che stava sviluppando: Space Travel.
Alla fine, gli strumenti sviluppati da Thompson divennero la base per il sistema operativo Unix: lavorando su un PDP-7, un team di ricercatori dei Bell Labs guidati da Thompson e Ritchie, e includendo Rudd Canaday, sviluppò un file system gerarchico: i concetti di processi informatici e dispositivi file, un interprete della riga di comando, pipe per una facile comunicazione tra processi e alcuni piccoli programmi di utilities.
Nel 1970, Brian Kernighan suggerì il nome “Unix“, in un gioco di parole sul nome “Multics“.
In seguito Thompson decise che Unix aveva bisogno di un linguaggio di programmazione di sistema e creò B, un precursore del C di Ritchie.

Lo sviluppo dei metacaratteri
Negli anni ’60 Thompson iniziò anche a lavorare sulle espressioni regolari, usate in Unix come formalismo per specificare linguaggi sull’alfabeto dei caratteri .
Thompson aveva sviluppato la versione CTSS dell’editor QED; quest’ultimo, insieme al successivo editor di Thompson ED (l’editor di testo standard su Unix), ha contribuito notevolmente alla popolarità finale delle espressioni regolari, così che queste sono diventate pervasive nei programmi di elaborazione del testo Unix.
Quasi tutti i programmi che oggi lavorano con le espressioni regolari usano qualche variante della notazione di Thompson.
L’informatico inventa, sempre in quegli anni, un algoritmo che porta il suo stesso nome, detto anche “algoritmo della costruzione” utilizzato per convertire le espressioni regolari in automi finiti non deterministici.

Da Unix a C
Per tutti gli anni ’70, Thompson e Ritchie collaborano a stretto contatto al sistema operativo Unix.
I due sviluppatori sono così prolifici su Research Unix che il matematico Doug McIlroy, anch’egli in forze ai Bell Labs, in seguito scrisse: «Si può tranquillamente presumere che sia possibile associare i nomi di Ritchie e Thompson a quasi tutto ciò che non ha ancora una attribuzione».
Il lavoro su Unix trova in Ritchie non solo un fermo sostenitore ma anche un contributo importante nello sviluppo.
Lo stesso Thompson, in una sua nota di lavoro, scrive:
«Ho realizzato da solo la prima di due o tre versioni di UNIX. Poi Dennis (Ritchie ndr) è diventato una sorta di suo evangelista.
C’è stata quindi una riscrittura in un linguaggio di livello superiore che sarebbe stato chiamato C. Lui ha lavorato principalmente sul linguaggio e sul sistema di I/O, e io ho lavorato su tutto il resto del sistema operativo.»
Il lavoro su Unix di Thompson è stato determinante anche nello sviluppo del linguaggio di programmazione C.
Thompson dirà in seguito che il linguaggio C «è cresciuto con una delle riscritture del sistema Unix e, come tale, è diventato perfetto per i sistemi di scrittura».
Nel 1975, Thompson decide di prendere un anno sabbatico dai Bell Labs per recarsi al suo ateneo, la UC Berkeley.
Lì contribuisce a installare la versione 6 Unix su un PDP-11/70.
Il sistema Unix a Berkeley sarebbe stato successivamente mantenuto come un sistema proprio, noto come Berkeley Software Distribution (BSD).
All’inizio del 1976, Thompson scrisse la versione iniziale di Berkeley Pascal presso la Computer Science Division dell’Università di Berkeley (con ampie modifiche e aggiunte seguite nello stesso anno da William Joy, Charles Haley e dal consulente di facoltà Susan Graham).

Belle, campione di scacchi
Nel 1971 Thompson scrisse un programma per giocare a scacchi chiamato Chess per la prima versione di Unix.
Più tardi, nel 1980, insieme a Joseph Condon, Thompson creò Belle, un computer scacchistico con relativo software e il primo il cui hardware era progettato espressamente per il gioco degli scacchi.
È stato il più forte computer scacchistico dei suoi tempi, raggiungendo un Elo USCF di 2250, essendo la prima macchina in grado di giocare al livello di un maestro nel 1983.
Ha vinto il WCCC del 1980 e il North American Computer Chess Championship, organizzato dalla ACM, nel 1978, 1980, 1981, 1982 e 1986.
Nella sua configurazione finale Belle era costituito da un PDP-11/23 con un processore LSI-11 e diverse schede custom.
Tre schede erano costruite per la generazione delle mosse, quattro per la valutazione della posizione e una fungeva da controller per l’intero sistema.
Il sistema aveva un megabyte di memoria dedicata alla transposition table; al termine della sua carriera, il computer è stato donato allo Smithsonian Institution.
L’architettura di Belle è stata usata come base per la progettazione di ChipTest, altro computer scacchistico, progenitore di IBM Deep Blue.
Thompson ha anche scritto programmi per generare l’enumerazione completa dei finali degli scacchi, noti come tablebase, per tutti i finali a 4, 5 e 6 pezzi, consentendo ai programmi per computer che giocano a scacchi di eseguire mosse “perfette” una volta raggiunta una posizione memorizzata in essi.
Successivamente, con l’aiuto dell’esperto di scacchi John Roycroft, Thompson distribuì i suoi primi risultati su CD-ROM.
Nel 2001, l’ICGA Journal ha dedicato quasi un intero numero ai vari contributi di Thompson agli scacchi computerizzati.

Il “Thompson hack”
Nel 1983, durante il discorso di accettazione (Reflections on Trusting Trust) del premio Turing Award, Thompson presenta l’attacco backdoor del compilatore ora noto come Thompson hack o “trusting trust attack”, considerato un lavoro seminale sulla sicurezza informatica a sé stante.
Thompson descrive come abbia iniettato un virus in un compilatore: non solo il suo compilatore sapeva che stava compilando la funzione di login e iniettava una backdoor, ma sapeva anche quando si stava compilando da solo, iniettando il generatore di backdoor nel compilatore che stava creando.
Il codice sorgente per il compilatore, da allora in poi, non contiene prove di nessuno dei due virus.
Thompson stesso scrive in merito:
«Nel dimostrare la possibilità di questo tipo di attacco, ho scelto il compilatore C. Avrei potuto scegliere qualsiasi programma di gestione dei programmi come un assemblatore, un caricatore o persino un microcodice hardware. Man mano che il livello del programma si abbassa, questi bug saranno sempre più difficili da rilevare. Un bug del microcodice ben installato sarà quasi impossibile da rilevare.»
Il punto sollevato da Thompson, con questo suo hack teorico, è che a meno non si sia analizzato l’intero stack (cioè l’output compilato e qualunque libreria esso invochi), non è possibile davvero fidarsi che il codice sorgente che si è fornito al compilatore rappresenti ciò che effettivamente gira sulla macchina.
Nel momento in cui il meccanismo di sovversione è nel compilatore stesso, può essere molto difficile da trovare.
Questo perché la maggior parte delle persone si fida del compilatore; d’altronde é il livello di astrazione più basso con cui si ha a che fare in termini informatici.
Dal punto di vista dell’ingegneria, infettare il compilatore è un metodo di hack potente quanto invisibile, poiché quasi nessuno mette in discussione il compilatore in quanto è solo uno strumento. Quello che si dovrebbe davvero mettere in discussione, però, sono gli sviluppatori del compilatore.
La tecnica generale pensata da Thompson è ancora oggi valida e ritenuta da molti esperti una delle grandi minacce della programmazione.

Oltre Unix
Per tutti gli anni ’80, Thompson e Ritchie continuarono a rivedere Research Unix, che adottò una base di codice BSD per l’ottava, nona e decima edizione.
A metà degli anni ’80, presso i Bell Labs iniziarono i lavori su un nuovo sistema operativo in sostituzione di Unix.
Thompson è stato determinante nella progettazione e nell’implementazione del Plan 9 dei Bell Labs, un sistema operativo che utilizza i principi di Unix, ma li applica in modo più ampio a tutte le principali strutture di sistema.
Anche alcuni programmi che facevano parte delle versioni successive di Research Unix, come mk e rc, furono incorporati in Plan 9.
Thompson ha testato le prime versioni del linguaggio di programmazione C++ per Bjarne.
In un’intervista del 2009, Thompson ha espresso una visione negativa del C ++, affermando: «Fa molte cose a metà ed è solo un mucchio di spazzatura di idee che si escludono a vicenda».
Nel 1992, Thompson ha sviluppato lo schema di codifica UTF-8 insieme a Rob Pike.
Da allora la codifica UTF-8 è diventata la codifica dei caratteri dominante per il World Wide Web, rappresentando oltre il 90% di tutte le pagine Web nel 2019.

L’arrivo a Google
Alla fine del 2000, Thompson si ritirò dai Bell Labs.
Ha lavorato presso Entrisphere, Inc. come borsista fino al 2006 e ora lavora presso Google come Distinguished Engineer.
Il lavoro recente ha incluso la co-progettazione del linguaggio di programmazione Go.
Riferendosi a se stesso insieme agli altri autori originali di Go, afferma:
«Quando noi tre [Thompson, Rob Pike e Robert Griesemer] abbiamo iniziato, era pura ricerca. Noi tre ci siamo riuniti e abbiamo deciso che odiavamo il C++.»
Secondo un’intervista del 2009, Thompson ora utilizza un sistema operativo basato su Linux.
