Was ist der Y2k38 Bug? Eine technische Erklärung.

Code-Zeilen und binäre Zahlen werden auf eine Ingenieurin projiziert zusammen mit den Schlagworten Y2k38, 208, Beoz und The Edge of Time

Einige haben vielleicht schon vom Y2k38 Bug bzw. vom Jahr 2038 Problem gehört. Was ist aber die Ursache? Wir liefern die Erklärung aus technischer Sicht.

Definition Y2k38 Bug

Ein Zählerüberlauf der Unixzeit im Jahr 2038 wird als Y2k38 Bug bezeichnet. Der Name setzt sich zusammen aus dem Numeronym für das Jahr 2038 (Y2k38) und dem Umstand, dass es sich vornehmlich um einen Softwarefehler (Bug) handelt.

Die Unixzeit

UNIX ist ein Computer Betriebssystem, welches 1969 von der Firma Bell Labs (später AT&T) entwickelt wurde. Die Unix Time wurde für dieses Betriebssystem entwickelt und ist definiert als die Anzahl Sekunden seit dem 1. Januar 1970 00:00:00 UTC. Bildlich kann man sich vorstellen, dass beim Jahreswechsel 1969/1970 ein Zähler gestartet wurde, welcher sich unaufhörlich jede Sekunde um 1 erhöht. Der Start- bzw. Nullpunkt heisst „The Epoch“. Die Unixzeit wird deshalb auch als „seconds since the Epoch“ oder „Epoch Time“ bezeichnet. Zeitpunkte vor 1970 können mit negativen Unixzeit Werten beschrieben werden. Jeder Tag wird mit 24 * 60 * 60 Sekunden gerechnet. Schaltsekunden werden nicht mitgezählt. Schaltjahre, Sommerzeit und Zeitzonen spielen keine Rolle.

Repräsentation im Speicher

Im Prinzip gibt es keine Vorgaben in welcher Form die Unixzeit im Speicher abgelegt wird. Eine Repräsentation als Zeichenkette wäre also möglich. Einen ganzzahligen, arithmetischen Datentyp zu verwenden hat aber viele Vorteile:

  • Ein Sekunden-Zähler ist sehr einfach und günstig in Hardware oder Software umsetzbar.
  • Zeiträume sind simple Differenzen von zwei Zahlenwerten.
  • Die Repräsentation der Zeit ist äusserst kompakt, was einen geringen Bedarf an Speicherplatz nach sich zieht.

Auf den meisten Systemen ist deshalb die Unix Zeit als C Datentyp time_t gespeichert. Die Grösse dieses arithmetischen Zahlentyps ist im C Standard nicht vorgegeben. Früher war time_t auf fast allen Plattformen als 32-bit signed integer implementiert.

Zählerüberlauf

Der Y2k38 Bug ist ein Zählerüberlauf. Ein „Überlaufen“ des Zählers entsteht, wenn die vorhandenen Anzahl Ziffern nicht mehr ausreicht um einen den nächsten Wert darzustellen. Computer Systeme sind grundsätzlich anfällig für Zählerüberläufe (allgemeiner auch „Arithmetische Überläufe“ genannt), da der Bereich einer Zahl endlich und meist fest definiert ist. Der Computer speichert die Zahlenwerte dabei nicht wie im Dezimalsystem mit Ziffern von 0-9, sondern nur mit den Ziffern 0 und 1. Eine Ziffernstelle in diesem Binären Zahlensystem nennt man Bit. Eine Ziffernfolge von 8 Bit nennt man Byte. Der grösste Zahlenwert, welcher mit x Bits dargestellt werden kann ist 2 hoch x minus 1. Der kleinste Zahlenwert ist dabei 0. Wenn ein Zähler also diesen Maximalwert erreicht hat und um eins erhöht wird, springt er auf den Wert 0 zurück.
Minus Zeichen existieren nicht im Binären Zahlensystem. Negative Zahlen können im sogenannten Zweierkomplement dargestellt werden. Dabei gibt das erste Bit das Vorzeichen vor. Bei einem Zählerüberlauf im Zweierkomplement springt der Zahlenwert auf den kleinsten Wert zurück (nicht auf 0, was ja in der Mitte des Zahlenbereiches liegen würde).

Wann überläuft die Unixzeit?

Wie bereits ausgeführt wird die Unixzeit oft in einer 32-Bit-Ganzzahl mit Vorzeichen gespeichert. Das bedeutet, dass die späteste Zeit, die korrekt kodiert werden kann, 2^31 – 1 Sekunden nach dem Start erreicht wird. Der Startzeitpunkt, „The Epoch“ genannt, war um 00:00:00 UTC am 1. Januar 1970. Das Ende wird 2.147.483.647 (binär 01111111 11111111 11111111 11111111) Sekunden später am 19. Januar 2038 03:14:07 UTC erreicht. Der Versuch, auf die nächste Sekunde (03:14:08) zu erhöhen, führt zu einem Überlauf der Ganzzahl und setzt ihren Wert auf -(2^31), was von den Systemen als 2^31 Sekunden vor „The Epoch“ interpretiert wird (20:45:52 UTC am 13. Dezember 1901).

Wie kann die „Epochalypse“ verhindert werden?

Aus technischer Perspektive ist die Antwort einfach. Die Unixzeit muss in einem Datentyp mit einem grösseren Zahlenbereich gespeichert werden, z.B. in einer 64-bit-Ganzzahl mit Vorzeichen. Damit könnte der Zähler 292 Milliarden Jahre weiterlaufen. Der Y2k38 Bug wäre gefixt.
BEOZ Association hat erkannt, dass es sich beim Jahr 2038 Problem nicht in erster Linie um ein technisches, sondern um ein wirtschaftliches und gesellschaftliches Problem handelt. Weitere Informationen dazu stellen wir u.a. auf unserem Blog und in den Kanälen der Sozialen Medien zur Verfügung.

Nach oben scrollen