19 Gennaio 2038 : la caduta di internet?
L’anno 2000 è oramai passato da un pezzo e non è successo niente di ciò che era stato previsto. Focalizzo l’attenzione solo nell’ambito informatico.
Il famoso bug dell’anno 2000 (Y2K – Il Millennium Bug) non si è mostrato all’umanità. All’epoca nacquero delle perplessità riguardo al passaggio tra il 31 Dicembre 1999 e il 1 Gennaio 2000. In pratica i vecchi sistemi, utilizzanti una rappresentazione della data con solo due cifre per l’anno, avrebbero potuto interpretare il 2000 come 1900. Ma difatto non si verificò nessun “disastro” e l’eventuale problema venne sovrastimato: non esistevano più macchine utilizzanti questo formato data in quanto venivano utilizzate agli albori dell’informatica, quando i consumi di memoria erano un problema serio.
Nemmeno il commodore 64 utilizzava l’anno con solo 2 cifre!
Un problema del genere, però, si presenterà sicuramente tra meno di 40 anni e purtroppo pare proprio che le conseguenze ci saranno e avranno un’entità considerevole, tra cui il collasso di internet. Ma niente paura perchè i tecnici del mondo ci stanno già lavorando su per evitare una catastrofe.
Mi spiego meglio.
La stragrande maggioranza dei sistemi informatici mondiali (anche la stessa “struttura” sulla quale si appoggia internet) è basata su UNIX, il famoso sistema operativo open source dal quale sono derivati Linux e anche i prodotti della Apple.
Il sistema operativo UNIX memorizza le date in un formato definito dallo standard POSIX. In pratica la data è memorizzata in un numero che rappresenta il numero di secondi a partire dalla mezzanotte del 1° Gennaio 1970, tale data viene anche chiamata “epoca” (The epoch), per cui ogni secondo che passa, questo numero incrementa di una unità. Gli orari sono in formato UTC, che corrisponde all’orario GMT (quello di Greenwich insomma).
Il guaio grosso è che la rappresentazione posix prevede che la data sia memorizza in un numero a 32 bit e i sistemi che “passeranno i guai” (facendoli passare a tutti), sono quelli che usano il tipo signed (numero con segno).
Fortunatamente, non tutti i sistemi unix-like utilizzano il tipo signed e usano quindi il tipo unsigned che porta a non avere problemi su queste macchine (o meglio a spostarlo alle 06:28:15 di Domenica 7 Febbraio 2106) . Il guaio c’è quindi solo per una certa percentuale di sistemi.
Un numero a 32 bit di tipo signed prevede che il numero positivo più grande memorizzabile sia 2147483647:
che in base al sistema posix corrisponde alle ore 03:14:07 di martedì 19 Gennaio 2038.
Una conversione tra formato numerico e data è possibile effettuarla da questa pagina: http://www.onlineconversion.com/unix_time.htm
Un secondo dopo, come già spiegato, il numero verrà incrementato ancora di 1 e di conseguenza verrà posto ad 1 il bit più significativo di tale numero:
Noi che smanettiamo ogni giorni coi numeri binari ben sappiamo che il bit più significativo di un numero signed identifica un numero negativo, per cui facendo due calcoli col complemento a due il numero vale -2147483648 che nella fattispecie viene interpretato dal sistema posix come le ore 20:45:52 del giorno Venerdì 13 Dicembre 1901 (ma guarda un po’ la coincidenza: Venerdì 13!).
Questo fatto causerà enormi problemi in tutti gli ambiti in quanto dopo le 03:14:07 di martedì 19 Gennaio 2038 i sistemi unix crederanno di “essere tornati indietro nel tempo” al 1901 con conseguenze catastrofiche dal momento che oramai tutto è gestito da computer e tutto si appoggia alla rete internet.
Il problema c’è realmente ed è verificato. Il sito ufficiale del bug dell’anno 2038 ha anche messo uno spezzone di codice, in ANSI C, che permette appunto di testare con mano come i sistemi unix interpreteranno quella data: http://2038bug.com/index.php/articles/38-general/51-year-2038-bug-example
Nel frattempo i tecnici del mondo stanno già lavorando per non arrivare impreparati… Anche perchè John Titor ci ha avvisati ;)
Già… John Titor…