Eerder heeft een ontwikkelaar het Tetris-spel ingekapseld in een apart PDF-bestand. Het is eigenlijk erg onnauwkeurig om te zeggen dat het ingekapseld is, omdat het spel feitelijk volgens de Tetris-regels is ontwikkeld via PDF, in plaats van het bestaande spel in een PDF-bestand in te kapselen.
Nu is er een nieuwe manier om het Linux-systeem in een PDF-bestand in te kapselen en uit te voeren. De ontwikkelaar vk6_ heeft de RISC-V-simulator met succes in JavaScript gecompileerd. Het PDF-bestandsformaat ondersteunt JavaScript en heeft een eigen standaardbibliotheek, dus deze engine wordt gebruikt om het Linux-systeem te laten draaien.
Ontwikkelaar vk6_ zei in een Reddit-forumbericht:
Je zou kunnen denken dat PDF-bestanden alleen uit statische bestanden bestaan, maar verrassend genoeg ondersteunt het PDF-bestandsformaat JavaScript en heeft het zijn eigen onafhankelijke standaardbibliotheek, die moderne browsers zoals Chromium en Firefox implementeren als onderdeel van de PDF-engine.
Maar de API die beschikbaar is in de browser is zeer beperkt, maar het kunnen uitvoeren van allerlei berekeningen in de PDF vereist slechts een zeer beperkte IO.
Met behulp van de oude versie van Emscripten (die zich richt op asm.js in plaats van WebAssembly) om C-code te compileren voor uitvoering in PDF, kunnen we de aangepaste TinyEMURISC-V-simulator compileren naar asm.js en deze vervolgens in PDF uitvoeren.
Qua invoer heeft de ontwikkelaar een virtueel toetsenbord toegevoegd waarop met de muis kan worden geklikt, en ook een tekstvak toegevoegd. Wanneer u inhoud in het tekstvak invoert, wordt deze omgezet in bewerkingen op het scherm. U kunt bijvoorbeeld het wachtwoord wijzigen door op passwd te drukken en vervolgens op Enter te drukken in het invoervak.
De uitvoerinhoud bestaat uit een tekstveld van pixels per regel, dat ASCII-tekens bevat die een grote afbeelding vormen. Het moet gezegd worden dat de ontwikkelaars echt met het PDF-formaat hebben gespeeld.
Geïnteresseerde gebruikers kunnen dit project bekijken: https://github.com/ading2210/linuxpdf
Voorbeeldproject: https://linux.doompdf.dev/linux.pdf