Jahr 2038 Problem [geschlossen]


Antworten:


17

Ich bin auf dieses Problem in einem eingebetteten Linux-System gestoßen, das Daten nach 2038 in einigen langfristigen kryptografischen Zertifikaten verarbeiten musste. Daher würde ich sagen, dass die Ähnlichkeit davon von Ihrer Anwendungsdomäne abhängt.

Während die meisten Systeme weit vor 2038 bereit sein sollten, haben Sie möglicherweise ein Problem, wenn Sie heute weit in die Zukunft gerechnet haben.


Guter! An dieses Beispiel habe ich nicht gedacht! Was verwendet der PKI-Standard als Zeitsyntax in Zertifikaten? Ich habe noch nie geschaut!
Geoffc

@geoffc, Eigentlich war es ein proprietäres Format und hatte seine internen Datums- / Zeitstrukturen, die selbst groß genug waren, um auf Daten nach 2038 zu passen, aber es verwendete GLIBC-Funktionen für die Datums- / Zeitkonvertierung. Wenn ich mich richtig erinnere, schlug der mktimeAnruf lautlos fehl.
Alex B

13

Ich denke, dies wird ein schwerwiegendes Problem sein, das viel schädlicher ist als die Y2K-Ausgaben von 1999/2000, da der betroffene Code im Allgemeinen niedriger ist (es ist CTIME) und es daher schwieriger ist, Orte zu finden, an denen Zeit auf diese Weise gespeichert wird.

Um die Sache noch weiter zu komplizieren, wird die Tatsache, dass Y2K als feuchter Zünder wahrgenommen wurde, es schwieriger machen, die Aufmerksamkeit auf das Problem im Vorfeld der Veranstaltung zu lenken.

Kulturelle Referenzen:

Cory Doctorow probierte gerade ein neues Modell für die Veröffentlichung von Kurzgeschichten unter offenen Lizenzen aus, und ich schlug ein Thema für 2038 vor, das er in Epoch: http://craphound.com/?p=2337 brillant umgesetzt hatte


Als jemand, der zu der Zeit an dem Problem arbeitete, sprach Y2K, weil er viel Arbeit und Planung im Voraus hatte. Die feuchte Wahrnehmung der Zünder wurde durch all das übertriebene Verderben in den Medien verstärkt. Ich gehe davon aus, dass ab 2035 viel geplant und gearbeitet wird, aber wenn wir Glück haben, werden wir den Medienblitz verpassen.
David Thornley

Prost auf den Link Mark.
Boehj

9

Vor einigen Jahren gab es bereits Berichte über Probleme in Bereichen wie Hypothekenprogrammen, in denen Berechnungen für 30-jährige Kredite durchgeführt wurden: 2008 + 30 = 2038.


8

Ein 64-Bit-Betriebssystem ist für das 2037-Problem letztendlich irrelevant. (CTIME läuft näher an 2037 als 2038 aus).

Die Frage ist nicht die Bittiefe des Betriebssystems, sondern wie speichert das Betriebssystem die Zeit. Oder wie wird in der Datenbankspalte die Zeit gespeichert? Oder wie speichert dieses Verzeichnisdienst-Zeitsyntaxattribut die Zeit am Back-End?

Dies ist ein weitaus größeres Problem als man denkt, da es so verbreitet ist, 32-Bit-Zeitzähler zu verwenden.

Jede Instanz, in der Zeit gespeichert wird, muss erneut überprüft und alle APIs sowie alle Tools, die sie verwenden, aktualisiert werden.

Abstraktionsebenen, mit denen Sie die Zeit über ein vom Menschen lesbares Zeitformat einstellen können, anstatt die ausgeschriebenen Rohdaten zu verwenden, machen es einfacher, aber das ist nur ein Fall.

Ich vermute, dass dies eine viel größere Sache sein wird, als die meisten Leute denken.


1
Das größte Problem, das ich sehe, sind Dateiformate und Dateisysteme. Der Datumsbereich für ext4 ist 2514, vfat ist 2107. Das Problem ist mit reiserfs (2038).
Maciej Piechotka

ReiserFS hat noch andere Probleme. Ich denke immer noch, dass es in CTIME viel mehr versteckte Orte gibt, als die Leute an diese Speicherzeit denken. Es ist ein verdammt einfaches und nützliches Zeitformat. Natürlich hat CTIME ohne Vorzeichen nicht das 2037-Problem. Ich denke, das ist der Fall 2107 Zeitstempel.
Geoffc

1
Sie denken an Apple HFS. FAT wird überhaupt nicht verwendet time_t. Es speichert Jahr, Monat und Tag als Felder in einem 16-Bit-Wert: 5 Bit für Tag, 4 Bit für Monat und 7 Bit für Jahr. 2107 ist 1980 (Jahr Null in FAT Land) + 2 ^ 7-1. Für mehr Spaß speichert FAT die Uhrzeit auf die gleiche Weise in einem anderen 16-Bit-Wert, aber wenn Sie rechnen, werden Sie feststellen, dass Sie 17 Bits benötigen, um die Uhrzeit auf diese Weise zu speichern. FAT umgeht dies, indem es ein Bit Auflösung für Sekunden fallen lässt. FAT kann Änderungen im Abstand von weniger als 2 Sekunden nicht unterscheiden. Ah, Microsoft, was für eine langweilige Welt wäre das ohne Ihre unnötigen Inkompatibilitäten!
Warren Young

8

Dies ist meine Meinung, aber dieses Problem ist auf ein 32-Bit-Zähler-Problem zurückzuführen. Heute werden die meisten Betriebssysteme aktualisiert, um die Zeit auf 64-Bit-Computern (zumindest auf 64-Bit-Computern) zu bewältigen Zeit vor 2038, lassen Sie uns 2020 sagen. Sie könnten also nur dann Probleme haben, wenn Sie im Jahr 2038 noch Software ab 2020 ausführen.
Es dürfte in fast allen Fällen kein Problem sein. Ich hoffe.


Ich habe die 32-Bit-Version von Ubuntu ausprobiert und es wurden 2038-Probleme festgestellt, aber bei der Ausführung der 64-Bit-Version von Ubuntu wurden keine Anzeichen für ein 2038-Problem festgestellt. Ich habe keine anderen Unixe ausprobiert.
Jimmy Hedman

Ja, bei den meisten 32-Bit-Versionen tritt das Problem auf, bei 64-Bit-Versionen jedoch nicht. Sie können damit rechnen, im Jahr 2038 kein 32-Bit-Betriebssystem mehr zu haben.
Radius

2
Dies ist eine lächerliche Annahme. In der heutigen Welt verwenden wir immer noch 16 (und sogar 8) Bit-Mikroprozessoren. Was bedeutet, dass 32-Bit-Mikroprozessoren in Zukunft auf magische Weise verschwinden werden? Es ist fair zu sagen, dass dies keinen Einfluss auf den Durchschnittsbenutzer hat, aber in Randfällen könnte es weiterhin ein Problem sein.
Eli Frey

Gut - die 16-Bit- und 8-Bit-Computer können 1. das Datum 0 (von 1970-01-01 auf zum Beispiel 2010-01-01) verschieben - dies würde jedoch bestimmte API / ABI-Konventionen verletzen. 2. das Timer-Feld erweitern ( die in bestimmten Fällen "nur" ABI brechen kann).
Maciej Piechotka

1

Keine so große Sache.

Während des ersten Y2K-Blitzes, in dem Software- und Hardwareanbieter ihre Produkte als "Y2K-konform" zertifizieren mussten, um verkauft zu werden (ich erinnere mich, dass Netzwerkkabel für PC-Verbindungen als Y2K-konform zertifiziert wurden), führten viele Unternehmen detaillierte Audits für alles durch , indem wir in Zukunft Uhren stellen und testen.

Zu der Zeit, da die Testkosten so hoch waren, wurden sie fast immer mit mehreren Daten getestet, wie zum Beispiel dem 1.1.1999 (einige Entwickler haben möglicherweise 99 als Sentinal verwendet), dem 31.12.1999, dem 1.1.1999. 00, der Sprung von 2000, 19.01.38 und viele andere. Sehen Sie hier für eine langweilige Liste.

Daher glaube ich, dass jede wichtige Software, die 1999 auf dem Markt war, wahrscheinlich keine 2038-Bugs aufweisen wird, aber neue Software, die seitdem von unwissenden Programmierern geschrieben wurde, möglicherweise. Nachdem sich die Programmierer des gesamten Y2K-Debakels der Probleme mit der Datumskodierung im Allgemeinen viel bewusster geworden waren, war es unwahrscheinlich, dass dies eine so große Auswirkung hatte wie Y2K (was an sich schon eine Art Gegenmaßnahme war).


Dieses Problem wird jedoch dadurch verursacht, dass der UNIX-Typ time_t 32-Bit ist.
Yuhong Bao

1

Bis dahin noch laufende 32-Bit-Systeme werden ein Problem sein.


2
Könnten Sie das näher erläutern, um klarer zu machen, was genau das Problem ist und wie Sie darauf reagieren können?
Anthon

Das Problem liegt in der 32-Bit-Ganzzahl, die zur Berechnung der Zeit verwendet wird. Die Zeit wird in Sekunden gemessen, die seit dem 01.01.1970 vergangen sind. Nach einem Tag steht dieser Zähler beispielsweise auf 86400. Im Jahr 2038 läuft dieser Wert über, da er einen Wert enthält, der größer ist als die Zahl, die in einem gespeichert werden kann vorzeichenlose 32-Bit-Ganzzahl. Ein 64-Bit-System, das 64-Bit für den Zeitstempel verwendet, hat dieses Problem nicht, da es am Sonntag, dem 4. Dezember, bis 15:30:08 Uhr (292 Milliarden Jahre)
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));
}

Es sollte 1 statt 9 sein, aber ctime behandelt kein größeres Datum:

8 - Sun Jun 13 07:26:08 1141709097

Die Zeit meines Systems (natürlich 64 Bit) kann sogar 1 Million Jahre länger sein. Die Lösung besteht darin, die Systeme auf 64 Bit zu aktualisieren.

Der Haken ist, dass die Programme möglicherweise nicht damit umgehen. Besonders alt, eigen und nicht gepflegt. Entwickler sind an folgende Fakten gewöhnt:

  • intEs handelt sich um 32-Bit-Dateien (in der Tat werden sie unter anderem auf 64-Bit-Systemen als 32-Bit-Dateien beibehalten, da davon ausgegangen wurde, dass sie immer 32-Bit-Dateien sind).
  • Die meisten Typen (wie time_t) können sicher angegossen werdenint

In der populären FLOSS-Software werden beide Dinge wahrscheinlich nicht durch die "viele Augen" -Rezension kommen. Auf weniger populär und Eigentum wird es weitgehend vom Autor abhängen.

Ich schätze, auf free * nix world wird der 2038 "unbemerkt", während ich Probleme auf "proprietären" Plattformen (dh solchen mit einer großen Anzahl von proprietärer Software) erwarte - besonders wenn ein Teil des kritischen Teils nicht beibehalten wird.


Es ist nicht das "System" oder "Betriebssystem". Die meisten früheren 32-Bit-Betriebssysteme (zum Teufel sogar 16-Bit-Betriebssysteme) konnten 64-Bit-Mathematik ausführen. Die 64-Bit-Tiefe auf Betriebssystemebene ist im Grunde genommen ein Hinweis auf das Speichermodell, nicht auf die Fähigkeit, Mathematik zu betreiben. Und in der Zeit dreht sich alles um Mathematik.
Geoffc

Ja und nein. Es ist wahr, dass 32-Bit- und 64-Bit-Betriebssysteme 64-Bit-Arithmetik ausführen können (Sie können jede beliebige Arithmetik emulieren). Unter time_t32-Bit-Betriebssystemen sind jedoch 32 Bit time_t(oder ein Äquivalent) vorhanden, während unter 64-Bit-Betriebssystemen 64 Bit (oder ein Äquivalent) vorhanden sind. Ich hielt es für ausreichend klar, wenn auch mit einer gewissen Vereinfachung.
Maciej Piechotka

0

Wenn es sich um etwas wie Y2K handelt, sind einige Leute bereits betroffen und ändern die Software, aber die meisten Entwickler werden es bis in die 2030er Jahre ignorieren, wahrscheinlich bis 2035. Zu diesem Zeitpunkt wird eine Menge Arbeit geleistet und jeder wird alt genug sein K & R C zu kennen und noch nicht zu senil zu sein, wird plötzlich in der Lage sein, für viel Geld einen Vertrag abzuschließen. Der eigentliche Übergang wird eine Menge Dinge zeigen, die noch nicht erledigt sind, wahrscheinlich keine, die so wichtig sind.


-5

Das Y2K-Problem waren zwei Chartas, die das Jahr repräsentierten, anstatt vier.

Viele Systeme hatten keine Möglichkeit, zwischen 2000 und 1900 zu unterscheiden, da sie nur die '00' gespeichert haben.

Fast alle Systeme verwenden jetzt entweder 4 Zeichen, um das Jahr zu speichern, oder sie verwenden irgendeine Bibliothek.

Lassen Sie uns stattdessen alle über das Jahr 10000 (Y10K) nachdenken. Mit Ausnahme der OS- und Library-Writer ...


Wahrscheinlich speichert derzeit niemand (praktisch niemand) das Datum in einem solchen Format (z. B. DCD oder Zeichenfolge). Die Zeit wird normalerweise von Objekten oder Ints verarbeitet (daher müsste nur der Anzeigecode aktualisiert werden).
Maciej Piechotka

Ja, genau mein Punkt. Y2K hat die Idee, Datumsangaben als Zeichenfolgen mit fester Länge darzustellen, praktisch zunichte gemacht.
Stephen Jazdzewski

@Stephen: Nicht in der COBOL-Welt, aber es gibt glücklicherweise nur wenige COBOL-Implementierungen unter Unix / Linux.
David Thornley

@ David: COBOL-Programme waren größtenteils das Y2K-Problem. Hatten Linux / Unix-Systeme aus Anwendersicht jemals ein Y2K-Problem? Die einfache Antwort auf die ursprüngliche Frage lautet nein.
Stephen Jazdzewski

4
Das Plakat fragt nicht nach dem y2k-Problem. Sie fragen nach dem y2k38-Problem, das ein ganz anderes Biest ist. Eine Beschreibung finden Sie unter en.wikipedia.org/wiki/Y2K38 .
Kevin M
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.