- Debian führt zur proaktiven Vermeidung des Y2K38- (Unix-Epochalypse-) Problems ab der nächsten Version Debian 13 auch auf 32-Bit-Architekturen offiziell 64-Bit-
time_t ein
- Aufgrund der Grenzen des bisherigen 32-Bit-
time_t könnte es nach dem 19. Januar 2038 dazu kommen, dass die Zeit auf 1900 zurückspringt; dieses Problem soll daher nicht länger aufgeschoben werden
- Zwar ist 64-Bit-Hardware bereits sicher, doch für kostenkritische 32-Bit-Geräte wie Embedded- und IoT-Systeme besteht weiterhin Nachfrage nach Debian, weshalb vorbeugende Maßnahmen nötig sind
- Es läuft eine groß angelegte Umstellung, bei der der in insgesamt 6.429 Paketen verteilte
time_t-Typ unter Inkaufnahme eines ABI-Kompatibilitätsbruchs gleichzeitig migriert wird
- Einige Legacy-Architekturen wie i386 und hurd-i386 bleiben Ausnahmen, zugleich wird die mögliche Einführung einer neuen x86-Architektur (i686) auf Basis von 64-Bit-
time_t erwähnt
Debians Reaktion auf den Y2K38-Bug: Umstellung auf 64-Bit-Zeit
- Debian stellt zur Vermeidung des bevorstehenden Y2K38- beziehungsweise Unix-Epochalypse-Problems in allen Umgebungen auf 64-Bit-Zeit um, mit Ausnahme eines Teils der ältesten noch unterstützten Hardware
- Dadurch sollen fehlerhafte Zeitwerte durch Überschreiten des 32-Bit-Signed-Int-Bereichs, die am 19. Januar 2038 auftreten würden, verhindert werden
Hintergrund zum Y2K38- und Unix-Epochalypse-Problem
- Das Y2K38-Problem tritt in Unix-Systemen auf, die die seit dem 1. Januar 1970 vergangenen Sekunden als 32-Bit-Signed-Int darstellen; nach 2038 kommt es dabei zu einem Overflow, sodass die Zeit fälschlich in die Vergangenheit, etwa ins Jahr 1900, zurückspringt
- Wie schon bei Y2K (dem Jahr-2000-Problem) liegt die Ursache in einer architektonischen Entscheidung für ein zu kurzes Datenformat
- Bei Y2K konnte dank frühzeitiger Gegenmaßnahmen der Entwickler ein großes Chaos verhindert werden
- Software für 64-Bit-Hardware ist bereits sicher, doch Debian wird weiterhin breit in Embedded-, Low-End- und Legacy-Umgebungen eingesetzt
Debians wichtigste Maßnahmen
- Ab dem Release Debian 13 "Trixie" wird 64-Bit-
time_t auf allen wichtigen Architekturen als Standard aktiviert
- 64-Bit-Hardware ist bereits sicher, doch Probleme treten weiterhin oft bei Embedded-Geräten und Legacy-Hardware auf Basis von 32-Bit-Prozessoren auf
- Solche Geräte werden in kostenkritischen und in hohen Stückzahlen ausgelieferten Bereichen wie Fahrzeugsteuerung, IoT, Fernsehern und Routern weiterhin eingesetzt
- Viele neue Geräte verwenden selbst gebaute Linux-Systeme wie OpenEmbedded, Alpine, Android oder Gentoo, doch auch Debian-basierte Embedded-Geräte dürften in den kommenden Jahren weiter verbreitet bleiben
Umsetzung und Änderungen
time_t-Variablen sind auf 6.429 Pakete verteilt, weshalb ein groß angelegter Aufwand erforderlich war
- Diese Änderung kann die ABI- (Application Binary Interface-) Kompatibilität aufbrechen, daher wurden alle betroffenen Bibliotheken und Pakete gleichzeitig angepasst
- Laut dem Maintainer-Team ist diese Arbeit abgeschlossen und ausreichend getestet
Ausnahmen und weitere Pläne
- Der i386-Port (klassisches x86) behält weiterhin 32-Bit-
time_t bei und bleibt aus Gründen der Kompatibilität zur Ausführung bestehender Binärdateien erhalten
- Für die i686-Architektur könnte separat über die Einführung von 64-Bit-Zeit und einer modernen ISA (Instruction Set Architecture) diskutiert werden
- Der hurd-i386-Port wird wegen fehlender Kernel-Unterstützung nicht umgestellt; stattdessen wird an einem Wechsel zu hurd-amd64 gearbeitet
Hinweise für Entwickler
- Entwickler können mithilfe der im Debian-Wiki beschriebenen Verfahren testen, ob ihre Software durch die Einführung von 64-Bit-Zeitvariablen beeinträchtigt wird
- Weitere Details und technische Dokumentation bietet das Debian wiki
1 Kommentare
Hacker-News-Kommentare
64-bit time_tsehe, werde ich an ihn denkenmm/yy), weil die kurze Schreibweise praktisch ist; für die Lebensdauer einer Karte reicht das aus, aber im Jahr 2100 könnte es zu Umstellungsproblemen kommen; ein Großteil von Y2K entstand durch UI-Probleme (Textfelder mit zwei Zeichen, hartkodiertes+1900usw.); ein Y2K-Bug, den ich selbst erlebt habe, war ein Internetforum, das von 1999 auf 19100 sprang, also ein bloßer Ausgabefehler; Y2K war kein reines COBOL-Problemintmit 0 für das Jahr 1900 gespeichert hätte, wären noch mehr Bytes eingespart worden; mit 3 Byte ließen sich Daten von 1900 bis ungefähr Tag 44.000 abdecken, mit 2 Byte sogar bis etwa 2070time_tmit 64 Bit wird die Epochalypse lösen, aber nicht alle Systeme gehen einfach zu 64-Bit-Sekunden über; ext4 verwendet bereits 30 Bit für die Nachkommengenauigkeit auf Bruchteilebene (Nanosekundenbereich) und 34 Bit für Sekunden, aber in einigen hundert Jahren wird das Problem dennoch wieder auftreten; vermutlich landen wir irgendwann bei 128-Bit-Zeitstempeln mit 64-Bit-Sekunden plus 64-Bit-Bruchteil, womit sich praktisch die gesamte für die Menschheitsgeschichte absehbare Zukunft abdecken ließetime64_tbereits abgeschlossen; nur i386 ist wegen der bestehenden Binärkompatibilität ausgenommen, alle anderen wurden umgestellt, einschließlich m68k; ich selbst habe m68k, powerpc, sh4 und hppa migrierttime_tist keine Variable, sondern ein Datentyptime_ttaucht wirklich überall auf. Es erscheint im Quellcode von 6.429 der 35.960 Pakete. Pakete, die Strukturen mittime_tals ABI exportieren, müssen eine vollständige ABI-Migration gleichzeitig durchführen.“ Das Wiki erklärt es klarer als der Artikelargument list too longhäufig lästigRLIMIT_STACKzu erhöhen, zum Beispiel ergibtulimit -s 4000einen Stack von 4 MB; für noch mehr muss man/etc/security/limits.confändern und sich neu anmeldenMAX_ARG_STRLENneu definieren und den Kernel neu kompilieren; eine weitere Möglichkeit ist eine Maschine mit größerer Seitengröße, etwa ein RHEL-Arm-Kernel mit 64k Seitengröße; trotzdem ist es viel einfacher, statt eines Kommando-Puffers Pipes für den Datenaustausch zwischen Prozessen zu verwenden64-bit time_tgeschrieben und verwendet