Pünktlich zum Jahreswechsel machte Microsofts mobiler Multimedia-Player "Zune" die Grätsche. Betroffen war die 30 GByte Variante des Players. Die fror beim Starten ein und nichts ging mehr.
Die Ursache wurde recht schnell bekannt: die Player-Software verschluckte sich an der Tatsache, dass 2008 ein Schaltjahr war. Die Problemlösung war immerhin simpel: einfach abwarten, bis der Player das Jahr 2009 erkannt hat - dann funktionierte er automatisch wieder. Nach dem Zune-Ausfall wurde viel spekuliert, wie das passieren konnte.
Zunächst wurde ermittelt, dass nicht Microsoft selbst Schuld am Ausfall der Player trägt, sondern ein Treiber beziehungsweise Programmcode eines Drittherstellers verantwortlich ist. Konkret ging es um einen Baustein im Player, die eine Echtzeituhr beinhaltet, die falsch ausgewertet wurde. Der PC-Experte Bryant Zadegan hat das Problem jetzt gründlich analysiert und hat in seinem Blog erklärt, wie es exakt zustande kam.
Bryant hat dazu den Programmcode des "Treibers" studiert (siehe hier). Erschreckendes Ergebnis der Analyse: schuld ist ein primitiver Programmierfehler, eine sogenannte "unendliche Schleife". An der Stelle im Code, wo das Datum berechnet wird, kann die Situation auftreten (eben bei Schaltjahren), dass eine Routine endlos abläuft, weil keine Abbruch-Bedingung zustande kommt.
Aus Sicht von Bryant Zadegan ist so eine "endlose Schleife" eine Schlamperei bei der Qualitätssicherung, die nicht passieren darf. Im Fall einer Schleife muss ein Entwickler stets peinlichst genau alle Abbruch-Bedingungen überprüfen, sicherstellen, dass kein Fall auftritt, bei dem die Schleife niemals beendet wird.
Der verbockte Teil des Programmcodes ist recht simpel, auch Programmier-Einsteiger können den Fehler leicht verstehen. Im Blog von Zadegan werden der Code und die simple Lösung des Problems detailliert beschrieben: A lesson on infinite loops.