Il progetto Debian si prepara a risolvere il bug Y2K38, il nuovo problema di date dopo Y2K, il Millennium Bug

8

Quanti di voi erano già operativi nell’anno 2000 o poco prima? In quel periodo scattò la paura del cambio di millennio, ed insieme ad essa il pensiero che il problema Y2K, che venne per l’appunto definito Millennium Bug, mettesse tutto il mondo, informatico e non, al tappeto.

Per i più piccini un veloce riassunto: il Millennium Bug si riferisce alle date memorizzate in campi da sei caratteri anziché otto, per le quali quindi veniva dato per scontato il ventesimo secolo, e che con l’arrivo dell’anno 2000 rischiarono di mandare in confusione i sistemi software che le interpretavano. Pensate ad una persona nata il primo gennaio del 1900 che nel 2000 non si vedeva più riconoscere la pensione nonostante avesse compiuto cent’anni, poiché al sistema risultava ne avesse… Meno di uno!

Ad onor del vero fu più rumore che altro, non successe assolutamente nulla, a parte qualche caso sporadico di voli cancellati, ritardi nei call-center e, forse il più eclatante, il rischio di fermo di un paio di reattori nucleari in Svezia.

Bene, ventiquattro anni dopo c’è un altro problema simile a cui far fronte, ossia il 2038 Bug, o Y2K38 Bug, per gli amici.

Ne sono affetti i sistemi che utilizzano le variabili di tipo time_t, altrimenti detto Unix timestamp, o epoch che rappresenta il numero di secondi passati dal primo gennaio del 1970, idealmente la data del primo rilascio di Unix (da qui uno dei suoi nomi).

Ora, perché il 2038? Perché dopo il 19 gennaio 2038 il tipo in questione comincerà a conteggiare nuovamente da zero, causando potenziali errori nei calcoli del tempo e nei sistemi che dipendono dalla rappresentazione temporale corretta. Come avevamo raccontato a suo tempo, ecco un’immagine reperibile su Wikipedia che illustra in maniera chiarissima il problema:

La soluzione? Usare una variabile a 64 bit anziché a 32, ed è ciò che è stato implementato nel Kernel Linux dal Kernel 5.6, già da diversi anni.

Ma non di solo Kernel vive l’uomo, ed infatti il progetto Debian ha annunciato l’introduzione di time_t a 64 bit a partire dalla prossima unstable, la versione in sviluppo del sistema operativo su cui un abnorme numero di distribuzioni Linux è basato.

L’annuncio è stato dato all’interno nelle Debian micronews e fa riferimento ad un messaggio apparso sulla mailing list del progetto.

Nel progetto Debian l’attività è tracciata in una pagina dedicata dei Debian Release Goals, e viene da sé come la problematica in questione riguardi sostanzialmente tutte le distribuzioni, pertanto sebbene siamo più che nei tempi, prima o dopo annunci simili saranno attesi anche da parte di altri.

Chissà se alle 03:14:07 del 19 Gennaio 2038 qualche orologio, servizio o sistema in un attimo si ritroverà a fare un salto nel tempo, alle 20:45:52 del 13 Dicembre 1901.

In quel caso la soluzione diventerà una ed una soltanto:

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.

