# Darwin (Programmierspiel)

Darwin wurde im August 1961 von Victor A. Vyssotsky, Robert Morris Sr., und M. Douglas McIlroy an den Bell Labs auf einem IBM-7090-Großrechner entwickelt und gilt als erstes Programmierspiel. Es wurde nur einige Wochen gespielt, bevor Morris ein „ultimatives“ Programm entwickelte, das nicht besiegt werden konnte. Die Originalversion von Darwin ist nicht mehr erhalten. Später erschienen Varianten für IBM/360-Systeme. Aus den 80er Jahren existiert nur noch eine Neuimplementierung von G. A. Edgar für Zilog Z80 CP/M-Systeme, auch als Kompilat für den Mac. Das Spiel Core War von 1984 greift die Spielidee von Darwin auf und setzt sie mit einer virtuellen Maschine um.

## Beschreibung

Das Spiel bestand aus einem Schiedsrichterprogramm („umpire“) und der Arena, einem Bereich des Hauptspeichers, in den zwei oder mehrere kleine, von den Spielenden geschriebene Programme geladen wurden. Die Programme waren in 7090-Assembler geschrieben und konnten drei Bibliotheksfunktionen des Schiedsrichterprogramms nutzen:
* probe: Sondieren einer Speicherzelle der Arena zur Feststellung, ob und ggf. welches Programm dort geladen ist.
* claim: Reservieren eines Speicherbereichs als Vorbereitung für eine Replikation.
* kill: Töten eines (gegnerischen) Programms.
Das Spiel endete nach einer zuvor festgelegten Spielzeit oder wenn nur noch Kopien eines Programms vorhanden waren. Gewinner war der Spieler mit den meisten Kopien.
Bis zu zwanzig Speicherzellen eines Programms konnten als geschützt markiert werden. Falls eine dieser Speicherzellen von einem anderen Programm sondiert wurde, ging der Kontrollfluss sofort an das sondierte Programm über. Dieses Programm wurde dann weiter ausgeführt, bis es wiederum eine geschützte Speicherzelle sondierte, und so weiter.
Die Programme waren für ihre Replikation selbst verantwortlich, durften jedoch ohne Erlaubnis des Schiedsrichterprogramms keine Speicherzellen außerhalb des reservierten Speicherbereichs verändern. Die Programme wurden nicht in einer virtuellen Umgebung, sondern direkt auf dem Computer ausgeführt, so dass Regelverstöße technisch nicht verhindert werden konnten. Um Fairplay sicherzustellen und um voneinander zu lernen, machten die Spieler stattdessen die Quelltexte ihrer Programme wechselseitig verfügbar.
Das kleinste Programm, das sich replizieren, Gegner finden und töten konnte, bestand aus etwa dreißig Befehlen. Ein kürzeres Programm von McIlroy war praktisch unsterblich, da sein Quelltext komplett in den geschützten Bereich von 20 Speicherzellen passte. Es konnte Gegner finden und töten, sich aber nicht reproduzieren.
Das ultimative Killerprogramm, entwickelt von Morris, bestand aus 44 Befehlen und verwendete eine adaptive Strategie. Nach der erfolgreichen Lokalisierung eines freien Speicherbereichs sondierte es eine Zelle mit einem Offset knapp davor mit dem Ziel, das dortige Programm zu töten. Im Erfolgsfall merkte es sich den Offset und verwendete sie für nachfolgende Entdeckungen. Falls es stattdessen eine geschützte Zelle traf, verwendete es beim nächsten Aufruf einen anderen Offset. Replikationen wurden mit dem erfolgreichen Offset initialisiert. Auf diese Weise konnte Morris’ Programm in verschiedene Varianten mutieren, von denen jede auf die Eliminierung eines bestimmten Gegners angepasst war.