Hunderte Millionen Nutzer weltweit glaubten fest daran, dass das bei der ersten Anmeldung in Windows XP zugewiesene Benutzerbild dem reinen Zufall entsprang. Am 9. September 2026 veröffentlichte der langjährige Microsoft-Entwickler Raymond Chen einen Codeausschnitt und lüftete damit eine Systemlogik, die ein Vierteljahrhundert im Verborgenen lag. Das vermeintlich willkürliche Startbild war keineswegs das Ergebnis eines blinden Losentscheids, sondern das Resultat einer exakten deterministischen Berechnung.
Ein Tweet entfacht digitale Code-Archäologie
Am 11. Dezember 2025 stellte ein Nutzer namens Xeno auf Twitter eine konkrete Frage: Hatte jemals jemand versucht, den Zufallsgenerator zu entschlüsseln, mit dem Windows XP bei der ersten Kontoerstellung das Profilbild auswählte? Es war ein Rätsel, das die Entwickler-Community seit über zwei Jahrzehnten beschäftigte. Zwar hatte Raymond Chen bereits im April 2004 in einem Blogbeitrag beiläufig erwähnt, dass XP die Standardbilder nach dem Zufallsprinzip auswähle, doch das genügte neugierigen Programmierern längst nicht. Sie wollten keine vagen Zusammenfassungen, sondern den tatsächlichen Code und die mathematische Herleitung des Algorithmus sehen.
Schließlich legte Raymond Chen die genaue Codelogik in seinem Blog The Old New Thing offen. Der Beitrag stürmte auf Hacker News mit 333 Punkten und 162 Kommentaren an die Spitze. Die Leser stellten überrascht fest: Ob man damals eine Gitarre, eine Blume, ein Schachspiel oder eine Ente auf dem Bildschirm vorfand – das Bild wurde keineswegs blind aus einer Blackbox gezogen. Dahinter stand ein strikt durchdachter mathematischer Ablauf.
Der Startwert: Gebunden an Boot-Millisekunden
In Windows XP lagen diese Standard-Benutzerbilder tief in der Verzeichnisstruktur des Betriebssystems verborgen: %ALLUSERSPROFILE%\Application Data\Microsoft\User Account Pictures\Default Pictures. Bei jeder Einrichtung eines neuen Benutzerkontos musste das System eine dieser Bilddateien auswählen.
Als Kernkomponente diente der Windows-interne Pseudozufallszahlengenerator RtlRandomEx. Jeder Pseudozufallsalgorithmus benötigt einen initialen Startwert (Seed). Anstatt auf komplexe Hardware-Entropiequellen zurückzugreifen, übergaben die Microsoft-Ingenieure schlicht den Rückgabewert der Funktion GetTickCount(). Diese API-Funktion liefert die exakte Anzahl der Millisekunden zurück, die seit dem Start des Systems vergangen sind.
Pseudozufallsalgorithmen basieren auf festen Eingabewerten. Wenn man die genaue Millisekundenzahl des Bootvorgangs kannte, ließ sich mathematisch exakt vorausberechnen, welches Bild vergeben werden würde. Was dem Anwender wie reine Laune des Schicksals erschien, war auf Code-Ebene ein vollkommen deterministischer Prozess.
Reservoir-Sampling: Traversierung auf einen einzigen Durchlauf reduziert
Muss ein Verzeichnis mit unbekannter Datei-Anzahl zufällig beprobt werden, greift man im Lehrbuch meist zum Two-Pass-Verfahren: Zunächst wird das gesamte Verzeichnis durchlaufen, um die Gesamtzahl n der Dateien zu ermitteln; anschließend wird ein Zufallsindex zwischen 1 und n generiert, woraufhin ein zweiter Durchlauf erfolgt, um die Datei an dieser Position abzurufen. Das ist der klassische naive Ansatz.
Die Microsoft-Ingenieure wählten einen weitaus eleganteren Weg: einen Single-Pass-Algorithmus. Während des Durchsuchens des Verzeichnisses verwaltet das System lediglich zwei Variablen: einen Zähler count und den aktuellen Gewinner winner. Bei jedem angetroffenen Eintrag wird count um eins erhöht. Das System entscheidet dann mit einer Wahrscheinlichkeit von 1/count, ob winner durch das aktuell gelesene Bild ersetzt wird. Ist das gesamte Verzeichnis durchlaufen, stellt der im Speicher verbliebene winner das Endergebnis dar.
Abbildung: Code des Single-Pass-Algorithmus selectRandomFromIterator. Quelle: The Old New Thing
Dabei handelt es sich um den klassischen Spezialfall des Reservoir-Samplings mit k = 1. In einer Menge von n Elementen besitzt das letzte Element eine exakte Auswahlwahrscheinlichkeit von 1/n. Wird es nicht ausgewählt, reduziert sich das Problem rekursiv auf eine gleichmäßige Auswahl unter den vorherigen n - 1 Elementen. Unabhängig davon, wie viele Dateien sich im Verzeichnis befinden: Jedes Bild besitzt am Ende die exakt gleiche Wahrscheinlichkeit von 1/n, als Gewinner hervorzugehen.
Mathematische Eleganz trifft auf Dateisystem-Grenzen
Warum verzichtete man auf das intuitive Two-Pass-Verfahren und setzte stattdessen auf Reservoir-Sampling? Die Antwort liegt in den Flaschenhälsen des Betriebssystems. Während der Kontoerstellung verursachen Dateisystemaufrufe ungleich höhere Latenzen als reine CPU-Berechnungen. Frühere mechanische Festplatten litten unter massiven Performance-Einbußen, wenn sie viele kleine Dateien wiederholt im Verzeichnisbaum abtasten mussten.
Ein einzelner Durchlauf reduzierte den I/O-Aufwand des Dateisystems drastisch. Zudem blieb der Ablauf selbst dann fehlerfrei, wenn sich die Dateien im Verzeichnis während der Ausführung änderten.
Das naive Zwei-Durchlauf-Verfahren setzt voraus, dass der Verzeichnisinhalt zwischen der ersten und der zweiten Iteration absolut statisch bleibt. Hätte ein anderes Programm genau in diesem Zeitfenster eine Datei hinzugefügt oder gelöscht, hätte ein ungültiger Indexzugriff oder ein Datei-nicht-gefunden-Fehler das System zum Absturz bringen können. Das Single-Pass-Verfahren eliminierte diese Race Condition vollständig.
Hartes Limit: Stopp nach genau 100 Bildern
Mathematisch betrachtet funktioniert das Reservoir-Sampling auch bei beliebig großen Datenströmen fehlerfrei: Mit steigendem Zähler sinkt die Ersetzungswahrscheinlichkeit proportional ab. Betriebssystem-Code für Endanwender darf sich jedoch niemals auf theoretische Unendlichkeit verlassen. Die Entwickler bauten daher eine pragmatische Notbremse fest in die Routine ein.
Sobald der Algorithmus 100 Bilder aus dem Verzeichnis eingelesen hat, bricht er die Schleife unverzüglich ab und gibt den bis dahin ermittelten Gewinner zurück.
Abbildung: Standardmäßige Luna-Benutzeroberfläche von Windows XP. Quelle: Wikipedia
Systemingenieure der Praxis unterwerfen sich keinem mathematischen Dogmatismus. Die Obergrenze von 100 Dateien sollte verhindern, dass ein Verzeichnis mit hunderttausenden Bildern den Systemstart lahmlegt. Während mathematische Modelle eine gleichmäßige Verteilung über unendliche Mengen fordern, gilt in der Industrie ein oberstes Gebot: Ein System darf unter keinen Umständen einfrieren.
Die Illusion des Zufalls, präzise kalkuliert
Blickt man auf den ursprünglichen Tweet zurück, erinnern sich Millionen Menschen an das Gefühl, Windows XP zwischen 2001 und 2014 zum ersten Mal gestartet zu haben. Die Anzeige eines Fußballs, einer Gummiente oder eines Frosches wirkte wie eine charmante, willkürliche Begrüßung des Computers. Die feinen Schwankungen der Boot-Dauer im Millisekundenbereich waren für das menschliche Auge unsichtbar – und wurden so als vollkommene Zufälligkeit wahrgenommen.
Raymond Chens Veröffentlichung löste nicht nur ein altes Rätsel, sondern zeichnete auch ein faszinierendes Porträt einer vergangenen Epoche des Software-Engineerings. Damals war der Arbeitsspeicher knapp und die Festplatten langsam; jede Codezeile musste sparsam kalkuliert und jeder Randfall defensiv abgesichert werden.
Das vor 25 Jahren zugewiesene Profilbild war kein blinder Griff in die Lostrommel. Es war das präzise Zusammenspiel aus festen Systemgrenzen und algorithmischer Effizienz, das zwei Generationen von PC-Nutzern begleitete.
Referenzen:
- The Old New Thing
- HN
- Wikipedia