Scheitert die Linux-Uhr am 19. Januar 2038 um 3:14:08?
23
Ich bin etwas besorgt darüber. Es heißt das "Jahr-2038-Problem". Ist der Linux-Kernel oder Ubuntu bereit, Datumsangaben nach diesem Datum, Stand 12.04, zu verarbeiten?
Haben Sie versucht, Ihre Uhr auf den 19. Januar 2038, 3:14:07 Uhr einzustellen und eine Sekunde zu warten?
Gertvdijk
2
Angenommen, dieses Problem besteht und ist noch nicht behoben. 12.04 wird nicht für immer unterstützt, so dass Sie und alle anderen Personen auf einer aktualisierten Distribution sind, bis dies geschieht, da es viele Jahre zwischen ihnen gibt. Die Aktualisierung ist einfach. Eines dieser Updates wird mit Sicherheit einen Fix enthalten. Es gibt also keinen Grund zur Sorge, aber dies ist in der Tat eine interessante Frage.
24.
3
Der Fehler wurde bereits behoben.
ThePiercingPrince
Die Systemuhr funktioniert nicht (auf einem relativ neuen Kernel sowieso nicht); Einige Datenstrukturen (und die Programme, die sie verwenden) weisen möglicherweise ein anormales Verhalten auf. Meiner Meinung nach wird dies ein Problem bei eingebetteten Geräten sein - auf diesen wird mit sehr viel geringerer Wahrscheinlichkeit aktueller Code ausgeführt.
Piskvor
1
@hmayag: Ich dachte nicht an "Toaster", eher an "Ampelsteuerung". Diese Dinge sind ein wenig robuster als Consumer-Elektronik, und dass die Lebensdauer leicht überschreiten könnte (mit teilweise Ersatz, aber möglicherweise ohne Upgrades) - IIRC gab es einige Probleme mit solchen 1980er Jahren Elektronik kurz nach Y2K.
Piskvor
Antworten:
13
Nein, es wird nicht scheitern. Im schlimmsten Fall funktioniert es aus Sicht eines Programmierers wie erwartet: Es wird auf das Datum 1901-12-13 20:45:52 zurückgesetzt:
In diesem Fall werden Sie Ihre aktuellen Distributionen erst dann aktualisieren. "Das Aktualisieren ist einfach. Eines dieser Updates wird mit Sicherheit einen Fix enthalten ", sagte Chocobai .
Ich erinnere mich, dass es vor 2000 bei 16-Bit-Rechnern dasselbe Problem / dieselbe Frage gab und es am Ende keine Probleme gab.
Eine Lösung von Wikipedia:
Die meisten auf 64-Bit-Hardware ausgelegten Betriebssysteme verwenden bereits signierte 64-Bit- time_tGanzzahlen. Die Verwendung eines vorzeichenbehafteten 64-Bit-Werts führt zu einem neuen Umlaufdatum, das mehr als das Zwanzigfache des geschätzten Alters des Universums beträgt: in ungefähr 292 Milliarden Jahren, am Sonntag, dem 4. Dezember, um 15:30:08 Uhr, 292.277.026.596 Uhr. Die Möglichkeit, Berechnungen für Daten durchzuführen, wird durch die Tatsache begrenzt, dasstm_yearVerwendet einen vorzeichenbehafteten 32-Bit-Int-Wert ab 1900 für das Jahr. Dies begrenzt das Jahr auf ein Maximum von 2.147.485.547 (2.147.483.647 + 1900). Während dies das Problem beim Ausführen von Programmen löst, löst es nicht das Problem des Speicherns von Datumswerten in Binärdatendateien, von denen viele starre Speicherformate verwenden. Es behebt auch nicht das Problem für 32-Bit-Programme, die unter Kompatibilitätsebenen ausgeführt werden, und möglicherweise nicht das Problem für Programme, die Zeitwerte falsch in Variablen eines anderen Typs als speichern time_t.
Ich benutze Ubuntu 13.04 auf 64-Bit und aus Neugier habe ich die Zeit manuell auf 2038-01-19 03:13:00 geändert. Nach 03:14:08 war nichts passiert:
An diesem Problem besteht also kein Grund zur Sorge.
Wenn es zurückgesetzt wird, schlägt es fehl, weil mit "nicht bestanden" meine ich "nicht oder falsch arbeiten".
ThePiercingPrince
1
@LinuxDistance Dies geschieht aus Ihrer Sicht. Aus Sicht eines Programmierers funktioniert es jedoch wie erwartet: Es wird zurückgesetzt . So war es auch mit dem Ende des Mayakalenders: Die Welt scheiterte nicht daran.
Radu Rădeanu
10
Ich stimme dir nicht zu? aus der Sicht eines Programmierers ist eine Uhr nicht zurückgesetzt soll, so es wird scheitern
Nanne
3
Diese Diskussion in den Kommentaren ist imo sinnlos. Die Frage ist "Ist der Linux-Kernel oder Ubuntu bereit, Daten danach zu verarbeiten?". Nun, es ist nicht in der Lage, solche Daten zu verarbeiten, daher scheitert es im Kontext dieser Frage.
gertvdijk
2
@gertvdijk "Ist der" aktuelle / aktuelle "Linux-Kernel oder Ubuntu bereit, Daten danach zu verarbeiten?"
Radu Rădeanu
7
Mithilfe des folgenden Perl-Skripts können Sie überprüfen, ob die Uhrzeit Ihres Computers abstürzt:
#!/usr/bin/perl
use POSIX;
$ENV{'TZ'} = "GMT";
for ($clock = 2147483641; $clock < 2147483651; $clock++) {
print ctime($clock);
}
Wenn es Ihrem Computer gut geht, erhalten Sie Folgendes:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038 <-- Last second in 32-bit Unix systems
Tue Jan 19 03:14:08 2038
Tue Jan 19 03:14:09 2038
Tue Jan 19 03:14:10 2038
Wenn Ihr Computer so ist wie ich, wird er sich wie folgt herumschlagen:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Das könnte auch so sein:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Ich denke, Sie testen hier Perl und nicht das echte Betriebssystem im Kern. Oder bist du mit dem Gebrauch von ctime?
Gertvdijk
@gertvdijk Nun, es gibt die erste Ausgabe auf gepatchten Computern, und mein Ubuntu-Laptop gibt die zweite, während die dritte von meinem Debian-Server stammt. Ich habe den Code eigentlich nicht geschrieben, er ist überall im Internet in genau der gleichen Form.
SkylarMT
2
Bestätigt. Wenn Sie eine 64-Bit-Maschine haben, ist dies in Ordnung. Außerdem ... wer von uns wird im Jahr 2038 noch 32-Bit-Maschinen haben?
JRG
1
Ich habe danach gesucht, um einem Kollegen das Problem von 2038 zu veranschaulichen, und 2 Jahre nach der obigen Bemerkung habe ich kaum Zweifel, dass wir 2038 32-Bit-Maschinen haben werden, die ausfallen werden. Ach, jugendlicher Optimismus.
Juli,
@ James, vielleicht einige unwissentlich. Es wird wahrscheinlich 32-Bit-Linux in IoT-Geräten geben, die nicht gepatcht sind. Ende der Welt? Irgendwelche Probleme an manchen Orten? Bestimmt.
Prof. Falken unterstützt Monica am
3
Ich schrieb und veröffentlichte 1996 einen kurzen Artikel darüber. Dies beinhaltete ein kurzes C-Programm, um dies zu demonstrieren. Ich hatte auch E-Mails mit David Mills über ähnliche Probleme mit NTP, dem Network Time Protocol. Auf meinem Ubuntu 14.04 64-Bit-Laptop zeigte der Perl-Code keine Einschränkung, sodass die zugrunde liegenden 64-Bit-Bibliotheken geändert worden sein müssen.
Wenn ich jedoch meinen vor langer Zeit erstellten Testcode ausführe, werden die Zeitumbrüche auf die UNIX-Epoche zurückgeführt. Mit dem 32-Bit-Code aus der Vergangenheit ist also nicht alles in Ordnung.
Mein Artikel von 1996, The UNIX time, läuft 2038 aus! befindet sich seit etwa 2000 auf meiner Website. Eine Variante dieses Titels mit dem Titel "UNIX Time" wurde 1998 in der ISBN 0136465064 "Best Practices for Y2K Millennium Computing" (Jahr 2000) veröffentlicht.
64-Bit-Linux ist bereit, zumindest wenn Sie über die Kern-OS-Schnittstellen sprechen (einzelne Anwendungen können es natürlich noch vermasseln). time_t wird traditionell als Alias für "long" definiert und "long" unter 64-Bit-Linux ist 64-Bit.
Die Situation für 32-Bit-Linux (und die Kompatibilitätsebene für 32-Bit-Binärdateien unter 64-Bit-Linux) ist weitaus weniger rosig. Es ist kaputt und es zu reparieren, ohne alle existierenden Binärdateien zu beschädigen, ist keine leichte Aufgabe. Eine ganze Reihe von APIs verwenden time_t und in vielen Fällen ist es als Teil von Datenstrukturen eingebettet. Daher müssen nicht nur die APIs dupliziert werden, sondern auch die Datenstrukturen, mit denen sie arbeiten.
Selbst wenn eine gewisse Abwärtskompatibilität besteht, müssen alle Binärdateien, die die richtige Zeit erhalten möchten, neu erstellt werden, um die neuen 64-Bit-Zeitschnittstellen zu verwenden.
Antworten:
Nein, es wird nicht scheitern. Im schlimmsten Fall funktioniert es aus Sicht eines Programmierers wie erwartet: Es wird auf das Datum 1901-12-13 20:45:52 zurückgesetzt:
In diesem Fall werden Sie Ihre aktuellen Distributionen erst dann aktualisieren. "Das Aktualisieren ist einfach. Eines dieser Updates wird mit Sicherheit einen Fix enthalten ", sagte Chocobai .
Ich erinnere mich, dass es vor 2000 bei 16-Bit-Rechnern dasselbe Problem / dieselbe Frage gab und es am Ende keine Probleme gab.
Eine Lösung von Wikipedia:
Ich benutze Ubuntu 13.04 auf 64-Bit und aus Neugier habe ich die Zeit manuell auf 2038-01-19 03:13:00 geändert. Nach 03:14:08 war nichts passiert:
An diesem Problem besteht also kein Grund zur Sorge.
Mehr über:
quelle
Mithilfe des folgenden Perl-Skripts können Sie überprüfen, ob die Uhrzeit Ihres Computers abstürzt:
Wenn es Ihrem Computer gut geht, erhalten Sie Folgendes:
Wenn Ihr Computer so ist wie ich, wird er sich wie folgt herumschlagen:
Das könnte auch so sein:
quelle
ctime
?Ich schrieb und veröffentlichte 1996 einen kurzen Artikel darüber. Dies beinhaltete ein kurzes C-Programm, um dies zu demonstrieren. Ich hatte auch E-Mails mit David Mills über ähnliche Probleme mit NTP, dem Network Time Protocol. Auf meinem Ubuntu 14.04 64-Bit-Laptop zeigte der Perl-Code keine Einschränkung, sodass die zugrunde liegenden 64-Bit-Bibliotheken geändert worden sein müssen.
Wenn ich jedoch meinen vor langer Zeit erstellten Testcode ausführe, werden die Zeitumbrüche auf die UNIX-Epoche zurückgeführt. Mit dem 32-Bit-Code aus der Vergangenheit ist also nicht alles in Ordnung.
Mein Artikel von 1996, The UNIX time, läuft 2038 aus! befindet sich seit etwa 2000 auf meiner Website. Eine Variante dieses Titels mit dem Titel "UNIX Time" wurde 1998 in der ISBN 0136465064 "Best Practices for Y2K Millennium Computing" (Jahr 2000) veröffentlicht.
quelle
64-Bit-Linux ist bereit, zumindest wenn Sie über die Kern-OS-Schnittstellen sprechen (einzelne Anwendungen können es natürlich noch vermasseln). time_t wird traditionell als Alias für "long" definiert und "long" unter 64-Bit-Linux ist 64-Bit.
Die Situation für 32-Bit-Linux (und die Kompatibilitätsebene für 32-Bit-Binärdateien unter 64-Bit-Linux) ist weitaus weniger rosig. Es ist kaputt und es zu reparieren, ohne alle existierenden Binärdateien zu beschädigen, ist keine leichte Aufgabe. Eine ganze Reihe von APIs verwenden time_t und in vielen Fällen ist es als Teil von Datenstrukturen eingebettet. Daher müssen nicht nur die APIs dupliziert werden, sondern auch die Datenstrukturen, mit denen sie arbeiten.
Selbst wenn eine gewisse Abwärtskompatibilität besteht, müssen alle Binärdateien, die die richtige Zeit erhalten möchten, neu erstellt werden, um die neuen 64-Bit-Zeitschnittstellen zu verwenden.
Es wurden einige Arbeiten durchgeführt (siehe zum Beispiel https://lwn.net/Articles/643234/ und http://www.sourceware.org/ml/libc-alpha/2015-10/msg00893.html ), aber leider sind noch weit von einer vollständigen Lösung entfernt. Es ist nicht klar, ob es jemals 32-Bit-Allzweckdistributionen geben wird, die Y2K38-sicher sind.
quelle