Zuvor hatte ein Entwickler das Tetris-Spiel in eine separate PDF-Datei gekapselt. Es ist eigentlich sehr ungenau zu sagen, dass es gekapselt ist, da das Spiel tatsächlich nach den Tetris-Regeln per PDF entwickelt wurde, anstatt das vorhandene Spiel in eine PDF-Datei zu kapseln.

Jetzt gibt es eine neue Möglichkeit, das Linux-System in eine PDF-Datei zu kapseln und auszuführen. Der Entwickler vk6_ hat den RISC-V-Simulator erfolgreich in JavaScript kompiliert. Das PDF-Dateiformat unterstützt JavaScript und verfügt über eine eigene Standardbibliothek, sodass diese Engine zum Ausführen des Linux-Systems verwendet wird.

Entwickler vk6_ sagte in einem Reddit-Forumsbeitrag:

Man könnte meinen, dass PDF-Dateien nur aus statischen Dateien bestehen, aber überraschenderweise unterstützt das PDF-Dateiformat JavaScript und verfügt über eine eigene unabhängige Standardbibliothek, die moderne Browser wie Chromium und Firefox als Teil der PDF-Engine implementieren.

Die im Browser verfügbare API ist jedoch sehr begrenzt, aber um Berechnungen jeglicher Art innerhalb der PDF-Datei durchführen zu können, sind nur einige sehr begrenzte E/A-Vorgänge erforderlich.

Mit der alten Version von Emscripten (die auf asm.js anstelle von WebAssembly abzielt) zum Kompilieren von C-Code für die Ausführung in PDF können wir den modifizierten TinyEMURISC-V-Simulator in asm.js kompilieren und ihn dann in PDF ausführen.

Was die Eingabe betrifft, hat der Entwickler eine virtuelle Tastatur hinzugefügt, die mit der Maus angeklickt werden kann, und außerdem ein Textfeld hinzugefügt. Wenn Sie Inhalte in das Textfeld eingeben, werden diese in Bildschirmoperationen umgewandelt. Sie können beispielsweise das Passwort ändern, indem Sie passwd drücken und im Eingabefeld die Eingabetaste drücken.

Der Ausgabeinhalt besteht aus einem Textfeld mit Pixeln pro Zeile, das ASCII-Zeichen enthält, die ein großes Bild bilden. Man muss sagen, dass die Entwickler wirklich mit dem PDF-Format gespielt haben.

Interessierte Benutzer können sich dieses Projekt ansehen: https://github.com/ading2210/linuxpdf

Beispielprojekt: https://linux.doompdf.dev/linux.pdf