Strani loop

Pubblicato: 27 aprile 2007 in Demoni

Sottotitolo: perché fare il programmatore non è sempre un lavoro così orrendo come si potrebbe pensare.

Altro sottotitolo: divagazione sull’autoreferenzialità.

In pratica: una delle cose che avevo pensato di dire allo ZenaCamp.

Lo spunto di questa chiaccherata mi è stato fornito dall’uscita dell’ultimo lavoro di Douglas Hofstadter, l’ho segnalato qui, che si intitola proprio “I am a strange loop”, cioè “Io SONO uno strano ciclo”.

Perché Hofstadter è IMPORTANTE? perché nel 1979 pubblica un saggio intitolato “Gödel, Escher, Bach: Un’Eterna Ghirlanda Brillante“, spesso abbreviato semplicemente in “GEB” nel quale è in grado di ammaestrare una serie di discipline apparentemente molto distanti tra loro per arrivare distillare una quantità formidabile di idee fondamentali sulla struttura della mente, sulla coscienza, sull’Io. In GEB non si parla solo di logica matematica (Gödel), di pittura (Escher) e di musica (Bach) ma anche di filosofia classica (Achille a la tartaruga sono i due protagonisti del libro), di genetica, di intelligenza, della contrapposizione delle visioni olistica e riduzionistica del mondo, di cervello, di mente e di moltissime altre cose. Non è un libro che si può riassumere o dal quale si può trarre una conclusione univoca, per quel che interessa qui il punto centrale è che l’atoreferenzialità sembra essere alla base di tutta la complessità osservata nei fenomeni descritti nel libro: il terorema di Gödel, le fughe di Bach, i dipinti di Escher, il DNA, la mente. Se qualcosa hanno in comune, quel qualcosa è l’autoreferenzialità.
Va detto che questo tema non può essere il fondamento di qualunque ragionamento sull’autocoscienza, si veda ad esempio la recensione di Tim Bray proprio su “I am a strange loop”.
Nel 1984 esce “The mind’s I” scritto da Hofstadter in collaborazione con Daniel Dennet, una raccolta di articoli e saggi di respiro meno ampio rispetto a GEB ma che riescono a puntualizzare meglio alcuni concetti già espressi in GEB, in particolare riguardo all’ambiguità del linguaggio, all’enigma dell’autocoscienza ed alle questioni riguardanti l’intelligenza artificiale. Il titolo stesso, tradotto in italiano con “L’io della mente” suona in inglese anche come “L’occhio della mente”, cioè “The mind’s eye”, motivo per cui nell’edizione Adelphi hanno pensato bene di mettere in copertina un bellissimo occhio magrittiano. Cominceremo proprio da qui, dalla pagina 140 dell’edizione Adelphi.

Ma prima una divagazione. Per gli abitanti di Palau, nota località turistica nel nord della Sardegna, diciamo per quelli al di sopra dei 40 anni, a parte l’arrivo degli americani con la costruzione illegale della base d’appoggio per sommergibili nucleari (altro discorso, esiste una bella cronistoria ragionata edita da CUEC a cura di Salvatore Sanna, “La Maddalena, Sardegna. Storia e cronaca della base nucleare di S. Stefano 1972-1991”, qui), l’evento che storicamente ha scosso di più le anime culturali del paese accadde la sera del 4 gennaio 1972(*) con la messa in onda sulla RAI della prima puntata dello sceneggiato “A come Andromeda“. In quei tempi una RAI audace e pronta agli esperimenti aveva messo in cantiere svariati progetti che allargavano notevolmente l’orizzonte letterario fino a quel momento presente all’interno del tubo catodico, oltre ad “A come Andromeda” mi piace citare anche il dark ed inquietante “Il segno del comando“. Benché lo sceneggiato fosse ambientato “l’anno prossimo in Inghilterra”, agli abitanti di Palau non sfuggì certo che la location scelta per girare gli esterni fosse la ben più familiare isola di Santo Stefano, dove da poco tempo era stato completato uno dei primi, se non il primissimo, villaggio turistico ad opera di un (allora) fantascientifico architetto sardo, Andrea Nonis. Dovete pensare che il turismo di massa è un fenomeno molto recente e nei primi anni ’70 a Palau in vacanza non ci andava ancora quasi nessuno.

