Pplware

Linux dentro de um ficheiro PDF? Parece louco, mas existe…

Se achava que já nada o surpreendia dentro do mundo da tecnologia, repare bem no que mostramos hoje. Trata-se de um projeto, onde um estudante universitário conseguiu colocar um sistema Linux dentro de um PDF. Não acredita? Experimente.


O código C pode ser compilado para correr dentro de um PDF

Este “hack” tem tanto de bizarro como de brilhante. Um jovem estudante, conseguiu colocar dentro de um PDF uma distro Linux, recorrendo ao projeto TinyEMU. Poder-se-ia pensar que os ficheiros PDF são apenas documentos estáticos, mas, surpreendentemente, o formato de ficheiro PDF suporta Javascript com a sua própria biblioteca padrão separada. 

A especificação completa do Javascript em PDFs só foi totalmente implementada pelo Adobe Acrobat e inclui funcionalidades interessantes, como a capacidade de renderizar em 3D, fazer pedidos HTTP e detetar todos os monitores ligados ao sistema do utilizador. No entanto, no Chromium e noutros browsers, apenas um subconjunto muito reduzido desta API foi implementado, por razões óbvias de segurança. Com isto, podemos realizar qualquer tipo de computação, mas com uma entrada e saída extremamente limitadas.

O código C pode ser compilado para correr dentro de um PDF usando uma versão antiga do Emscripten que gera código asm.js em vez de WebAssembly. Com isto, foi possível compilar uma versão modificada do emulador RISC-V TinyEMU para asm.js, que pode ser executado dentro do PDF.  Para entrada, há um teclado virtual implementado com vários botões e uma caixa de texto onde o utilizador pode escrever para enviar comandos à máquina virtual.

O maior problema aqui é o desempenho do emulador. Por exemplo, o kernel do Linux demora cerca de 30 a 60 segundos a arrancar dentro do PDF, o que é mais de 100 vezes mais lento do que o normal. Infelizmente, não há forma de corrigir isto, pois a versão do V8 usada pelo motor de PDF do Chrome tem o seu compilador JIT desativado, destruindo o seu desempenho.

Para o sistema de ficheiros raiz, existem versões disponíveis em 64 e 32 bits. A versão padrão é um sistema Buildroot de 32 bits (pré-compilado e retirado dos exemplos originais do TinyEMU), mas também há uma versão de 64 bits do Alpine Linux. No entanto, o emulador de 64 bits é cerca de duas vezes mais lento, pelo que normalmente não é utilizado. Pode fazer download do PDF aqui.

Exit mobile version