Vom Millennium-Bug oder dem Jahr-2000-Problem haben sicherlich viele schon einmal gehört; das Jahr-2038-Problem dagegen ist aber vermutlich nicht ganz so verbreitet. Beide Probleme haben (bzw. hatten) etwas mit der Zeitdarstellung im Computer zu tun, wobei allerdings jeweils ein anderer Mechanismus Ursache des Problems ist/war. Schauen wir uns daher einmal beide Probleme im Detail an. Die Inspiration kam übrigens durch ein Numberphile-Video auf Youtube (ich kann den Kanal sehr empfehlen), welches am Ende des Artikels eingebettet ist.
Das Jahr-2000-Problem
Fangen wir mit dem Jahr-2000-Problem an, insbesondere auch, da das glücklicherweise mittlerweile erledigt ist. Der Kern des Jahr-2000-Problems – ich möchte weniger von einem Bug reden, da das Problem zusammen mit den Bedingungen für das Auftreten lange im Voraus bekannt war – war die Darstellung von Jahreszahlen in den früheren Jahren der Softwareentwicklung.
Prinzipiell lassen sich Zahlen im Computer auf 2 Arten darstellen: in ihrer binären Form (die 1310 entspricht etwa der 11012 – wir erinnern uns), oder in der Darstellung der einzelnen Positionen der Zahl durch ihre Ziffern (im Falle der 13 also “1” und “3”). Der Vorteil der Binärdarstellung ist, dass Zahlen unabhängig von ihrer Größe zur Speicherung eine feste, geringe Menge an Speicherplatz – in der Regel 1, 4 oder 8 Byte (8, 32 bzw. 64 Bit) – benötigen. Der Nachteil dagegen ist, dass in Binärform gespeicherte Zahlen nicht einfach so auf dem Bildschirm dargestellt werden können. Zur Darstellung von Zeichen müssen diese im ASCII-Format (wir erinnern uns) – oder einem erweiterten Format – abgelegt werden; hierbei wird jedes Zeichen (also jeder Buchstabe, jede Zahl, jedes Satzzeichen usw.) durch eine 1-Byte-Zahl (oder bei erweiterten Formaten entsprechend größere Zahlen) codiert. Der Buchstabe ‘A’ entspricht hierbei etwa der Zahl 65, die Ziffer ‘1’ der 49 und so weiter. Zur Darstellung der 13 werden also 2 Byte benötigt – eines für jede Ziffer.
Das eigentliche Problem dieser Art der Darstellung ist, dass oft zur Darstellung von Jahreszahlen lediglich die letzten beiden Ziffern, also etwa ’85’, verwendet wurden (Speicher war teuer damals, und man musste so viel davon sparen, wie möglich). Solange klar war, dass die ausgelassenen Ziffern für ’19’ (also das 20. Jahrhundert) standen, war alles in Ordnung. Zum Jahrtausendwechsel ergab sich aber ein Problem: die letzten beiden Ziffern der gespeicherten Jahreszahlen würden zurück auf ’00’ wechseln, ohne dass eine Information über das neue Jahrtausend (’20’ am Anfang der Zahl) in der gespeicherten Zahl enthalten wäre.
Die Folgen wären etwa gewesen, dass Berechnungen* falsch durchgeführt worden wären (00 – 85 ist ja doch etwas anderes als 2000 – 1985) oder dass Datensätze eine falsche Sortierung bekommen hätten (z.B. die ’00’er-Datensätze nach oben und die ’85’er-Sätze nach hinten bei einer Sortierung nach kleinstem Jahr); eine weitere Folge wäre gewesen, dass Datumsangaben das falsche Jahrtausend enthalten hätten, etwa ‘1900’ statt ‘2000’, da die ’19’ fest verdrahtet war und nur die letzten beiden Ziffern dynamisch gespeichert wurden.
*Mit Zahlen in der Ziffernschreibweise lässt sich natürlich nicht gut rechnen; hier ist eine vorherige Rückwandlung in eine binäre Darstellung nötig. Das Problem bleibt dabei aber natürlich bestehen, da ja keine Information über das Jahrtausend mit abgespeichert wurde.
Nun kann man sich natürlich fragen, wie es überhaupt zu diesem Problem kommen konnte – immerhin war lang genug bekannt, dass das Jahrtausend irgendwann endet und neue Ziffern für die Jahresdarstellung nötig wurden. Zudem war Speicherplatz gegen Ende des Jahrtausend auch nicht mehr so teuer, dass derart knausrig mit ihm umgegangen hätte werden müssen, wobei das nur bedingt stimmt – sogenannte eingebettete Systeme (englisch ’embedded systems’), also sehr spezialisierte, kleine Rechner, verfügen auch heutzutage über sehr wenig Speicher, dessen Nutzung genau geplant werden möchte. Viel wichtiger ist aber, dass zur Jahrtausendwende noch unglaublich viele unglaublich alte Computersysteme liefen; bei der Erstellung dieser Systeme hatte niemand damit gerechnet, dass sie so lange laufen würden, oder dass immer neue Systeme auf Basis der bestehenden entwickelt werden würden. Das Problem war also schlicht hausgemacht: das Problem wurde anfangs nicht berücksichtigt, weil niemand daran glaubte, dass es zum Problem werden würde. Da aber viele den Ausspruch “never change a running system” sehr wörtlich nehmen, gab war zur Jahrtausendwende (und auch heute noch!) viel alte Software im Einsatz, die mit der Jahrtausendwende nicht umgehen konnte.
Kommentare (24)