Linux dentro de um PDF? Como um arquivo comum se tornou uma máquina virtual

Linux dentro de um PDF? Como um arquivo comum se tornou uma máquina virtual

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.


Comments

No comments yet. Why don’t you start the discussion?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *