Linux běžící uvnitř PDF prostřednictvím emulátoru RISC-V

6. 2. 2025

Sdílet

PDF Linux Autor: Ondřej Caletka

Možná jste si doposud mysleli, že soubory PDF jsou tvořeny pouze statickými dokumenty, ale formát PDF překvapivě podporuje JavaScript s vlastní standardní knihovnou. Moderní prohlížeče (Chromium, Firefox) ji implementují jako součást svých PDF enginů.

Thomas Rinsma nedávno předvedl Tetris a Doom běžící v PDF, nyní šel ještě dál a podařilo se mu uvnitř PDF spustit Linux. Využil toho, že kód v jazyce C lze zkompilovat pro spuštění v souboru PDF pomocí staré verze programu Emscripten, která se namísto WebAssembly zaměřuje na asm.js. Díky tomu bylo možné zkompilovat upravenou verzi emulátoru TinyEMU RISC-V do souboru asm.js, který lze spustit v rámci PDF.

Pro výstup se pro každý řádek pixelů na obrazovce používá samostatné textové pole, jehož obsah je nastaven na různé znaky ASCII. Pro vstupy je implementována virtuální klávesnice s několika tlačítky a textové pole, do kterého je možné psát a posílat tak do virtuálního počítače stisky kláves.

Největší problém je s výkonem emulátoru. Například spuštění linuxového jádra v PDF trvá přibližně 30–60 sekund, což je více než stokrát pomalejší než za běžných okolností. Bohužel to nelze nijak napravit, protože verze V8, kterou PDF engine v Chrome používá, má vypnutý kompilátor JIT, což výrazně sráží jeho výkon.

(Upozornil Ondřej Caletka.)

Našli jste v článku chybu?

Autor zprávičky

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.