Levysoft

La psicologia della ricorrenza numerica: 1234567890 Day, il Bug del 2038 e altre celebrazioni numeriche

Alle ore 3:31:30 PM dello scorso venerdi 13 febbraio 2009 (in Italia, a causa del fuso orario, erano le 00:31:30 del 14 Febbraio 2009), l’orologio interno dei sistemi Unix (e quindi anche Mac OS X) ha raggiunto il valore, non indifferente, di 1234567890 secondi. Infatti, come è noto, nei sistemi operativi Unix e Unix-like il tempo viene rappresentato come offset in secondi rispetto alla mezzanotte (UTC) del 1º gennaio 1970 (definita epoca o Epoch Time). Quindi, contando il tempo a partire dall’Epoch Time ad oggi sono appunto passati 1.234.567.890 secondi. Questo tipo di rappresentazione ha il vantaggio che, oltre che ad essere compatta, è indipendente dai fusi orari, ed è quindi direttamente confrontabile anche tra calcolatori situati a grandi distanze geografiche tra loro, ed evita di dover effettuare aggiustamenti nel caso ad esempio di dati trasmessi da un fuso orario all’altro. L’unico svantaggio è che, per averne una rappresentazione sotto forma di data e ora locali, è necessario effettuare una conversione (sempre comunque lasciata al sistema operativo).

1234567890 Day

Sebbene, questo evento non abbia nulla di realmente universale (è stato un convenzione comune decidere di iniziare a far scandire arbitrariamente l’orologio interno del cuore dei sistemi operativi Unix dalla data del 1970, ma c’è chi nota come lo scandire dell’Epoch Time sia approssimativamente vicina allo sbarco sulla Luna), l’evento ha suscitato un valore mediatico minimo, ma, al contempo, ha coinvolto i geek più puri di tutto il mondo (dai syadmin ai consulenti IT fino ad arrivare al semplice appassionato di Linux), in una maniera che solo internet può regalare con la versione geek del capodanno dell’anno 2000.

Infatti, questa curiosa ricorrenza ha visto persino dei festeggiamenti “ufficiali” da parte di gruppi di utenza e di programmazione in tutto il mondo. Il sito che ha raccolto tutti questi eventi è stato 1234567890day.com con tanto di countdown in homepage, anche se, per la verità, per molti questa ricorrenza altro non era che una scusa per organizzare una vera e propria rimpatriata di amici amanti del pinguino.

La celebrazione di questo particolare evento è stata pianificata in diverse città di tutto il mondo (San Francisco, Vancouver, Seattle, Los Angeles, Nairobi, Vienna, Copenaghen, Budapest, Croazia, etc … ovviamente è mancata una località italiana).

Per chi, comunque, non era riuscito a festeggiare questa singolarità numerica in compagnia, non è mancato il supporto di Digg (con oltre 5005 diggs) e di Twitter che ha unito centinaia di followers (423 per l’appunto) uniti nei festeggiamenti davanti al proprio monitor, magari supportati dalla Desk clock from ThinkGeek, una sveglia capace di visualizzare la data e l’ora in diversi formati, tra cui, oltre quello standard, anche Esadecimale, Ottale, Binario, a Numeri Romani e, ovviamente, nel formato Unix Epoch Time.

In alternativa, il sito Cool Epoch Countdown ha fornito, e fornisce tuttora, in tempo reale lo scandire del tempo in Unix Time.

Se questi festeggiamenti vi sono sembrati assurdi, allora dovete sapere che le frasi più ricorrenti che giravano sulla blogosfera fino a qualche giorno primo, erano tutte di genere apocalittico, come questa:

It’s The End Of The World As We Know It!
There’s a fairly good chance the world is going to end tomorrow…at least the world of Unix

Ovviamente, quando si tratta di cose strane, anche Google ci mette lo zampino e per festeggiare il 1234567890 Day, Google ha proposto uno dei suoi Doodle riportante la scritta

$ date +%s …
1234567890

Per i non addetti ai lavori, “date +%s” è il comando da lanciare sul vostro terminale linux/unix like/mac os x per vedere visualizzata la data nel formato unix time. Per sapere a che ora e che giorno corrisponde una particolare data in unix time, è sufficiente lanciare questo script in Perl (ma potete anche visitare uno dei tanti siti di conversione data/unix time):

perl -e ‘print scalar localtime(1234567890),”\n”;’
Sat Feb 14 00:31:30 2009

Altre celebrazioni numeriche create ad hoc

