Auparavant, un développeur avait encapsulé le jeu Tetris dans un fichier PDF distinct. Il est en fait très inexact de dire qu'il est encapsulé, car le jeu a en fait été développé selon les règles de Tetris via PDF, plutôt que d'encapsuler le jeu existant dans un fichier PDF.
Il existe désormais une nouvelle façon d'encapsuler le système Linux dans un fichier PDF et de l'exécuter. Le développeur vk6_ a compilé avec succès le simulateur RISC-V en JavaScript. Le format de fichier PDF prend en charge JavaScript et possède sa propre bibliothèque standard, ce moteur est donc utilisé pour exécuter le système Linux.
Le développeur vk6_ a déclaré dans un message sur le forum Reddit :
Vous pourriez penser que les fichiers PDF ne sont constitués que de fichiers statiques, mais étonnamment, le format de fichier PDF prend en charge JavaScript et possède sa propre bibliothèque standard indépendante, que les navigateurs modernes tels que Chromium et Firefox implémentent dans le cadre du moteur PDF.
Mais l'API disponible dans le navigateur est très limitée, mais pouvoir effectuer tout type de calculs dans le PDF ne nécessite que quelques E/S très limitées.
En utilisant l'ancienne version d'Emscripten (qui cible asm.js au lieu de WebAssembly) pour compiler le code C à exécuter en PDF, nous pouvons compiler le simulateur TinyEMURISC-V modifié en asm.js, puis l'exécuter en PDF.
En termes de saisie, le développeur a ajouté un clavier virtuel sur lequel on peut cliquer avec la souris, ainsi qu'une zone de texte. Lorsque vous saisissez du contenu dans la zone de texte, il sera converti en opérations à l'écran. Par exemple, vous pouvez modifier le mot de passe lorsque vous appuyez sur passwd et appuyez sur Entrée dans la zone de saisie.
Le contenu de sortie est composé d'un champ de texte de pixels par ligne, qui contient des caractères ASCII formant une grande image. Il faut dire que les développeurs ont vraiment joué avec le format PDF.
Les utilisateurs intéressés peuvent consulter ce projet : https://github.com/ading2210/linuxpdf
Exemple de projet : https://linux.doompdf.dev/linux.pdf