The Best Geek Forum

Il Bug dell'anno 2038 (Y2K38)

L'ambiente Linux non è affatto come gli altri! Seguire un corso di utilizzo ti farà diventare un vero Linuxiano in poco tempo!

Moderatore: Moderatore in prova

Conoscerete sicuramente il famoso bug dell'anno 2000, il Millennium Bug oppure Y2K Bug.
Per chi non ne fosse ancora a conoscenza, indico una descrizione su questo:

Il Millennium Bug, era una potenziale falla informatica (in gergo bug), che avrebbe potuto colpire i calcolatori elettronici al fatidico cambio orario del terzo millennio (31/12/1999 - 01/01/2000).

I primi calcolatori elettronici, avevano come grande pecca, la poca quantità di memoria, e quindi, per poter rispettare i limiti, veniva ottimizzato tutto al minimo indispensabile, anche la data per l'appunto (nello specifico l'anno). Nei primi calcolatori, l'anno era espresso come una combinazione tra due cifre decimali costanti (19) più due cifre variabili che scorrevano di anno in anno.
Di conseguenza l'anno 1985, ad esempio era espresso come 19(costante)+85(variabile), ove 85 utilizzava un dato numero di bit per la rappresentazione in memoria.
In queste condizioni, un calcolatore affetto da questa tipologia di falla, al cambio dalle 23:59 del 31/12/1999 alle 00:00 del 01/01/2000 avrebbe frainteso "2000" con "1900", con conseguenze importanti sui mainframe, controllori di processo e grandi sistemi di elaborazioni dati.
Nella foto sotto inserita, si può notare il bug su un display a segmenti:

Immagine

Già a partire dal 1983, la comunità informatica iniziò ad interessarsi del problema, e una volta corretto il problema, fu anche rilasciata una dichiarazione di conformità del British Standards Institution, chiamata Y2K compliance, che certificava l'utilizzo dei calcolatori per l'anno 2000 e per il calcolo corretto dell'anno bisestile.

Al cambio di data del terzo millennio, non si verificò nessun evento significativo di danneggiamento del funzionamento dei calcolatori. :D :D :D


Passato il 2000, i sistemi operativi a sviluppati in linguaggio C e similari, contano il tempo a partire dal giorno 01/01/1970, utilizzando una variabile incorporata nella libreria standard time.h espressa sottoforma di numero binario in complemento a due utilizzando 32 bit per la codifica. Il valore di questa variabile, con segno, può variare dalle cifre intere -2147483648 (-2^31) fino a 2147483647 (2^31-1).
Il valore 2147483647 è molto importante in informatica: è l'ottavo numero primo di Mersenne, scoperto nel 1772 da Eulero. Superata tale cifra, si va in una condizione di traboccamento, oppure tecnicamente overflow, ove i dati non possono più essere rappresentati in tale variabile.

Utilizzando questa codifica, nel 2038, e più precisamente alle ore 03:14:07 del 19/01/2038, il primo bit della variabile del tempo, riguardante il segno, assumerà un valore negativo, ripartendo da -2147483648, segnando come data le ore 20:45:52 del 13/12/1901 :angry: :angry: :angry:

Di seguito una animazione che dimostra l'effettiva esistenza del bug:

Immagine

Il bug, può anche presentarsi in date antecedenti al 19/01/2038, basti pensare a server che utilizzano date successive a quelle attuali. Nel 2006, famoso è il crash dei server di AOL, che utilizzando una data successiva a quella reale, superò il limite imposto da time.h e causò un crash dei server e delle apparecchiature.

Per ovviare, a questo bug, numerose sono le soluzioni ideate, ma al momento, nessuna è efficace al 100% per tutte le architetture e tutti i calcolatori presenti:
  • Utilizzare come variabile di tempo un numero intero senza segno sempre a 32 bit, rimandando però il problema al 07/02/2106, e in ogni caso causando problemi a vari applicativi.
  • Cambiare il valore di time.h in una variabile con segno a 64 bit, spostando il problema tra 290 miliardi di anni (Esisteremo ancora? :razz: )
  • Utilizzare nel conteggio della data anche millisecondi e microsecondi, in modo da avere un campo di azione (range) maggiore di bit.
