Wie hoch ist die Wahrscheinlichkeit, dass die Ausgabe des Jahres 2038 sehr problematisch wird?
Wie hoch ist die Wahrscheinlichkeit, dass die Ausgabe des Jahres 2038 sehr problematisch wird?
Antworten:
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.
mktime
Anruf lautlos fehl.
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
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.
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.
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!
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.
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).
Bis dahin noch laufende 32-Bit-Systeme werden ein Problem sein.
#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:
int
Es 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).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.
time_t
32-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.
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.
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 ...