早前有开发者将俄罗斯方块游戏封装到独立的PDF文件中,说是封装其实非常不准确,因为这个游戏实际上是通过PDF按照俄罗斯方块规则开发的,而非将现有的游戏封装到PDF文件中。

现在还有个新玩法是将Linux系统封装到PDF文件中运行,开发者vk6_成功将RISC-V模拟器编译为JavaScript,而PDF文件格式是支持JavaScript并且有自己的标准库,所以借助这个引擎来运行Linux系统。

开发者vk6_在Reddit论坛的帖子中表示:

你可能认为PDF文件仅由静态文件组成,但令人惊讶的是PDF文件格式支持JavaScript并且拥有自己独立的标准库,现代浏览器例如Chromium和Firefox将其作为PDF引擎的一部分进行实现。

但浏览器中可用的API非常有限,但能够在PDF内部进行任何类型的计算,只需要一些非常有限的IO即可。

可以使用旧版Emscripten(该版本针对asm.js而非WebAssembly)编译C代码以便在PDF中运行,借助该功能我们可以将修改后的TinyEMURISC-V模拟器编译为asm.js,然后在PDF中运行。

输入方面开发者添加了虚拟键盘可以用鼠标点击,也添加了一个文本框,当你在文本框中输入内容时会被转换为屏幕上的操作,例如在输入框中按下passwd和回车时就可以修改密码。

而输出的内容则是每行像素的文本字段组成,其中包含构成大图的ASCII字符,不得不说开发者们真是将PDF格式玩出花儿了。

有兴趣的用户可以查看这个项目:https://github.com/ading2210/linuxpdf

示例项目:https://linux.doompdf.dev/linux.pdf