In der Informatik gibt es den laufenden Witz, dass DOOM irgendwann auf allem laufen wird. Nicht als Lob für das Spiel, sondern als Herausforderung: Der Shooter von 1993 wurde bereits dazu gebracht, auf Geldautomaten, Druckern, Schwangerschaftstests, Taschenrechnern, einem einzelnen LEGO-Stein und der Touch Bar eines MacBooks zu laufen.
Im Januar 2025 fügte ein Oberstufenschüler der Liste einen weiteren Eintrag hinzu. Er brachte DOOM innerhalb einer PDF-Datei zum Laufen.

Die Kurzfassung
Ein Oberstufenschüler kompilierte DOOM mit einer Emscripten-Version von 2020 nach asm.js und ließ es in einer PDF-Datei laufen — als Bildschirm dient je ein Formularfeld pro Bildzeile: 320×200, sechs Grautöne, rund 80 Millisekunden pro Bild. Keine Sicherheitslücke war beteiligt. Jede genutzte Funktion ist ein dokumentierter Teil der PDF-Spezifikation und arbeitet genau wie vorgesehen. Genau das ist das Interessante — und der Grund, Dokumenten einmal zehn Minuten Aufmerksamkeit zu widmen.
Es ist eine großartige Arbeit und ein sehr guter Witz. Es ist zugleich der klarste Beleg für etwas, das diese Website immer wieder vorbringt und das viele verständlicherweise schwer glauben können: Ein PDF ist kein Bild einer Seite. Es ist ein Behälter, der Code ausführen kann.
Wie es tatsächlich funktioniert
Das Projekt heißt doompdf und stammt von einem Entwickler, der sich ading2210 nennt. Der Mechanismus ist interessanter als der Stunt, und er besteht aus vier Teilen.
PDF unterstützt JavaScript. Nicht als Erweiterung oder Plug-in — es ist Teil des Formats, mit einer eigenen Standardbibliothek, und Browser setzen es in ihren eingebauten PDF-Engines um. Es existiert, damit Formulare Eingaben prüfen und interaktive Dokumente auf Klicks reagieren können. Niemand hat es für Spiele eingebaut.
Der Quellcode von DOOM ist öffentlich — die Geschichte ist allerdings genauer, als die Kurzform vermuten lässt. id Software veröffentlichte den Code am 23. Dezember 1997, jedoch unter einer Lizenz, die nur Bildungszwecke erlaubte, und es war der Code der Linux-Portierung, nicht des DOS-Originals — wegen der separaten Lizenz der Soundbibliothek DMX. Die Umstellung auf die GPL kam fast zwei Jahre später, am 3. Oktober 1999. Dieses zweite Datum ist das entscheidende: Es machte aus DOOM etwas, das man nicht nur lesen, sondern legal neu bauen durfte. Deshalb taucht das Spiel weiterhin an unwahrscheinlichen Orten auf.
Verbunden wurden beide durch einen bewusst veralteten Compiler. ading2210 nutzte Emscripten 1.39.20 — eine Version von 2020 —, weil sie asm.js statt WebAssembly erzeugt. Aktuelles Emscripten produziert WebAssembly, und ein PDF hat keine WebAssembly-Laufzeitumgebung. asm.js ist ein eingeschränkter Dialekt von gewöhnlichem JavaScript und läuft daher überall dort, wo JavaScript läuft. Der Griff zur alten Werkzeugkette war keine Nostalgie, sondern der einzige Weg hinein.
Bleibt die Anzeige, der Teil, bei dem Menschen laut auflachen. Ein PDF hat keine Zeichenfläche, keinen Framebuffer, nichts, worauf sich Pixel malen ließen. Was es hat, sind Formularfelder. Die 320×200-Ausgabe des Spiels wird deshalb als ASCII-Zeichen dargestellt — ein Textfeld pro Bildschirmzeile, in sechs Grautönen — und so schnell aktualisiert, wie sich dieser Text neu schreiben lässt, was etwa 80 Millisekunden pro Bild ergibt. Die Eingabe läuft denselben Weg: über Felder und Schaltflächen, die die PDF-Engine ohnehin beherrscht. Man spielt DOOM buchstäblich in einem ausfüllbaren Formular.
Es läuft langsam. Es ist monochrom. Es ist vollständig spielbar, steht wie der zugrunde liegende Code unter der GPL v2, und man kann es selbst in einem Chromium-Browser ausprobieren. Der Build erlaubt sogar, eine eigene WAD-Datei einzusetzen.
Dann ließ er Linux darin laufen
Wenige Wochen später veröffentlichte derselbe Entwickler linuxpdf: einen vollständigen Linux-Kernel, der innerhalb einer PDF-Datei bootet, indem der RISC-V-Emulator TinyEMU mit demselben asm.js-Trick kompiliert wurde. Der Kernel braucht 30 bis 60 Sekunden zum Starten — der Autor beziffert das auf über hundertmal langsamer als echte Hardware — und gesteuert wird er über eine virtuelle Tastatur aus PDF-Schaltflächen.
DOOM in einem Dokument ist ein Witz. Eine emulierte CPU, die in einem Dokument ein Betriebssystem startet, ist ein Argument. Irgendwo dazwischen geht es nicht mehr um DOOM.
Der Teil, der nicht lustig ist
Hier ist der Gedanke, bei dem man verweilen sollte. Nichts an doompdf ist ein Exploit. Es wurde keine Schwachstelle gefunden, nichts wurde gebrochen, keine Sicherheitslücke war beteiligt. Jede einzelne Sache, die es nutzt, ist eine dokumentierte, beabsichtigte Funktion der PDF-Spezifikation, die genau wie entworfen arbeitet.