E se nel lontano 09 Settembre 2001 (2001-09-09T01:46:40Z) si sono festeggiati a Copenhagen in Danimarca (presso il DKUUG), il primo 1.000.000.000 di secondi, allora vi farà piacere che che nel lontano 18 Maggio 2033 alle ore 03:33:20, ricorrerà la celebrazione del Secondo Billenium: 2000000000!

perl -e ‘print scalar localtime(2000000000),”\n”;’
Wed May 18 05:33:20 2033

La cosa buffa è che, giocando con questo piccolo script in Perl, ho scoperto che il 9 Agosto del 2005, è ricorso il Fibonacci Day dei sistemi Unix (ho sostituito la data in unix time con la Successione di Fibonacci, escluso lo zero iniziale, 1123581321):

perl -e ‘print scalar localtime(1123581321),”\n”;’
Tue Aug 9 11:55:21 2005

ma nessuno ne ha mai parlato (o sbaglio?). Forse era una ricorrenza da geek matematici, una specie ancora più rara dei normali geek!

Continuando, possiamo notare che, il 14 Novembre del 2014, si potrebbe festeggiare il Pi Greco Decimal Day per i sistemi Unix (prendendo in esame la prima parte decimale del pi greco):

perl -e ‘print scalar localtime(1415926535),”\n”;’
Fri Nov 14 01:55:35 2014

Come vedete, i motivi per festeggiare ce ne saranno molti ed è tutto frutto della psicologia della ricorrenza numerica. Un comportamento tutto tipico dell’essere umano, che si è dimostrato in tutta la sua potenza mediatica nell’anno 2000 (amplificato poi anche dal famoso Millennium Bug). Per l’uomo tutte le ricorrenze numeriche sono sempre affascinanti, come quando si prendono le misure della Piramide di Cheope della piana di Giza in Egitto e si scopre che dividendo il perimetro della Piramide per il doppio dell’altezza si ottiene un valore molto simile al pi-greco. O quando Joseph Seiss, un ecclesiastico americano, scrisse che le pietre della Piramide contenevano un sistema di numeri che indicavano misure, pesi, angoli, temperature, gradi, problemi geometrici e rilevamenti cosmici. Seiss fu sorpreso dalla ricorrente presenza nei suoi calcoli del numero 5!

E che dire della sequenza numerica 4 – 8 – 15 – 16 – 23 – 42, nota come Equazione di Valenzetti, che la DHARMA, nel mondo immaginario del serial televisivo Lost, aveva il compito di modificare per evitare la fine dell’umanità. In poco tempo finzione e realtà si sono fusi insieme, girando per internet e assumendo connotazioni di quasi-realtà.

Ovviamente alcune ricorrenze numeriche sono talmente singolari che appaiono dare un significato agli eventi più strani, dando una sorta di potere ai numeri che si trasformano in elementi cabalo-matematici.

Il Bug del 2038

Ma vi è un’altra data che i programmatori di tutto il mondo stanno aspettando, questa volta, con grande paura (come quella del Millennium Bug): è il 19 gennaio 2038 alle ore 03:14:07 AM. Dopo questo momento, il contatore supererebbe il valore massimo, e verrebbe considerato come un numero negativo. I computer leggeranno la data non come 2038 ma come 1901 (precisamente, le 20:45:52 di venerdì 13 dicembre 1901) causando errori di calcolo!

Il problema è noto da tempo a tutti e la causa del bug informatico dell’anno 2038 (“Year 2038” è chiamato anche “Y2038”, “Y2K38”, o “Y2.038K” nel linguaggio specialistico) è da imputarsi all’architettura a 32 bit di molte macchine unix attualmente esistenti che usano, come spiegato prima, la rappresentazione POSIX per calcolare il tempo (partendo dal numero di secondi a partire dal 1 gennaio 1970). Questo tipo di sistema è lo standard per i sistemi Unix, e colpisce anche software per altri sistemi operativi che siano stati sviluppati in C. Sulla maggior parte dei sistemi a 32 bit il valore del dato time_t usato per questo calcolo è un numero intero a 32 bit di tipo signed.

Infatti, se un programmatore crea una variabile di tipologia intero segnato per memorizzare un valore numerico, questo può essere come minimo -2147483648 e come massimo 2147483647. Un numero molto grande, ma che diventa un valore piccolissimo se lo trasformiamo in secondi. In 32 bit, infatti, ci stanno appena 136 anni! Usando questo sistema, la data più avanzata rappresentabile a partire dalle 00:00:00 del 1/1/1970 sono le 03:14:07 di giovedì 19/01/2038!