“A come Andromeda” è un romanzo scritto nel 1962 da Fred Hoyle e John Elliot. Di cosa parla ce lo facciamo raccontare dall’articolo “Geni egoisti e memi egoisti” di Richard Dawkins, sì proprio lo stesso Richard Dawkins del celeberrimo “Il gene egoista”. A pagina 140 de “L’io della mente” leggiamo:

A duecento anni luce dalla Terra, nella costellazione di Andromeda, esiste una civiltà che vuole diffondere la propria cultura in mondi lontani. Qual’è il modo migliore per farlo? I viaggi diretti sono fuori questione: la velocità della luce impone un limite superiore teorico alla rapidità con cui ci si può spostare da un punto a un’altro dell’universo e considerazioni di tipo meccanico impongono un limite pratico molto più basso. Inoltre può darsi che i mondi su cui vale la pena di andare non siano poi tanti: come si fa a sapere in quale direzione conviene muoversi? […]
[Gli andromedani] raccolgono tutto ciò che vogliono dire in un lunghissimo messaggio ininterrotto e lo diffondono per lo spazio più volte di seguito, in un ciclo temporale di parecchi mesi. Il messaggio […] consiste nelle istruzioni cifrate per costruire e programmare un calcolatore gigante. Naturalmente le istruzioni non sono in nessun linguaggio umano, ma quasi tutti i codici cifrati possono essere interpretati da un abile crittografo, specialmente se sono stati progettati per essere decifrati facilmente. Il messaggio è ricevuto dal radiotelescopio di Jordell Bank, e alla fine viene decodificato, il calcolatore viene costruito e si esegue il programma.

Ci tengo a sottolineare che quello che parla di fantascienza qui è un genetista di élite, uno scienziato che ha cambiato il modo di vedere il mondo della genetica, e non solo, visto che tutti quanti oggi parliamo di memi. Ebbene il parallelo con la genetica è evidente, facciamocelo raccontare da lui:

Proprio come gli andromedani devono avere sulla Terra un calcolatore che decida al posto loro giorno per giorno, così i nostri geni devono costruire un cervello. Ma i geni non sono soltanto gli andromedani che hanno inviato le istruzioni cifrate; essi sono anche le istruzioni stesse [stano loop! nota di Miki]. Il motivo per cui non possono manovrare le marionette tirando direttamente i fili è lo stesso: i ritardi temporali.

Insomma in “A come Andromeda” una civiltà aliena detta le istruzioni per costruire una macchina in grado di generare un essere appartenente alla civiltà aliena. Se pensate che sia una storiellina, pare invece che tutto ciò che riconosciamo come vivo, animali e piante, sia qualcosa di molto simile, una civiltà aliena, i geni, che costruiscono i veicoli che li contengono e che li perpetuano, con l’ulteriore stano loop che i geni sono la civiltà E le istruzioni per costruire questi veicoli.