8 risposte a “Il progetto Debian si prepara a risolvere il bug Y2K38, il nuovo problema di date dopo Y2K, il Millennium Bug”

  1. Avatar amedeo lanza
    amedeo lanza

    Ricordo bene il panico e la disinformazione a riguardo; lavorando a quei tempi in cobol, la quantità di programmi con l’anno di due cifre era notevole. Uno dei tacconi più diffusi consisteva nel considerare le cifre minori di un certo valore come date appartenenti al nuovo millenio ed effettivamente per programmi di contabilità poteva avere senso (un programma in cobol non poteva essere stato scritto prima del ’59’); per quanto riguarda le anagrafiche non avevamo l’incombenza di trattarle. Come dici, alla fine si rivelò un allarme esagerato. Modificare time_t per portarlo a 64 bit mi sembra una soluzione decisamente migliore, dovrebbe bastare la ricompilazione e l’aggiornamento dei campi nei db senza richiedere strani artifizi.
    Tra le altre cose, penso che memorizzare le date come stringhe sia estremamente inefficiente: per una data ‘completa’ servono 8 + 6 byte (fermandosi ai secondi e omettendo i caratteri di separazione) quindi 112 bit

  2. Avatar amedeo lanza
    amedeo lanza

    Ricordo bene il panico e la disinformazione a riguardo; lavorando a quei tempi in cobol, la quantità di programmi con l’anno di due cifre era notevole. Uno dei tacconi più diffusi consisteva nel considerare le cifre minori di un certo valore come date appartenenti al nuovo millenio ed effettivamente per programmi di contabilità poteva avere senso (un programma in cobol non poteva essere stato scritto prima del ’59’); per quanto riguarda le anagrafiche non avevamo l’incombenza di trattarle. Come dici, alla fine si rivelò un allarme esagerato. Modificare time_t per portarlo a 64 bit mi sembra una soluzione decisamente migliore, dovrebbe bastare la ricompilazione e l’aggiornamento dei campi nei db senza richiedere strani artifizi.
    Tra le altre cose, penso che memorizzare le date come stringhe sia estremamente inefficiente: per una data ‘completa’ servono 8 + 6 byte (fermandosi ai secondi e omettendo i caratteri di separazione) quindi 112 bit

  3. Avatar Raoul Scarazzini

    Lato mio al tempo operavo tra le altre cose su RPG (mondo AS400) ed anche lì la soluzione fu quella di usare il confronto numerico sulla cifra dell’anno assegnandola ad uno o l’altro centennio. Di fatto non successe assolutamente nulla, però fu in un certo senso “divertente”.

  4. Avatar amedeo lanza
    amedeo lanza

    maledetto as400 affondatore del mitico Vax (comunque grazie anche alla politica miope di DEC che strapagava commerciali e ‘evangelist’ in un periodo in cui le vacche grasse erano ormai finite)

  5. Avatar Raoul Scarazzini

    Io arrivavo dall’istruzione scolastica col mio bel Delphi di Borland, la programmazione ad oggetti, Interbase (che poi divenne Firebird)… Mi misero davanti a sto terminale verde tipo Matrix e mi parlarono dell’RPG (manco ILE RPG eh, proprio l’RPG del ’59) e mi dissero: va che è un linguaggio posizionale eh!
    Non mi sono mai più ripreso 😀 😀 😀

  6. Avatar amedeo lanza
    amedeo lanza

    Ho usato TP dalle prime versioni (non ricordo se la 1 o la 2) fino a Delphi 6 o 7, passando per TP per Windows e Kylix (a parte una manciata di piccole applicazioni per i clienti, sempre per hobby) e Pascal rimane il mio linguaggio preferito. Ora quando ho un po’ di tempo mi giocherello con FreePascal/Lazarus. Ai tempi del TP mi dilettavo a scrivere piccole utility sul mio AT&T PC 6300 (alias M24 venduto con giri strani da un tizio di Ivrea) e portarle in ufficio dove le compilavo con Vax Pascal. Quando è uscito Java con le menate di write once compile everywere, le ho sempre considerate più fumo che arrosto.
    In quanto a terminali, ho avuto la fortuna di utilizzare le serie VT200 e VT300 sia bianchi che verdi e ambra e continuo a considerare le tastiere LK201 tra le migliori e più robuste mai utilizzate (si sono prese certi pugni da incazzatissimo che spezzerebbero in due la cinesate attuali)

  7. Avatar JustATiredMan
    JustATiredMan

    eee Delphi !!!! i veri programmatori usavano Turbopascal 3.0 rigorosamente in msdos… meglio la versione in cp/m 😀

  8. Avatar Raoul Scarazzini

    Beh nel 1999 Delphi era il nirvana 🙂 ma è chiaro che a scuola si era partiti dal Turbo Pascal.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *