Anno 2038 problema [chiuso]


Risposte:


17

Ho riscontrato questo problema in un sistema Linux incorporato che doveva gestire le date oltre il 2038 in alcuni certificati crittografici a lungo termine, quindi direi che la somiglianza dipende dal dominio dell'applicazione.

Mentre la maggior parte dei sistemi dovrebbe essere pronta ben prima del 2038, se ti ritrovi oggi a calcolare le date in un futuro molto lontano, potresti avere un problema.


Buona! Non ho pensato a quell'esempio! Cosa utilizza lo standard PKI come sintassi temporale all'interno dei certificati? Non ho mai guardato!
geoffc,

@geoffc, In realtà era un formato proprietario e aveva le sue strutture interne di data / ora, che erano abbastanza grandi da adattarsi alle date dopo il 2038, ma utilizzava le funzioni GLIBC per la conversione di data / ora. Se ricordo bene, la mktimechiamata falliva silenziosamente.
Alex B,

13

Penso che questo sarà un problema significativo, molto più pernicioso rispetto ai problemi Y2K del 1999/2000 perché il codice interessato è generalmente di livello inferiore (è CTIME) e quindi è più difficile individuare i luoghi in cui il tempo viene archiviato in quel modo.

A complicare ulteriormente le cose, il fatto che Y2K fosse percepito come uno squib umido renderà più difficile attirare l'attenzione sul problema nel periodo precedente all'evento.

Riferimenti culturali:

Cory Doctorow stava provando un nuovo modello per commissionare / pubblicare racconti con licenze aperte, e io ho suggerito un tema del 2038 o uno di essi, che ha fatto brillantemente in Epoch: http://craphound.com/?p=2337


Parlando come qualcuno che stava lavorando sulla questione in quel momento, Y2K si è frantumato a causa di un sacco di lavoro e pianificazione in anticipo. La percezione umida dello squib è stata rafforzata da tutto il destino esagerato nei media. Mi aspetto che ci sarà molta pianificazione e lavoro a partire dal 2035 circa, ma se siamo fortunati ci mancherà il blitz mediatico.
David Thornley,

Saluti per il link Mark.
Boehj,

9

Alcuni anni fa, c'erano già segnalazioni di problemi, in settori come i programmi ipotecari che effettuavano calcoli su prestiti trentennali: 2008 + 30 = 2038.


8

Un sistema operativo a 64 bit è in definitiva irrilevante per il problema del 2037. (CTIME si avvicina al 2037 rispetto al 2038).

La domanda non è la profondità in bit del sistema operativo, piuttosto come fa il sistema operativo a memorizzare il tempo. O in che modo la colonna del database sceglie di memorizzare l'ora. O in che modo questo attributo della sintassi dei servizi di directory memorizza l'ora nel back-end.

Questo è un problema molto più grande di quanto si pensi, dal momento che è così endemico e comune aver usato i contatori di tempo a 32 bit.

Ogni istanza che memorizza il tempo deve essere rivisitata e tutte le API aggiornate e anche tutti gli strumenti che lo utilizzano.

I livelli di astrazione che ti consentono di impostare l'ora tramite un formato orario leggibile dall'uomo, anziché i dati grezzi scritti rendono più semplice, ma questo è solo un caso.

Ho il sospetto che questo sarà un affare molto più grande di quanto la maggior parte della gente pensi.


1
Il problema più grande che vedo sono formati di file e fileystens, tuttavia l'intervallo di date per ext4 è 2514, vfat è 2107. Il problema è con reiserfs (2038).
Maciej Piechotka,

ReiserFS ha ancora altri problemi. Continuo a pensare che ci siano molti più posti nascosti di quanto la gente pensi di quel tempo del negozio in CTIME. È un formato ora dannatamente facile e utile. Naturalmente, CTIME non firmato non presenta il problema 2037. Penso che sia il caso del timestamp del 2107.
geoffc,

1
Stai pensando ad Apple HFS. Il FAT non lo usa time_taffatto. Memorizza anno, mese e giorno come campi in un valore di 16 bit: 5 bit per giorno, 4 per mese, lasciando 7 per anno. Il 2107 è il 1980 (anno zero in terra FAT) + 2 ^ 7-1. Per maggiore divertimento, FAT memorizza l'ora del giorno allo stesso modo in un altro valore a 16 bit, ma se si esegue la matematica, si scopre che sono necessari 17 bit per memorizzare l'ora del giorno in questo modo. FAT aggira questo problema facendo cadere un bit di risoluzione per secondi; FAT non è in grado di distinguere le modifiche a meno di 2 secondi di distanza. Ah, Microsoft, che mondo noioso sarebbe senza le tue inutili incompatibilità!
Warren Young,

8

Questa è la mia opinione, ma questo problema è dovuto a un problema del contatore a 32 bit, oggi la maggior parte dei SO sono aggiornati per gestire il tempo su 64 bit (almeno su computer a 64 bit), quindi immagino che tutto il sistema operativo e il software saranno pronti a lungo tempo prima del 2038, diciamo 2020. Quindi potresti avere problemi solo se nel 2038 continuerai a eseguire software dal 2020.
Probabilmente non sarà un problema in quasi tutti i casi. Io spero.


Ho provato Ubuntu versione a 32 bit e ha mostrato problemi 2038 ma l'esecuzione di Ubuntu versione a 64 bit non ha mostrato alcun segno del problema 2038. Non ho provato nessun altro Unix.
Jimmy Hedman,

Sì, nella maggior parte delle versioni a 32 bit vedrai il problema, ma non nella versione a 64 bit. Puoi aspettarti di non avere più un sistema operativo a 32 bit nel 2038.
raggio

2
Questo è un presupposto ridicolo. Usiamo ancora 16 (e persino 8 bit) microprocessori nel mondo di oggi, cosa significa che i microprocessori a 32 bit scompariranno magicamente in futuro? È corretto affermare che ciò non avrà alcun impatto sull'utente medio, ma in casi limite potrebbe continuare a rappresentare un problema.
Eli Frey,

Bene - i computer a 16 e 8 bit possono 1. spostare la data 0 (dal 1970-01-01 al 2010-01-01 ad esempio) - tuttavia infrangerebbe alcune convenzioni API / ABI 2. estendere il campo timer ( che in alcuni casi può rompere "solo" ABI).
Maciej Piechotka,

1

Non è un grosso problema.

Durante il primo blitz Y2K, in cui i fornitori di software e hardware dovevano certificare i loro prodotti come "Y2K compliant" per essere venduti (ricordo che i cavi di rete su PC Connection erano certificati Y2K), molte aziende hanno effettuato controlli dettagliati di tutto , impostando gli orologi in futuro e testando.

All'epoca, poiché il costo dei test era così elevato, quasi sempre testarono con diverse date, come 1/1/99 (alcuni sviluppatori potrebbero aver usato 99 come sentinella), 31/12/99, 1/1 / 00, il balzo del 2000, 19/01/38 e molti altri. Vedi qui per un noioso elenco.

Quindi credo che qualsiasi software importante che esisteva nel 1999 probabilmente non avrà 2038 bug, ma potrebbe esserci un nuovo software scritto da allora da programmatori ignoranti. Dopo l'intero debacle di Y2K i programmatori in genere sono diventati molto più consapevoli dei problemi di codifica della data, quindi è improbabile che abbia un impatto tanto grande quanto lo era Y2K (che, di per sé, era qualcosa di anticlimax).


Tranne che questo problema è causato dal tipo time_t UNIX a 32 bit.
Yuhong Bao,

1

I sistemi a 32 bit ancora in esecuzione saranno un problema.


2
Potresti approfondire questo, per chiarire cosa diventa esattamente il problema e come reagire a questo?
Anthon,

Il problema riguarda l'intero a 32 bit utilizzato per il calcolo del tempo. Il tempo è misurato in numero di secondi trascorsi dal 1 ° gennaio 1970. Ad esempio, dopo un giorno questo contatore sarà a 86400. Quindi nel 2038 questo valore traboccerà poiché conterrà un valore maggiore del numero che può essere tenuto in un numero intero a 32 bit senza segno. Un sistema a 64 bit che utilizza 64 bit per il timestamp non avrà questo problema poiché sarà in grado di funzionare fino alle 15:30:08 di domenica 4 dicembre 292.277.026.596 (292 miliardi di anni)
Rahul Kadukar

0
#include <time.h>
#include <stdio.h>

int main() {
  time_t t = (time_t)(1L << (sizeof(time_t)*8 - 9));
  printf("%d\n", sizeof(time_t));
}

dovrebbe essere 1 invece di 9 ma ctime non gestisce una data più grande:

8 - Sun Jun 13 07:26:08 1141709097

Il tempo del mio sistema (ovviamente a 64 bit) può durare anche 1 milione di anni in più. La soluzione è aggiornare i sistemi a 64 bit.

Il problema è che i programmi potrebbero non gestirlo. Soprattutto vecchio, corretto e non mantenuto. Gli sviluppatori sono abituati ai seguenti fatti:

  • intsono 32 bit (in effetti sono conservati come 32 bit su sistemi a 64 bit, tra l'altro perché si supponeva che fossero sempre 32 bit)
  • La maggior parte dei tipi (come time_t) può essere tranquillamente lanciataint

Nel famoso software FLOSS entrambe le cose probabilmente non passeranno attraverso la recensione "molti occhi". Da meno popolare e proprietario dipenderà in gran parte dall'autore.

Immagino che nel mondo libero * nix il 2038 sarà "inosservato" mentre mi aspetto problemi su piattaforme "proprietarie" (cioè quelle con un gran numero di software proprietarie) - specialmente se una parte crutiale non verrà mantenuta.


Non è il "sistema" o "OS". Quasi tutti i precedenti sistemi operativi a 32 bit (diamine anche quelli a 16 bit) potevano eseguire calcoli a 64 bit. La profondità a 64 bit a livello di sistema operativo è fondamentalmente un riferimento al modello di memoria, non la capacità di fare matematica. E il tempo è tutto incentrato sulla matematica.
geoffc,

Sì e no. È vero che il sistema operativo a 32 e 64 bit può eseguire l'aritmetica a 64 bit (è possibile emulare qualsiasi aritmetica). Tuttavia time_t(o equivalente) sul sistema operativo a 32 bit sembra avere 32 bit mentre time_t(o equivalente) sul sistema operativo a 64 bit sembra avere 64 bit. Ho pensato che fosse sufficientemente chiaro anche se con una certa semplificazione.
Maciej Piechotka,

0

Se è qualcosa come Y2K, alcune persone sono già state colpite e stanno cambiando software, ma la maggior parte degli sviluppatori lo ignorerà fino a quando negli anni '30, probabilmente 2035 o giù di lì, a quel punto ci sarà molto lavoro fatto e qualcuno abbastanza vecchio conoscere K&R C e non ancora troppo senile potrà improvvisamente contrarre per un sacco di soldi. La transizione effettiva mostrerà molte cose non ancora fatte, probabilmente nessuna di quelle così importanti.


-5

Il problema Y2K era rappresentato da due carte che rappresentano l'anno anziché quattro.

Molti sistemi non hanno avuto modo di distinguere tra il 2000 e il 1900 poiché conservavano solo gli "00".

Quasi tutti i sistemi ora utilizzano 4 caratteri per memorizzare l'anno oppure usano una libreria di qualche tipo.

Quindi lasciamo tutti preoccuparsi dell'anno 10000 (Y10K) invece. Tranne che per gli scrittori di SO e Library ...


Probabilmente nessuno (praticamente nessuno) sta memorizzando la data in questo formato (cioè DCD o stringa) ora. Il tempo di solito viene gestito da oggetti o ints (quindi dovrebbe essere aggiornato solo il codice di visualizzazione).
Maciej Piechotka,

Sì, esattamente il mio punto. Y2K ha effettivamente ucciso l'idea di rappresentare le date come stringhe a lunghezza fissa.
Stephen Jazdzewski,

@Stephen: non nel mondo COBOL, ma fortunatamente ci sono poche implementazioni COBOL su Unix / Linux.
David Thornley,

@David: i programmi COBOL erano il problema Y2K per la maggior parte. I sistemi Linux / Unix, dal punto di vista degli utenti, hanno mai avuto un problema con Y2K? La semplice risposta alla domanda originale è no.
Stephen Jazdzewski,

4
Il poster non chiede il problema y2k; stanno chiedendo del problema y2k38, che è una bestia completamente diversa. Controlla en.wikipedia.org/wiki/Y2K38 per una descrizione.
Kevin M,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.