Bug dell'anno 2038

Da Wikipedia, l'enciclopedia libera.
Manuali per la programmazione UNIX.

Il bug dell'anno 2038 (in breve: Y2038) è un bug informatico, noto agli esperti, che ha ripercussioni su alcuni software nella gestione di date relative all'anno 2038 e successivi.

Il problema riguarda programmi che usano la rappresentazione POSIX per calcolare il tempo: questa calcola la data del sistema come il numero di secondi trascorsi dallo Unix Epoch Time 1º gennaio 1970 (ignorando i secondi intercalari). 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.h usato per questo calcolo è un numero intero a 32 bit di tipo signed. Usando questo sistema, l'istante più lontano rappresentabile scoccherà alle ore 03:14:07 del martedì 19 gennaio 2038 (UTC). 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 UTC di venerdì 13 dicembre 1901), causando errori di calcolo[1]. "Year 2038" è chiamato anche "Y2038", "Y2K38" o "Y2.038K".

Problemi noti[modifica | modifica wikitesto]

Esempio che mostra l'azzeramento della data.

Il bug Y2038 si può manifestare anche in date precedenti al 2038 ovvero, nello specifico, ogni qual volta un software che ne è affetto debba calcolare una data futura successiva a quella critica. Nel maggio 2006, per esempio, il bug colpì il server web AOLserver che gestiva le richieste senza scadenza al proprio database assegnando alle stesse una data di scadenza pari ad un miliardo di secondi nel futuro. Alle 21:27:28 del 12 maggio 2006 (data del server; un miliardo di secondi prima del 2038) il sistema di calcolo superò il limite critico restituendo, di conseguenza, una data di scadenza nel passato e causando un crash del sistema[2][3].

Soluzioni[modifica | modifica wikitesto]

Non è semplice risolvere il problema per le combinazioni attuali di processori, sistemi operativi e file system.

Cambiare il valore di time.h per usare un sistema a 64-bit renderebbe il sistema incompatibile con software, sistemi di memorizzazione e tutti gli strumenti che usano una rappresentazione binaria del tempo. Cambiare time.h in un intero unsigned, permettendo di rimandare il problema al 7 febbraio 2106, causerebbe comunque problemi a molti programmi.

Molti sistemi operativi per sistemi a 64-bit usano già dei numeri interi a 64-bit per il time.h. Il passaggio a questo tipo di architetture è in corso, e ci si aspetta che sia completo prima del 2038. Tuttavia, ancora oggi esistono centinaia di milioni di sistemi a 32 bit sul mercato, di cui molti in sistemi integrati.

Nonostante l'attuale ritmo di aggiornamento dei computer ogni 18-24 mesi, i computer integrati possono lavorare senza interruzioni per tutta la vita del sistema che controllano. L'uso di time.h a 32 bit è anche stato inserito in vari formati di file, cosa che comporta la persistenza del problema anche oltre la vita delle macchine stesse.

L'uso di un valore di tipo signed a 64-bit sposterebbe l'emergere del problema in avanti nel tempo di circa 290 miliardi di anni, una data che è addirittura al di là della previsione di vita del sistema solare, se non addirittura dell'universo.

Sono state avanzate anche varie proposte alternative, alcune delle quali in uso, per sfruttare questo spostamento eccessivo della data massima calcolabile: tra queste, includere nel calcolo delle ore i millisecondi o i microsecondi, abbreviando la vita utile delle macchine a 300.000 anni[4][5].

Note[modifica | modifica wikitesto]

  1. ^ Welcome to The Year 2038 Bug Site
  2. ^ The Future Lies Ahead
  3. ^ Something wrong after 2006-05-12
  4. ^ Unununium Time
  5. ^ Java API documentation, Sun Microsystems

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]