Sie erinnern sich wahrscheinlich an die Panik rund um das Jahr 2000. Als die Uhr das Jahr 2000 schlug, hatten die Medien großen Spaß daran, einen globalen Zusammenbruch vorherzusagen. Doch während damals viele alte Systeme repariert wurden, tickt im Hintergrund eines Großteils des modernen Internets immer noch ein anderer Timer ab. Es wird das Jahr-2038-Problem genannt. Und es liegt darin begründet, wie C-Programmiersprachen mit der Zeit umgehen.
Die meisten Leute gehen davon aus, dass es sich bei dem Problem um zweistellige Jahreszahlen wie das Jahr 2000 handelt. Das ist es nicht. Das Kernproblem liegt tiefer im Code. Insbesondere, wie C-Programme Datumsdaten speichern.
Das 32-Bit-Limit
Hier ist die technische Realität. Die Standardzeitbibliothek in C verwendet eine 4-Byte-Ganzzahl mit Vorzeichen, um die Zeit zu verfolgen. Das sind 32 Bit. Dieses Format definiert die „Epochenzeit“ als Beginn am 1. Januar 1970 um 00:00:00 Uhr UTC. Jede Sekunde nach diesem Moment wird als einfache Zahl gespeichert.
Beispielsweise stellt der Zeitstempel „919642718“ 919 Millionen Sekunden nach der Epoche dar. Das ist der 21. Februar 1999. Das ist praktisch, weil man durch Subtrahieren eines Zeitstempels von einem anderen die genauen Sekunden zwischen zwei Ereignissen erhält. Bibliotheken wandeln diese Sekunden dann in Minuten, Stunden oder Jahre um.
Aber es gibt eine harte Decke.
Eine vorzeichenbehaftete 32-Bit-Ganzzahl hat einen Maximalwert von 2.147.483.647. Sobald dieser Zähler nach dem 1. Januar 1970 null Sekunden erreicht, rollt er um.
Dieser Rollover erfolgt am 19. Januar 2038.
Nach diesem Datum läuft die Ganzzahl über. Es wird eine negative Zahl angezeigt. Für ein System, das dieses Format verwendet, ist dieser negative Wert ein ungültiges Datum. Es handelt sich praktisch um einen Fehler in der Matrix für jede Software, die nicht aktualisiert wurde.
Warum das einfacher ist als Y2K
Die gute Nachricht? Dies zu beheben ist nicht so chaotisch wie die Mainframe-Albträume der späten 90er Jahre.
Im Jahr 2000 haben viele Systeme die Speicherung von Daten nicht standardisiert. Einige verwendeten MM-TT-JJ. Andere verwendeten JJ-MM-TT. Das Fehlen eines universellen Formats bedeutete, dass Entwickler in jeder Anwendung nach Code suchen und die Datumslogik manuell ändern mussten.
Das Jahr-2038-Problem ist sauberer.
Die Standardzeitbibliothek kapselt den gesamten Zeiterfassungsprozess. Es definiert seine eigenen Typen und Funktionen. So können gut geschriebene Programme einfach neu kompiliert werden. Ingenieure müssen lediglich die Bibliothek gegen eine Version austauschen, die eine größere Bytegröße verwendet.
Wenn Sie beispielsweise von einer 4-Byte-Ganzzahl zu einer 8-Byte-Ganzzahl wechseln, wird der Bereich erheblich erweitert. Eine 8-Byte-Ganzzahl mit Vorzeichen kann weit über 2038 hinaus zählen, ohne dass es zu einem Überlauf kommt. Es handelt sich um ein Software-Update. Kein Hardware-Ersatz. Kein Umschreiben des Codes. Ein Bibliothekstausch.
Windows und Mac: Unterschiedliche Timer, unterschiedliche Probleme
Nicht jedes System verwendet das 32-Bit-C-Format. Verschiedene Betriebssysteme haben ihre eigenen Besonderheiten.
Windows NT verwendet beispielsweise eine 64-Bit-Ganzzahl. Es misst die Zeit in Schritten von 100 Nanosekunden. Die Zählung beginnt jedoch am 1. Januar 1601 und nicht im Jahr 1970. Dadurch wird das Überlaufdatum viel weiter nach hinten verschoben. Windows wird voraussichtlich um das Jahr 2184 an seine Grenzen stoßen.
Apple hat einen anderen Ansatz gewählt. Laut Apples eigener Dokumentation ist macOS so strukturiert, dass es bis zum Jahr 29.940 gültig bleibt. Das sind ungefähr 27.000 Jahre. Wenn Sie also einen Mac verwenden, müssen Sie sich keine Sorgen machen, dass Ihr Kalender im Jahr 2038 abstürzt.
Wer ist sonst noch gefährdet?
Unix-basierte Systeme sind das Hauptanliegen. Aber sie sind nicht allein.
Auch eingebettete Systeme sind anfällig. Viele IoT-Geräte, Industriesteuerungen und ältere Datenbankserver basieren auf demselben 32-Bit-Zeitformat. Wenn sie nicht aktualisiert wurden, werden Daten nach dem 19. Januar 2038 falsch interpretiert.
Kurzfristige Korrekturen können das Patchen von Software umfassen, um negative Zeitwerte korrekt zu verarbeiten. Aber das ist ein Verband. Die dauerhafte Lösung erfordert ein Upgrade auf ein 64-Bit-Zeitformat.
Die Frage ist nicht, ob der Code kaputt geht. Es geht darum, ob die Systeme, auf denen dieser Code ausgeführt wird, aktualisiert werden, bevor die Zeit abläuft.
Der Großteil der Infrastruktur, auf die wir angewiesen sind, ist bereits auf die 64-Bit-Zeitmessung umgestellt. Aber nicht alles ist so. Alte Server. Ältere Industrieanlagen. Etwas eingebettete Logik. Das sind die schwachen Glieder.
Wenn der 19. Januar 2038 kommt, wird die Uhr an ihre Grenzen stoßen. Bei einigen Systemen handelt es sich um kein Ereignis. Für andere wird es ein harter Stopp sein. Wenn Sie bis zur letzten Minute warten, bleibt nicht viel Zeit, den Code zu patchen.
