Das heißt: Die Fähigkeit, die ein PDF einen Ego-Shooter von 1993 ausführen lässt, steckt auch in der Rechnung, die Sie morgen öffnen. Sie lauert nicht, sie ist nicht versteckt — sie ist einfach da, ungenutzt, weil die meisten Dokumente keinen Anlass haben, sie zu verwenden.
Das ist die ehrliche Fassung der Geschichte, und sie schneidet in beide Richtungen. Dieselbe Argumentation, die sagt „ein Dokument kann Code ausführen, also Vorsicht“, muss auch einräumen, wie eng die Welt dieses Codes ist.
Was ein Skript im PDF kann und was nicht
An dieser Stelle wird die meiste Berichterstattung über doompdf vage, deshalb lohnt Genauigkeit. Die Antwort hängt vollständig davon ab, womit Sie die Datei geöffnet haben — und die beiden häufigen Fälle unterscheiden sich stark.
| Fähigkeit | Browser-Anzeige (Chrome, Edge, Firefox) | Adobe Acrobat Reader |
|---|---|---|
| Skript beim Öffnen ausführen | Ja | Ja, sofern nicht deaktiviert |
| Formularfelder lesen und schreiben | Ja | Ja |
| Cookies oder Browser-Speicher lesen | Nein | Nicht zutreffend |
| Auf die umgebende HTML-Seite (DOM) zugreifen | Nein | Nicht zutreffend |
| Netzwerkanfragen stellen | Sehr begrenzt | Weiter gefasst — hier lebten Tracking-Pixel und NTLM-Leak-Tricks |
| Auf lokale Dateien zugreifen | Nein | Eingeschränkt, aber deutlich größere API-Fläche |
| Externe Programme oder Anhänge starten | Nein | Mit Rückfrage — historisch der Weg schädlicher Dokumente |
Lesen Sie diese Tabelle richtig herum. Im Browser läuft ein skriptfähiges PDF in einer kleinen, langweiligen Box — keine Cookies, kein Speicher, kein Zugriff auf die Seite ringsum. Genau deshalb ist doompdf eine Kuriosität und kein Vorfall, und deshalb ist „DOOM läuft in einem PDF“ kein Grund, Angst vor PDFs zu haben.
Interessant ist die Spalte mit dem Desktop-Reader. Er verfügt über die vollständige JavaScript-API der Spezifikation, weil er echte Geschäftsdokumente verarbeiten soll. In dieser Umgebung kann man einem Dokument sagen, es solle sich beim Öffnen melden, sich je nach Reader anders verhalten oder darum bitten, etwas zu öffnen, das es mitgebracht hat.
Drei Dinge bleiben also unabhängig vom Programm wahr, und die sollte man verinnerlichen.
- Ein PDF kann Anweisungen mitbringen, die beim Öffnen ausgeführt werden, bevor Sie irgendetwas gelesen haben.
- Ein PDF kann sich je nach öffnender Software anders verhalten — die Datei, die Sie sehen, ist nicht zwangsläufig die, die Ihre Kollegin sieht.
- Ein PDF trägt mehr, als es zeigt: Anhänge, versteckte Ebenen, Änderungsverlauf und Metadaten, die Sie nie mitschicken wollten.
Nichts davon macht PDFs im Alltag gefährlich. Sie werden diesen Monat Dutzende öffnen, und jedes einzelne wird in Ordnung sein. Es heißt aber, dass das Modell, das die meisten von uns im Kopf tragen — „es ist nur ein Dokument“ —, auf eine Weise falsch ist, die gelegentlich zählt.
Die Einstellung, die fast niemand kennt
Der Standardrat lautet „JavaScript im PDF-Reader abschalten“, und er ist gut. Für sich genommen ist er allerdings unvollständig — denn die meisten Menschen öffnen PDFs längst nicht mehr in einem PDF-Reader. Sie öffnen sie in einem Browser-Tab, und der Browser hat seinen eigenen, getrennten Schalter.
Firefox liefert PDF-Skripting aktiviert aus. Die Einstellung heißt pdfjs.enableScripting in about:config; bis Firefox 87 stand sie auf false, seit Firefox 88 auf true. Der allgemeine Schalter javascript.enabled berührt sie nicht — der PDF-Betrachter ist eine eigene Welt mit eigener Einstellung.
Chrome und Edge bieten überhaupt keinen eigenen Schalter für PDF-Skripting. Skript in einem PDF unterliegt der JavaScript-Berechtigung der Website, von der die Datei stammt; abschalten lässt sich das pro Website über die Steuerelemente in der Adressleiste oder global unter chrome://settings/content/javascript — ein deutlich gröberes Werkzeug.
Adobe Acrobat Reader hat den Schalter, den alle meinen: Voreinstellungen → JavaScript → Acrobat-JavaScript aktivieren. Dieses Häkchen lohnt sich zu entfernen, denn Acrobat ist der Reader mit der großen API, und kaum jemand nutzt im normalen Arbeitsalltag bewusst ein skriptfähiges PDF.
Praktisch heißt das: In Acrobat abschalten und den Browser in Ruhe lassen ist eine vernünftige, angemessene Entscheidung. Zu glauben, man habe es überall abgeschaltet, obwohl man es nur in Acrobat getan hat, ist es nicht.
Was man mit dieser Information anfängt
Die praktische Reaktion ist klein und die zehn Minuten wert.
Schalten Sie JavaScript in Ihrem Desktop-Reader ab. Im Acrobat Reader unter Voreinstellungen → JavaScript. Das entfernt eine ganze Risikokategorie und kostet nichts außer — zugegeben — der Möglichkeit, DOOM in einem Formularfeld zu spielen.
Halten Sie den Reader aktuell. Skripting ist ein Weg hinein. Fehler im Code, der Schriften und Bilder dekodiert, sind ein anderer, und den beheben Updates — historisch ist er sogar der häufigere.
Behandeln Sie unerwartete Dokumente als unerwartet. Eine Rechnung von einem Unternehmen, bei dem Sie nie etwas gekauft haben, verdient einen Moment des Nachdenkens, in welchem Format sie auch eintrifft. Das ist mehr wert als jede Einstellung.
Beachten Sie, was alle drei gemeinsam haben: Keiner verlangt, auf PDFs zu verzichten oder Dokumenten generell zu misstrauen. Sie entsprechen dem Abschließen der Haustür — billig, langweilig und gerade deshalb vernünftig, weil das Risiko klein, aber nicht null ist.
Warum dieses Projekt die Aufmerksamkeit verdient hat
Es wäre leicht, doompdf unter „Internet-Kuriosität“ abzulegen und weiterzugehen. Ich halte es für nützlicher als das, aus einem Grund, der nichts mit Sicherheitstheater zu tun hat.
Das Verständnis der meisten Menschen von Dateiformaten beruht vollständig darauf, wofür die Formate benutzt werden. Dokumente sind zum Lesen. Tabellen sind für Zahlen. Bilder sind zum Ansehen. Dieses Modell funktioniert fast immer, und genau deshalb ist es so schwer zu erschüttern — und deshalb stößt die Erklärung „ein PDF kann aktive Inhalte enthalten“ meist auf höfliche Skepsis.
Ein spielbares Spiel in einem Dokument leistet in zehn Sekunden, womit ein Artikel sich über tausend Wörter abmüht. Es ersetzt eine abstrakte Behauptung durch etwas, das man anklicken kann.
Und der tiefere Punkt reicht weit über PDFs hinaus. Formate sammeln über Jahrzehnte Funktionen an. Jede Ergänzung ergab für jemanden Sinn, der ein echtes Problem löste — Formularprüfung ist wirklich nützlich, und ein Dokument, das seine eigene Rechnung nachprüfen kann, ebenfalls. Das Ergebnis: Die gewöhnlichen Dinge, die wir täglich austauschen, können erheblich mehr, als ihre Namen vermuten lassen. Und eine Fähigkeit, die einmal in einer Spezifikation steht, steht jedem offen, der die Spezifikation liest.
Was das für den Alltag bedeutet
Nichts davon ist ein Argument gegen PDF. Es bleibt das beste Format, um ein Dokument zu verschicken, das überall gleich aussieht, auf jedem Rechner, auch in Jahren noch. Das ist ein wirklich schweres Problem, und PDF hat es gelöst. Die Funktionen, die doompdf möglich machen, sind dieselben, die ein ausfüllbares Steuerformular möglich machen.
Es ist ein Argument dafür, zu wissen, womit man umgeht. Dieselbe Vielseitigkeit, die ein Dokument ein Spiel tragen lässt, lässt es auch Skripte, Anhänge, versteckte Ebenen und Metadaten tragen, die Sie nie mitschicken wollten. Die lohnen Verständnis, und keine davon ist ein Grund zur Beunruhigung.
Es ist auch ein Teil des Grundes, warum PDF Manipulator vollständig auf Ihrem eigenen Rechner läuft. Beim Zusammenführen, Teilen oder Konvertieren gilt: je weniger Beteiligte, desto besser — nicht weil Online-Dienste finster wären, sondern weil ein Dokument, das Ihren Rechner nie verlassen hat, schlicht einfacher zu überblicken ist als eines, das auf fremden Servern lag.
Arbeiten Sie vollständig offline mit Ihren PDFs — PDF Manipulator ist kostenlos →


Quellen
- ading2210, doompdf auf GitHub — Quellcode und technische Beschreibung; Emscripten 1.39.20, 320×200 in sechs Farbtönen, ca. 80 ms pro Bild, GPL v2
- ading2210, linuxpdf auf GitHub — Linux auf einem TinyEMU-RISC-V-Emulator innerhalb eines PDFs, Bootzeit 30–60 Sekunden
- Spielbare Fassung (Chromium-basierte Browser)
- Eric Lawrence, Browser Security Bugs that Aren’t: JavaScript in PDF — was PDF-Engines in Browsern Skripten erlauben und was nicht
- Adobe, Restrict JavaScript API access in Acrobat
- DoomWiki, Licences — Code-Veröffentlichung 23. Dezember 1997, GPL-Umlizenzierung 3. Oktober 1999
- The Register, It’s Doom … running in a PDF file
- Ars Technica, This PDF contains a playable copy of Doom

