Die Jahreszahl wechselt von 2009 auf 2010 und Computer spielen verrückt. Man kann kein Geld mehr abheben, normale Nachrichten werden fälschlich als Spam erkannt, SMS stammen plötzlich aus dem Jahr 2016, Sicherheitsupdates funktionieren nicht, Computerkassen stellen auf das Jahr 2016 um, …

Eine lange Liste geht durch die Nachrichten. Nicht jeder ist von allem betroffen. Und nicht jedes Problem hat die selbe Ursache.

2010 ist spammig

False-Positives bei Spam gründen meistens in der Verwendung des Spam-Filters Spamassasin. Der gewichtet verschiedene Anzeichen für typische Spamnachrichten. Für jedes Anzeichen gibt es eine Regel mit einer Punktzahl. Ist diese Punktzahl überschritten, landet die E-Mail im Spam-Ordner. Spammer benutzen manchmal gerne ein Absendedatum in der Zukunft, damit sie bei den neuen E-Mails zuerst einsortiert werden. Eine veraltete Filterregel von Spamassassin hat die letzten Jahre gut damit gefahren, alles ab 2010 eine böse Absicht zu unterstellen. Peinlich, peinlich.

2016

In der obigen Auflistung fällt das Jahr 2016 auf. Warum meinen manche Systeme es wäre schon 2016?

Beim alten Jahr-2000-Problem war eine der Ursachen die Verwendung von nur 2 Ziffern für die Speicherung von Jahreszahlen. 1984 wurde nur als 84 gespeichert. Das spiegelt übrigens auch die verbreiteten Datums-Schreibweisen wider, die man weltweit einsetzt. Den 3. September 1984 schreibt man u. A. 03.09.84, 3.9.84, 3/9/84, 9/3/84, …

Beim Wechsel von 1999 auf 2000 musste also eine Lösung gefunden werden den Wechsel von 99 auf 00 zu verkraften. Die beste Lösung hat auf 4 Stellen erweitert. Ein paar Lösungen haben nur um 1 Stelle als Jahrhundertkennzeichen erweitert. Andere benutzen ein Fenster. Wenn heute jemand 06.01.10 schreibt, ist es wahrscheinlich, dass 2010 gemeint ist und nicht 1910 oder 1810. So interpretieren einige Systeme alles von 00 bis XX als Jahreszahl aus diesem Jahrhundert, alles ab XX bis 99 als Jahreszahl aus dem letzten Jahrhundert. Dabei ist das XX unterschiedlich. Je kleiner, desto früher wird uns dieses Problem auch in den Hintern beißen.

Zurück zu 2016: Man hat die alten Fehler wiederholt. Vermutlich weil sich die aktuelle Datumsschreibweise nach ISO 8601 nicht durchgesetzt hat, sind die Denkweisen immer noch falsch verdrahtet. Statt den heutigen Tag 2010-01-06 zu schreiben, verwendet man weiterhin veraltete Schreibweisen mit 2-stelligem Jahr.

So hat man sich nichts dabei gedacht, nur 1 Byte für die Jahreszahl zu verwenden. Laut aktueller Definition von Byte (ja, war früher anders), besteht 1 Byte aus 8 Bits. Das ist genug Zahlen von 0 bis 255 zu speichern. Es gibt aber auch Kodierungen wie BCD, bei denen man je Halb-Byte (4 Bit) pro dezimaler Ziffer aufwendet. Die 4 Bits eines Halb-Bytes könnten Zahlen von 0 bis 15 speichern. In BCD benutzt man aber nur 0 bis 9. Ein solches Halb-Byte ist also wie eine dezimale Ziffer, wie wir sie auch per Hand schreiben.

Von der Jahreszahl 2009 wird nur 09 gespeichert. 0 im ersten Halb-Byte und 9 im zweiten Halb-Byte:

binär 0000 1001 = BCD 09 = dezimal 9


Und im Jahr 2010:

binär 0001 0000 = BCD 10 = dezimal 16


Ha! Da ist die 16! Und da ist auch schon die Ursache.

Die Programmierer haben nicht die Spezifikationen der Systeme gelesen, die sagten »Jahreszahl 2-stellig, Kodierung BCD«. Das Bitmuster einer BCD-Zahl und einer binär kodierten Zahl ist von 0 bis 9 gleich. Das ging 10 Jahre gut: 2000, 2001, 2002, …, 2009.

Und vor ein paar Tagen hat es dann gekracht. Nach der 9 kam keine 10, sondern die 16.


Frohes Jahr 2010!