Anteriormente, un desarrollador encapsuló el juego Tetris en un archivo PDF separado. En realidad, es muy inexacto decir que está encapsulado, porque el juego en realidad se desarrolló de acuerdo con las reglas de Tetris a través de PDF, en lugar de encapsular el juego existente en un archivo PDF.
Ahora existe una nueva forma de encapsular el sistema Linux en un archivo PDF y ejecutarlo. El desarrollador vk6_ compiló con éxito el simulador RISC-V en JavaScript. El formato de archivo PDF admite JavaScript y tiene su propia biblioteca estándar, por lo que este motor se utiliza para ejecutar el sistema Linux.
El desarrollador vk6_ dijo en una publicación del foro de Reddit:
Se podría pensar que los archivos PDF sólo constan de archivos estáticos, pero, sorprendentemente, el formato de archivo PDF admite JavaScript y tiene su propia biblioteca estándar independiente, que los navegadores modernos como Chromium y Firefox implementan como parte del motor PDF.
Pero la API disponible en el navegador es muy limitada, pero poder realizar cualquier tipo de cálculo dentro del PDF solo requiere una IO muy limitada.
Usando la versión anterior de Emscripten (que apunta a asm.js en lugar de WebAssembly) para compilar código C para ejecutarlo en PDF, podemos compilar el simulador TinyEMURISC-V modificado en asm.js y luego ejecutarlo en PDF.
En términos de entrada, el desarrollador agregó un teclado virtual en el que se puede hacer clic con el mouse y también agregó un cuadro de texto. Cuando ingresa contenido en el cuadro de texto, se convertirá en operaciones en pantalla. Por ejemplo, puede cambiar la contraseña cuando presiona passwd y presiona Enter en el cuadro de entrada.
El contenido de salida se compone de un campo de texto de píxeles por línea, que contiene caracteres ASCII que forman una imagen grande. Hay que decir que los desarrolladores realmente han jugado con el formato PDF.
Los usuarios interesados pueden consultar este proyecto: https://github.com/ading2210/linuxpdf
Proyecto de muestra: https://linux.doompdf.dev/linux.pdf