O campo da computação está constantemente sendo surpreendido por inovações criativas, como a possibilidade de executar um sistema Linux completo dentro de um arquivo PDF. Este feito, embora não tenha aplicações práticas imediatas devido a limitações de desempenho e entrada/saída, estabelece um marco importante no mundo da emulação e na experimentação com formatos de arquivo.
O responsável por essa inovação é um desenvolvedor jovem, identificado pelo nome de usuário ading2210 em seu perfil no GitHub, um adolescente apaixonado por programação. Ele também é o criador do “DoomPDF”, o projeto que permite jogar o clássico Doom diretamente em um documento PDF, como noticiado pelo IGN Brasil no mês passado. Aproveitando parte do trabalho desenvolvido anteriormente, ading2210 deu vida a este novo projeto baseado no emulador leve TinyEMU, que é capaz de simular arquiteturas de hardware – neste caso, um processador RISC-V. O experimento revela a flexibilidade do formato PDF para além de seu uso tradicional como arquivo estático.
Um PDF interativo

Os arquivos PDF, conhecidos por sua capacidade de armazenar documentos estáticos com textos, imagens e gráficos, sempre foram limitados à visualização passiva. No entanto, este projeto desafia essa concepção ao explorar as possibilidades de interatividade dentro do formato. PDFs modernos são capazes de executar JavaScript, o que permite uma camada adicional de funcionalidade. Navegadores como Chromium e Firefox já implementam versões limitadas das APIs JavaScript para PDFs, possibilitando interações simples, como cliques e cálculos dentro do próprio documento.
No caso do Adobe Acrobat, a implementação de JavaScript é ainda mais robusta, oferecendo recursos avançados, como a renderização 3D e chamadas HTTP, funcionalidades que são limitadas ou ausentes nos navegadores devido a preocupações com segurança. Essa capacidade de executar código JavaScript dentro de um PDF permitiu que o emulador TinyEMU fosse adaptado para rodar em um ambiente restrito, transformando um simples documento PDF em uma máquina virtual funcional.
A mágica da compilação de C para asm.js

O núcleo deste projeto é o emulador TinyEMU, que foi modificado para rodar dentro das limitações do ambiente PDF. Para isso, o código C do TinyEMU foi compilado utilizando uma versão mais antiga do Emscripten, uma ferramenta que converte código C em JavaScript. Como o WebAssembly, que é uma versão mais moderna e eficiente do JavaScript, não é suportado em ambientes PDF devido às suas restrições, a escolha do asm.js se mostrou a solução ideal para garantir a compatibilidade e o funcionamento do emulador.
O asm.js é um subconjunto do JavaScript que é otimizado para desempenho e, embora não seja tão rápido quanto o WebAssembly, permite rodar em ambientes como o de um PDF com mais flexibilidade.
Desafios técnicos e desempenho

Como qualquer experimento de emulação, esse projeto enfrentou obstáculos técnicos significativos, principalmente no que se refere ao desempenho. Um dos maiores desafios foi a limitação imposta pelo compilador JIT (Just-in-Time) desativado no V8, o motor JavaScript utilizado pelo Chrome no ambiente PDF. Isso resultou em uma performance extremamente lenta, com o tempo de inicialização do kernel Linux dentro do PDF variando de 30 a 60 segundos, o que é mais de 100 vezes mais lento do que o tempo de inicialização normal.
O sistema de arquivos virtual que roda dentro do emulador está disponível em versões de 32 e 64 bits, sendo que a versão de 64 bits, que utiliza o Alpine Linux, é consideravelmente mais lenta. Por isso, a versão de 32 bits é preferida para a maioria dos usuários. O visual do sistema emulado dentro do PDF é baseado em campos de texto, com cada linha de pixels representada por caracteres ASCII, uma abordagem que preserva a funcionalidade do sistema operacional, apesar das limitações visuais.
Além disso, o projeto contou com a implementação de um teclado virtual dentro do PDF, permitindo ao usuário enviar comandos ao sistema operacional emulado. Esse teclado é composto por botões interativos e um campo de texto onde os usuários podem digitar, enviando as teclas para a máquina virtual.
Um projeto desenvolvido em tempo recorde

Surpreendentemente, o desenvolvimento deste projeto foi concluído em um tempo impressionante: apenas 16 horas e 39 minutos. Essa marca foi possível graças à reutilização de parte do código do DoomPDF, incluindo o script para a geração do arquivo PDF e partes do processo de construção do emulador. O desenvolvedor utilizou o WakaTime, uma extensão do VSCode que registra automaticamente o tempo de programação, garantindo precisão na contagem.
Outro fator que contribuiu para a velocidade do desenvolvimento foi a portabilidade do TinyEMU. A compatibilidade já existente com o Emscripten facilitou a adaptação do emulador para o formato PDF, e a experiência prévia de ading2210 com projetos complexos, como a adaptação do SuperTuxKart para a web, foi fundamental para otimizar o processo. Além disso, ao focar exclusivamente no navegador Chromium, o desenvolvedor conseguiu acelerar a depuração e os testes.
Conclusão
Esse experimento não só desafia as expectativas sobre o uso do formato PDF, mas também abre portas para novas formas de interação e emulação dentro de ambientes restritos. Embora o desempenho e as limitações de entrada/saída ainda representem desafios, a criação de um sistema Linux funcional dentro de um arquivo PDF demonstra o potencial de inovação no mundo da computação. Em um futuro próximo, é possível que vejamos mais experimentos como esse, aproveitando os avanços tecnológicos para expandir as capacidades de formatos de arquivo tradicionais.