Magazine Informatica

Evento del giorno: nel 2038 accadrà…(un salto nel futuro)

Creato il 19 gennaio 2014 da Riccardo Conti @YourLifeUpdated

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. “Year 2038″ è chiamato anche “Y2038″, “Y2K38″ o “Y2.038K”.

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ì ilserver 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.

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, e non si può essere certi che vengano rimpiazzati prima del 2038.

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.


Ritornare alla prima pagina di Logo Paperblog