La cosa interessante è che il mondo POSIX comprende, oltre ai sistemi operativi derivati dal sistema UNIX (GNU/Linux, BSD, Solaris, Mac OS X), anche tutti i protocolli di rete UNIX style (http, ftp, etc). In parole povere, se le previsioni nefaste degli addetti ai lavori si avverassero, sarebbe anche la fine di internet (che funziona grazie a protocolli Unix) e dei principali server del globo (che utilizzano sistemi operativi derivati da Unix). Dopo quel secondo saremo proiettati nel 13 dicembre 1901 alle 20:45. Sicuramente questo sarà un problema da gestire da qui ai prossimi anni e richiederà un cambio epocale nella gestione del tempo e di tutto il resto nei sistemi Unix. In teoria la soluzione è semplice e già disponibile, e consiste nell’usare solo sistemi a 64 bit, come il 99% dei processori in commercio attualmente. Infatti, nei sistemi a 32 bit il limite massimo di un intero è (2^32) – 1, mentre in quelli a 64 bit è (2^64) – 1.

Come denunciato anche dal sito ufficiale, 2038bug.com, però, l’errore comune è quello di credere che il problema verrà risolto con la semplice adozione dei 64 bit, non considerando che i molti strumenti che utilizzano sistemi embedded (forni a microonde, ascensori, orologi da polso, ecc.), sono ancora a 8/16 bit e che molti database utilizzano, per i propri campi data, dei Timestamp a 32 bit.

Un aspetto curioso di questa faccenda è che su questo bug del 2038 è stata costruita la storia di John Titor, un fantomatico uomo del futuro (2036) tornato nel 1975 per recuperare un esemplare di IBM 5100 come sorta di moderna Stele di Rosetta, poiché sarebbe l’unica macchina capace di risolvere il bug che sconvolgerebbe il mondo.

Interessante come, anche in questo caso, Google ci abbia messo lo zampino, perché i più attenti avranno scoperto che la data di scadenza dei cookie di Google è il 17 gennaio 2038, due giorni prima della fine dell’Unix Epoch (solo dopo questa data il browser può procedere all’eliminazione dei dati contenuti nel cookie stesso).

Ovviamente c’è anche chi, per celebrare l’evento, ha iniziato vendere magliette con la fine dell’Unix Epoch, ma anche tazze e mousepad per ricordarvi che, la fine dei sistemi operativi come voi li conoscete, è vicina!

Se invece, volete verificare se il vostro sistema è immune o meno da questo bug, ecco il codice C da compilare:

int main (int argc, char **argv)
{
time_t t;
t = (time_t) 1000000000;
printf (“%d, %s”, (int) t, asctime (gmtime (&t)));
t = (time_t) (0x7FFFFFFF);
printf (“%d, %s”, (int) t, asctime (gmtime (&t)));
t++;
printf (“%d, %s”, (int) t, asctime (gmtime (&t)));
return 0;
}

Questo semplice esempio in C mostra come l’aggiunta di un solo secondo al Timestamp ”Tue Jan 19 03:14:07 2038” lo tramuti in un sinistro venerdì 13 dicembre 1901. Quindi, se il vostro sistema è a 32 bit, dovrebbe produrre questo risultato:

1000000000, Sun Sep 9 01:46:40 2001
2147483647, Tue Jan 19 03:14:07 2038
-2147483648, Fri Dec 13 20:45:52 1901

Ecco una simulazione di quello che accadrebbe nel 2038 ai sistemi unix a 32 bit:

UPDATE: Ho appena scoperto che molti geek matematici festeggiano la giornata della radice quadrata che viene celebrata nella data in cui, sia il giorno che il mese, risultano essere la radice delle ultime due cifre dell’anno. L’ultima festività è occorsa il 03 Marzo 2009 (3/3/09 Square Root Day), ma beccare la radice giusta non è facile come sembra (sembra che capiti solo 9 volte in un secolo). Se vogliamo continuare a dare i numeri, l’ultimo giorno papabile prima di questo è stato infatti il due febbraio del 2004, che casualmente coincideva con il ‘giorno della marmotta’ americano. Per festeggiare di nuovo dovremo aspettare ben sette anni, esattamente il quattro aprile del 2016. Il primo a celebrare questo evento è stato, nella lontana radice dell’81, Ron Gordon.