A tutt'oggi, la soluzione ideale è proprio la seconda, ovvero quella di utilizzare un valore a 64 bit con segno. Alcune architetture, già hanno di default l'utilizzo del time.h a 64 bit, ma l'aggiornamento dovrà essere effettuato su tutti i calcolatori del mondo prima del 2038, se non vogliamo avere serie ripercussioni (E questa volta non saranno supposizioni come nel Millennium Bug :bash: :bash: :bash: ).

Di questo problema, si parla già da svariati anni. Basti pensare che verso la fine del 2000, un fantomatico utente su svariati forum, che si firmava con lo pseudonimo di John Titor, affermava di essere stato inviato indietro nel tempo dall'anno 2036 per recuperare da suo nonno ingegnere un esemplare di IBM 5100 (uno dei primi calcolatori).

Affermava infatti:
Sono stato "mandato" per prendere un computer IBM chiamato 5100. Era uno dei primi computer portatili e aveva la capacità di leggere i vecchi linguaggi di programmazione IBM oltre a APL e Basic. Ci serve quel sistema per debuggare vari programmi per computer nel 2036. Unix ha un problema nel 2038.

Spero di non avervi annoiato troppo con questo approfondimento, rimango a vostra completa disposizione per ogni eventuale curiosità oppure chiarimento riguardante l'argomento.

Un caloroso saluto a tutti!!! :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo:

MM
Complimenti, guida ricca di informazioni! :D
Io onestamente non immaginavo che il bug potesse ripetersi! :(
Ma ne sono affetti tutti gli OS?
The98 ha scritto:Complimenti, guida ricca di informazioni! :D
Io onestamente non immaginavo che il bug potesse ripetersi! :(
Ma ne sono affetti tutti gli OS?
Ne sono affetti tutti gli OS Unix-based e tutti quelli basati su linguaggi C e derivati ;)

MM
E Michele sfruttò i bug per hackerare i calcolatori e mettere la data del suo compleanno. :)
Virgula ha scritto:E Michele sfruttò i bug per hackerare i calcolatori e mettere la data del suo compleanno. :)
Virgula, sono nella mia DeLorean DMC-12 :D Preparati ad un Back to the Future, sono Emmett Lathrop Brown, ma puoi chiamarmi anche Doc!!!! Ahahahaah :D :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo:
Michele Mignogna ha scritto:
Virgula ha scritto:E Michele sfruttò i bug per hackerare i calcolatori e mettere la data del suo compleanno. :)
Virgula, sono nella mia DeLorean DMC-12 :D Preparati ad un Back to the Future, sono Emmett Lathrop Brown, ma puoi chiamarmi anche Doc!!!! Ahahahaah :D :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo:
Hahahahah dove l'hai trovata la macchina? Davanti ad un ristorante?
Virgula ha scritto:
Michele Mignogna ha scritto:
Virgula ha scritto:E Michele sfruttò i bug per hackerare i calcolatori e mettere la data del suo compleanno. :)
Virgula, sono nella mia DeLorean DMC-12 :D Preparati ad un Back to the Future, sono Emmett Lathrop Brown, ma puoi chiamarmi anche Doc!!!! Ahahahaah :D :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo:
Hahahahah dove l'hai trovata la macchina? Davanti ad un ristorante?
Nono, è la mia, l'ho appositamente modificata per viaggiare nel tempo :yahoooooo: , tu per me ti chiami Marty McFly, e ora sali a bordo :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo:
lo chiamavano forum professionale :angry: :angry:
ahahahahahahahah :yahoooooo: :yahoooooo: :yahoooooo:
Michele Mignogna ha scritto: Nono, è la mia, l'ho appositamente modificata per viaggiare nel tempo :yahoooooo: , tu per me ti chiami Marty McFly, e ora sali a bordo :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo: :yahoooooo:
Nono ho paura se guidi tu aaahhhhhhhh!!!!!!!!!!!!!!!! :D
John Titor: di questo tizio mandato dal futuro non ne ero a conoscenza, lo voglio conoscere, anche per sapere un pò cosa si dice di bello nel 2036 ahahhaha