Il 14 settembre 2004 circa 800 aeroplani erano in volo nei cieli della California. Improvvisamente, senza nessun avvertimento, il Centro di controllo aereo di Los Angeles perse il contatto radio con tutti gli aeroplani per circa tre ore. Panico Panico Panico.
Durante quel periodo gli addetti alle torri di controllo dovettero usare i propri cellulari per contattare altri centri di controllo aereo per ripristinare il contatto con tutti i voli.
Fortunatamente non ci furono incidenti ma, nel caos, 10 aeromobili incrociarono le proprie traiettorie molto più vicino di quanto le regole permettessero (5 miglia nautiche in orizzontale e circa 2 km in verticale); un paio di aerei si sfiorarono di soli 2 chilometri. 400 aerei vennero ritardati e 600 cancellati. Tutto per un problema matematico.
I dettagli sull'incidente sono scarsi sulla precisa natura del problema ma sappiamo che l'errore era dovuto a come i computer del centro di controllo tengono traccia del tempo trascorso.
Partendo da 4,294,967,295 facendo un conto alla rovescia ogni millisecondo, dopo 49 giorni 17 ore 2 minuti e 47.296 secondi il sistema raggiunge lo zero e si resetta a 4,294,967,295
Normalmente il sistema veniva riavviato in sicurezza molto prima e il countdown ricominciava da 4,294,967,295.
Per quello che si sa il personale era conscio del problema e la policy era di riavviare il sistema una volta al mese.Questo ovviamente era una sorta di escamotage che non aveva niente a che vedere con la risoluzione del vero problema, e cioè che nessuno si era preso la briga di quantificare in millisecondi il normale utilizzo del sistema.
E così nel 2004 il sistema lavorò per 50 giorni consecutivi, raggiunse lo zero, e si bloccò. 800 aerei vennero messi in pericolo sui cieli della più popolosa città americana perchè qualcuno non aveva scelto un numero abbastanza grande!
Si puntò subito il dito su un aggiornamento del computer che utilizzava una versione dedicata di Windows.
Alcune delle più datate versione (almeno fino a Windows 95) avevano proprio quel problema .
Ogni volta che viene avviato, il sistema operativo scandisce il tempo del sistema in millisecondi per coordinare tutti i programmi installati. Ma una volta raggiunto il fatidico numero 4,294,967,295, il sistema riazzera tutto e riparte.
Alcuni programmi, specialmente i driver che permettono al computer di interagire con le periferiche esterne non la prendono molto bene quando di colpo il "tempo" si azzera improvvisamente; di solito si piantano e si portano dietro tutto il sistema.
Ma pechè Windows o il Centro di Controllo aereo di Los Angeles usavano un numero apparentemente arbitrario e così piccolo per tenere traccia del tempo? un indizio molto evidente salta fuori se convertite 4,294,967,295 in binario: il numero diventa 11111111111111111111111111111111, una stringa di 32 uno consecutivi.
Usualmente noi umani non ci preoccupiamo de codice binario sul quale è costruito un computer. Ci dobbiamo preoccupare solo dei programmi che ci facciamo girare sopra e, eventualmente del sistema operativo che necessita solo numeri da 0 a 9, la base numerica con la quale ci siamo evoluti (dipenderà forse dal numero di dita?)
Ma sotto sotto trama il codice binario! Quando la gente usa Windows, un Pc o un cellulare, interagisce solo con la interfaccia grafica. Ma è proprio li sotto che la situazione si fa pericolosa. Vi sono vari livelli di codice che devono tradurre un movimento del mouse o un dito che scorre su uno schermo nel linguaggio nativo del computer, gli uni e gli zeri .
Se su un foglio di carta hai spazio solo per scrivere un numero di 5 cifre, al massimo potrai scrivere 99.999. Windows e il Centro di Controllo aereo si basavano su un sistema binario a 32 bit e ciò significa che il numero più grande memorizzabile poteva essere scritto come una stringa di 32 uno equivalente a 4,294,967,295 nel sistema decimale.
Fortunatamente i computer moderni si basano su una architettura a 64 bit e quindi permettono la memorizzazione di numeri molto più grandi. Ovviamente grande non vuol dire infinito quindi i computer dovranno prima o poi essere comunque riavviati, ma , se contate in millisecondi con un PC a 64 bit dovrete farlo solo un paio di volte ogni miliardo di anni!
(Liberamente tratto da "Humble Pi" di Matt Parker)