Vi kjørte Linux inni en PDF – for jada, det går an

En student klarte nylig å få Doom til å kjøre inni PDF-er – nå er hans neste prosjekt klart: LinuxPDF. Vi måtte selvfølgelig prøve.

For noen uker siden klarte en student som kaller seg "ading2210" (Allen er hans egentlige navn) å få spillet Doom til å kjøre inne i en PDF.

Nå er han klar med sitt neste prosjekt – nemlig å kjøre Linux i en PDF, skriver It's FOSS News.

Grunnen til at det er mulig, er at PDF-formatet faktisk støtter JavaScript.

– Du skulle kanskje tro at PDF-filer kun består av statiske dokumenter, men overraskende nok støtter PDF-formatet Javascript med sitt eget standardbibliotek. Moderne nettlesere (Chromium, Firefox) implementerer dette som en del av sine PDF-motorer, skriver Allen i git-repoet der han har lagt ut kildekoden til LinuxPDF.

Og ja – det fungerer

De som kjenner undertegnede, blir neppe overrasket over at jeg ikke klarte å motstå fristelsen til å prøve LinuxPDF.

Du kan prøve det ut selv ved å gå til linux.pdf. Men ikke forvent at det skal gå spesielt fort, eller være brukbart til noe som helst.

– Det største problemet er emulatorens ytelse. For eksempel bruker Linux-kjernen 30-60 sekunder å starte opp inne i PDF-en, som er over 100 ganger tregere enn normalt, forklarer Allen.

LinuxPDF fungerer bare i Chromium-baserte nettlesere. Jeg fikk det selv ikke til å fungere i Google Chrome, men i Microsoft Edge fungerte det som det skulle.

Når du har startet opp LinuxPDF, må du skrive inn Linux-kommandoene ved hjelp av et skjermtastatur – eller du kan klikke inne i et tekstfelt og skrive inn tekst der som så sendes videre til den virtuelle maskinen Linux kjører i.

Her prøver vi å opprette en fil:

image: Vi kjørte Linux inni en PDF – for jada, det går an

Og så redigerer vi den med vi (vim var tydeligvis for avansert, og fulgte ikke med):

image: Vi kjørte Linux inni en PDF – for jada, det går an

Slik virker det

Som nevnt støtter PDF-er JavaScript, men nettlesere som Chromium har bare implementert en liten del av Adobes spesifikasjoner for JavaScript i PDF. Dette er blant annet av sikkerhetsmessige årsaker, skriver Allen.

Det betyr blant annet at du ikke får kontakt med omverdenen og må begrense deg til hva du kan finne på inne i et Linux-terminalvindu uten nettverksstøtte. Og det er neppe særlig mye.

Linux-versjonen som kjører inne i PDF-en kjører i en TinyEMU RISC-V-emulator.

Allen skriver at han fikk til å kompilere C-kode til å kjøre i en PDF ved å bruke en gammel versjon av Emscripten som targeter asm.js i stedet for mer moderne WebAssembly.

– Med det kan jeg kompilere en modifisert versjon av TinyEMU RISC-V-emulatoren til asm.js, som kan kjøres inne i PDF-en.

I denne videoen kan du se hvordan det fungerer: