Am 03:14:08 Uhr Greenwich Mean Time (GMT, auch koordinierte Weltzeit genannt), am 19. Januar 2038 (das ist ein Dienstag), geht die Welt unter. Nun, nicht im biblischen Sinne der Offenbarung des Johannes. Was jedoch passieren wird, ist, dass der Wert für die Zeit in 32-Bit-basierten Unix-Betriebssystemen wie Linux und älteren Versionen von macOS nicht mehr ausreicht und die Zeit mit negativen Zahlen zu zählen beginnt. Das ist nicht gut. Wir können davon ausgehen, dass 32-Bit-Computer, auf denen diese Betriebssysteme laufen, Anfälle bekommen. Glücklicherweise hatten die Linux-Entwickler bereits eine Lösung parat.
Das Problem beginnt damit, wie Unix die Zeit zählt. Unix und seine Verwandten – Linux, macOS und andere POSIX-kompatible Betriebssysteme – datieren den Beginn der Zeit auf die Epoche: 00:00:00 GMT am 1. Januar 1970. Die Unix-Familie misst die Zeit anhand der Anzahl der Sekunden seit der Epoche.
So weit, so gut. Aber da Unix und die Unix-Familie ursprünglich 32-Bit-Betriebssysteme waren, wird der Wert der Zeit als eine einzelne vorzeichenbehaftete 32-Bit-Ganzzahl gespeichert. Das sind viele Sekunden, aber genau wie beim Y2K-Bug im letzten Jahrhundert ist das nicht genug.
Linux-Entwickler haben dies schon seit Jahrzehnten kommen sehen. Deshalb haben der Linux-Kernel-Entwickler Arnd Bergmann und andere an einer Reparatur gearbeitet. Diese Korrekturen sind nun im kommenden Linux-5.6-Kernel enthalten. Bergmann erklärte: „Linux-5.6, oder mein Backport der Patches für 5.4, sollte die erste Version sein, die als Basis für ein 32-Bit-System dienen kann, das für den Betrieb über das Jahr 2038 hinaus ausgelegt ist.“
Es gibt einige Vorbehalte:
- Der gesamte Benutzerbereich muss mit einem 64-Bit time_t kompiliert werden, was in den kommenden musl-1.2 und glibc-2.32 unterstützt werden, zusammen mit installierten Kernel-Headern von Linux-5.6 oder höher.
- Anwendungen, die die Systemaufruf-Schnittstellen direkt verwenden, müssen portiert werden, um die in Linux-5.1 hinzugefügten time64-Syscalls anstelle der bestehenden Systemaufrufe zu verwenden.
- Anwendungen, die eine private Kopie der uapi-Headerdateien des Kernels oder deren Inhalte verwenden, müssen möglicherweise auf die Linux-5.6-Version aktualisiert werden.
- Ein paar verbleibende Schnittstellen können nicht so geändert werden, dass sie eine 64-Bit time_t auf kompatible Weise übergeben, so dass sie so konfiguriert werden müssen, dass sie CLOCK_MONOTONIC-Zeiten verwenden.
- Alle Epoch-Probleme, die auf 64-Bit-Maschinen auftreten, gelten auch für 32-Bit-Maschinen. Dies betrifft insbesondere Dateisysteme mit Zeitstempeln auf der Festplatte, die vorzeichenbehaftete 32-Bit-Sekunden verwenden: ext4 mit kleinen Inodes im Stil von ext3, ext2, xfs (wird bald behoben) und ufs.
Kurz gesagt, es gibt eine Menge Aufräumarbeit zu tun, selbst nachdem das Kernproblem behoben wurde.
MacOS hat sich seit über einem Jahrzehnt von 32-Bit-Software entfernt. Aber erst mit der späten 2019er Version von macOS Catalina hat Apple 32-Bit-Apps den Laufpass gegeben.
Nun fragen Sie sich vielleicht – da wir heutzutage alle 64-Bit-Computer verwenden – warum ist das überhaupt ein Thema. Nun, es ist folgendermaßen. Erstens laufen viele eingebettete Systeme und Geräte des Internets der Dinge (IoT) noch mit 32-Bit-Betriebssystemen. In der Tat werden bis 2038 wahrscheinlich immer noch neue 32-Bit-Geräte auf den Markt kommen.
Wir wissen auch, dass Systeme, von denen man annehmen könnte, dass sie in 18 Jahren auf der Müllhalde landen, dank des Y2K-Fehlers, der 2020 wieder auftaucht, immer noch am Leben sind – und sich schlecht verhalten, wenn die Epoche kommt.
Aber sehen Sie es mal so: Nachdem wir das behoben haben, müssen wir uns keine Sorgen mehr darüber machen, dass 64-Bit-Linux bis Sonntag, den 4. Dezember 29.227.702.659, 15:30:08 GMT, keine Sekunden mehr hat. Ich persönlich werde mir darüber keine Sorgen machen.
Verwandte Geschichten:
- Der Y2K-Bug ist zurück und bereitet Entwicklern wieder Kopfzerbrechen
- Südkoreas Regierung erforscht den Wechsel von Windows zu Linux-Desktop
- Fieser Linux- und macOS-sudo-Bug gefunden und behoben