Ora cambiamo completamente discorso, per quanto dopo aver letto GEB questo sembri sempre molto difficile: tentiamo senza riuscirci di cambiare discorso.
Parliamo di Ken Thompson, già collaboratore di Dennis Ritchie (famosissimo perfino tra i non addetti ai lavori è il cosiddetto “Kernighan e Ritchie” IL manuale del linguaggio C), uno dei padri della programmazione così come la concepiamo oggi. Ebbene Ken Thompson nel 1995 scrive un articolo intitolato “Reflections on Trusting Trust“(**), “Riflessioni sulla fiducia nella fiducia” oppure “Riflessioni sull’affidabilità affidabile” nel quale racconta alcune tra le sue esperienze più eccitanti come programmatore e sono esperienze piene zeppe di strani loop. La prima esperienza, sui dettagli della quale sorvolerei, riguarda la creazione di programmi che una volta eseguiti producono come output una copia esatta del programma stesso. Se anche solo masticate un qualunque linguaggio di programmazione provateci, poi ci ritroveremo a confrontare i risultati.
Il racconto davvero fenomenale riguarda invece un’altra esperienza che ha a che fare con i compilatori e con quello che i compilatori si suppone facciano e poi in effetti fanno. I compilatori, lo ricordo per i non addetti ai lavori, sono programmi che leggono una serie di istruzioni (il codice sorgente) e generano altri programmi (strano loop?).
Il problema che Thompson doveva risolvere riguardava un piccolo programma che si chiama “login” che poi è quello che controlla che la password inserita quando si accede ad un sistema operativo sia quella corretta o meno (è un’esperienza quotidiana ormai). A titolo di controllo aveva inserito NEL COMPILATORE un pezzo di codice che più o meno diceva “se stai compilando il programma login fai in modo che la password ‘pippo123’ mi faccia entrare qualunque sia il nome utente”. Compilando con questo compilatore il programma di login lui si garantiva l’accesso al sistema indipendentemente dall’utente inserito. Strano loop, il compilatore è un programma e quindi, a sua volta, va compilato. A tutti quelli che hanno fatto l’esperienza di compilare un compilatore sono sorte delle domande, prima o poi, se non altro “viene prima l’uovo o la gallina?”.
Questa soluzione gli sembrò però molto poco elegante. Chiunque, leggendo il codice sorgente del compilatore, si sarebbe accorto della manomissione. Allora pensò di inserire NEL COMPILATORE una cosa così: “se stai compilando il compilatore (stranissimo loop!) inserisci questo stesso codice (programma che si autoreplica) ed anche il pezzo di codice che modifica ‘login'”. Il compilatore così modificato va a sua volta compilato ed il gioco è fatto: non solo ogni “login” compilata con il nuovo compilatore permette l’ingresso con la password “pippo123” ma anche ogni compilatore compilato avrà queste due caratteristiche, produrrà “login” bucate e compilatori bucati. E tutto questo SENZA CHE VI SIA PIU’ TRACCIA DELLE MANOMISSIONI NEL CODICE SORGENTE. Se ad esempio questo codice fosse stato inserito nel primissimo compilatore tutti i compilatori odierni si comporterebbero così senza che ve ne sia traccia alcuna nel codice. Davvero inquietante.

Morale (parole di Ken Thompson):

The moral is obvious. You can’t trust code that you did not totally create yourself. (Especially code from companies that employ people like me.) No amount of source-level verification or scrutiny will protect you from using untrusted code.
La morale è ovvia. Non puoi fidarti di codice che non sia stato totalmente creato da te. (Specialmente codice proveniente da società che assumono gente come me.) Nessuna verifica a livello di codice sorgente ti può proteggere dall’utilizzo di codice inaffidabile.

Ovviamente stava scherzando, non è prevedibile uno scenario in cui tutto il codice viene generato sempre e comunque da zero. Anche in questo caso abbiamo una civiltà aliena (Ken Thompson) che detta le istruzioni per costruire una macchina in grado di generare un essere appartenente alla civiltà aliena.
Molte domande restano aperte. Anzitutto come cavolo era fatto il primo compilatore? E poi, in quanti sistemi si entra con la password “pippo123”?


(*)
Non è vero, naturalmente. A Palau furono girate alcune scene di 007 la spia che mi amava, e qualcuno parla ancora di quanto era bello Roger Moore, e soprattutto furono girati un bel po’ di film, tra cui:


“Disperatamente l’estate scorsa”, sempre con Paola Pitagora e l’incredibile


Travolti da un’insolito destino nell’azzurro mare d’agosto

(**)
In effetti il percorso per arrivare all’articolo di Thompson è stato più tortuoso. Ci sono arrivato appunto grazie ad Hofstadter di cui parla MarkCC sul suo blog, post che poi viene a sua volta citato anche in uno dei blog che preferisco, kottke.org.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...