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:

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

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.

30 linjer i Linux kutter strømmen med 30%
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: