No início do mês passado, alguém usou o suporte JavaScript do formato PDF para executar o Tetris dentro do que normalmente deveria ser um documento de texto. Previsivelmente, em poucos dias, um estudante do ensino secundário actualizou o hack para executar o Doom dentro de um ficheiro PDF. O mesmo programador melhorou agora o código para executar todo o sistema operativo Linux.
Apenas um mês depois de revelar uma versão do Doom a correr dentro de um PDF, o estudante do ensino secundário e programador “Ading2210” emulou com sucesso o Linux dentro de um ficheiro PDF. Embora o desempenho seja limitado, o projecto redefine o que é possível com as ferramentas JavaScript do PDF. Se quiser, pode experimentá-lo aqui usando um browser baseado em Chromium como o Chrome, Edge e Opera. O código fonte está disponível na página do GitHub do programador.
O LinuxPDF corre num emulador RISC-V baseado no TinyEMU. O seu funcionamento interno é muito semelhante ao do DoomPDF. Por exemplo, as entradas repetem o truque pioneiro do hack do Tetris em PDF anterior, reutilizando o código da versão Doom. Os utilizadores podem clicar nas teclas virtuais abaixo do ecrã principal, mas a maioria provavelmente preferirá os controlos directos do teclado, que funcionam interpretando as entradas num campo de texto.
Embora o formato PDF tenha sido concebido principalmente para mostrar texto e imagens, também pode executar código JavaScript. O Adobe Acrobat inclui toda a especificação JavaScript, permitindo funcionalidades como a renderização 3D, detecção de monitores e pedidos HTTP.
Os PDF executados em browsers usam uma versão mais limitada, mas é suficientemente boa para executar jogos e sistemas operativos. Ading2210 descobriu que uma versão antiga do compilador Emscripten que tem como alvo o asm.js em vez do WebAssembly pode compilar código C para executar dentro destes ficheiros.
Tal como o DoomPDF, a emulação do Linux tem um desempenho fraco. Só a inicialização do kernel demora um minuto inteiro – cerca de 100 vezes mais tempo do que um sistema Linux a funcionar num PC tradicional. Segundo Ading2210, isto não pode, infelizmente, ser corrigido porque o Chromium usa uma versão do V8 que não suporta o compilador JIT.
O sistema de ficheiros é de 32 bits. No entanto, os utilizadores podem construir uma versão de 64 bits a partir do código fonte, clonando o repositório dentro de um sistema Linux real, editando a linha “BITS” e descarregando o Emscripten versão 1.39.20. Infelizmente, executar a versão de 64 bits duplica o défice de desempenho.
Os utilizadores interessados numa aplicação Linux mais prática para hardware de baixo desempenho podem experimentar o Bootloader ChromeOS RMA Shim de Ading2210. A colecção de scripts permite que uma distribuição Debian completa seja executada num Chromebook sem necessidade de modificar o firmware.