dbaplus社群 02月20日
6MB PDF竟能运行Linux?这名高中生在PDF里玩DOOM后,再“整活”!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

一位高中生开源爱好者Ading2210成功将Linux内核放入PDF中运行,用户可以在Chrome浏览器中直接打开PDF文件运行Linux操作系统。该项目名为LinuxPDF,文件大小仅6MB,通过在PDF文件中运行基于TinyEMU的RISC-V模拟器实现。Ading2210利用旧版Emscripten工具将C语言代码编译为asm.js,并在PDF中运行。虽然启动速度较慢,但这项创新尝试展示了PDF文件格式的潜力,引发了开发者们的广泛关注和讨论,目前项目已在GitHub上获得2.4k个Star。

💡**PDF运行Linux系统**:高中生Ading2210成功地将Linux内核嵌入PDF文件中,并使其能够在Chrome等浏览器中运行,突破了人们对PDF文件只能存储静态文档的传统认知。

💻**技术实现细节**:该项目利用了TinyEMU的RISC-V模拟器,并通过旧版Emscripten工具将C代码编译为asm.js,使其能在PDF中运行。同时,通过ASCII字符在文本框中显示每一行像素,实现了在PDF内的图形输出。

⏱️**性能与局限性**:尽管该项目在技术上取得了成功,但由于Chrome的PDF引擎禁用了即时编译(JIT)功能,导致Linux内核启动速度较慢,需要30到60秒,是正常启动速度的100倍以上。同时,该项目目前仅支持基于Chromium的浏览器。

2025-02-20 07:15 广东

网友:PDF才是真正的通用应用平台。


当我们高中时期还苦战在题海中时,别人家的小孩已经开源了一个又一个项目,真是让人佩服。


近日,一位开源爱好者 Ading2210 尝试把 Linux 内核放进 PDF 里,不过他并不是想把它当作普通的源代码展示,而是让它变成一个能启动的操作系统。


最终,这项尝试不仅成功了,在 Chrome 浏览器中打开这个 PDF(https://linux.doompdf.dev/linux.pdf)就能运行 Linux 操作系统了,更令人惊讶的是,他还只是一位对编程、网络开发和网络安全感兴趣的高中生。


Ading2210 尝试之后也直接将代码在 GitHub 上开源出来(https://github.com/ading2210/linuxpdf),供大家学习参考。截至目前,该项目已在 GitHub 上获得 2.4k 个 Star,引得不少开发者围观。


一、想要用 PDF 运行“一切”的开发者


这个项目名为 LinuxPDF。打开 PDF 文档之后启动 Linux 的界面如下,其顶部是一个欢迎界面,下方有一个虚拟键盘,输入就是点击这个虚拟键盘来实现。整体页面设计得较为简洁:



据外媒 Tomshardware 报道,这个 LinuxPDF 项目只有 6MB,此次尝试也被视为 PDF 运行了一个最小系统。


Ading2210 开发这个项目的原因,源于他很多天马行空的创意和在 GitHub 上不断进行的各种开源尝试。他似乎有一个大胆的想法,那就是通过 PDF 运行“一切”。



在 GitHub 上,Ading2210 解释道,在很多人的认知中,PDF 文件就是一个用来存储静态文档的工具,但实际上,PDF 文件格式是支持 JavaScript 的,而且它有着自己独立的标准库。


现代浏览器(如 Chromium、Firefox)将这一功能作为它们的 PDF 引擎的一部分进行实现。然而,这些浏览器中提供的 API 功能非常有限。


Ading2210 指出,实际上,Adobe Acrobat 是唯一一个完整实现了 PDF 中 Javascript 规范的软件。这个规范包含一些非常复杂的功能,比如能够进行 3D 渲染、发起 HTTP 请求,甚至检测用户系统上连接的所有显示器。然而,出于安全原因,Chromium 和其他浏览器仅实现了这个规范中的一小部分。因此,虽然我们日常可以在 PDF 中进行一些操作,但输入输出功能非常有限。


于是,Ading2210 就想着自己能否打破这些限制,让 PDF 变得更有用,这就有了后续这些操作。


在实现 LinuxPDF 项目之前,他第一次尝试将经典游戏《毁灭战士》(Doom)移植到了 PDF 中。


Ading2210 发现,使用旧版本的 Emscripten(基于 LLVM / Clang 的编译器,旧版本针对 asm.js 而非 WebAssembly)可以将 C 代码编译为 asm.js,这意味着代码可以在浏览器 PDF 引擎受限的 JavaScript 运行时内顺利运行。


在 DoomPDF 的尝试中,Ading2210 称,编译运行起来很容易,键盘输入也很方便,因为输入通过 Chromium PDF 引擎对文本框和按钮的支持来实现,游戏中的移动、地图和武器控制都可以操作。


整体来看,启动 DoomPDF 后,PDF 渲染的画面细节适中,但存在色深低和对比度不足的问题。



Ading2210 解释说,之前的 PDF 游戏使用的是更简单的单个文本字段,可以通过开关控制来创建单独的像素。然而,如果每个像素都用一个单独的文本字段表示,那么要显示一个 320 x 200 分辨率的图像,总共需要 320 x 200 = 64,000 个文本字段。为了更新图像或动画,每个像素的显示状态(即文本字段的内容)都需要被单独切换。因此,为了快速显示图像或动画,必须迅速切换这 64,000 个文本字段,这在性能上是非常困难的,所以这种方法被认为不可行。


因此,Ading2210 没有使用文本框来表示每个像素,而是为游戏屏幕中的每一行使用了单独的文本框,并用 ASCII 字符表示六种灰度,这足以让游戏的内容清晰可见。这种渲染方法的性能据说能达到每帧大约 80 毫秒(约 12.5 帧每秒),Ading2210 坦言,这种方法的性能相当差,但可以玩起来也不成问题(https://doompdf.pages.dev/doom.pdf)。


二、在 Chrome 浏览器中,打开 PDF 运行 Linux


有了上面这一次成功的经验,Ading2210 心想,既然游戏可以成功运行在 PDF 里面,那其他的东西比如说 Linux 系统是否可以,于是这便有了文章伊始提到的 LinuxPDF 项目。



根据 Ading2210 透露,此次是通过基于 TinyEMU 的 RISC-V 模拟器在 PDF 文件内部运行的 Linux。


和 DoomPDF 一样,Ading2210 也是使用旧版的 Emscripten 工具,将 C 语言代码编译为 asm.js 以在 PDF 中运行。


借助这个工具,Ading2210 将修改版的 TinyEMU RISC-V 模拟器(https://bellard.org/tinyemu/)编译为 asm.js 代码,并让它在 PDF 中运行。


为了处理输入和输出,Ading2210 复用了之前在 DoomPDF 项目中使用的显示代码,即为每一行像素设置一个独立的文本框,内容是不同的 ASCII 字符来工作。对于输入,Ading2210 通过一堆按钮创建了一个虚拟键盘,并且还提供了一个文本框,用户可以在其中输入内容,将按键命令发送给虚拟机。



不过,Ading2210 称,这个 LinuxPDF 项目也存在一些性能问题,其中 Linux 内核在 PDF 中启动时大约需要 30 到 60 秒,这比正常启动慢了 100 倍以上。遗憾的是,由于 Chrome 的 PDF 引擎使用的 V8 引擎禁用了即时编译(JIT)功能,导致性能非常差,目前无法解决这个问题。


关于根文件系统,Ading2210 提供了 64 位和 32 位两个版本。默认的是一个 32 位的 Buildroot 系统(这个系统是预先构建好的,取自 TinyEMU 的示例),另外还有一个 64 位的 Alpine Linux 系统。64 位 Alpine Linux 系统也可用,但速度只有一半,因此通常不使用它。


最后,值得注意的是,目前如果你想尝试 LinuxPDF,它需要在一个基于 Chromium 的浏览器才能正常运行(如 Chrome 或者微软的 Edge,其他浏览器暂不支持)。


对于这一次尝试,既有佩服高中生能力的声音,也有人感叹:PDF,才是真正的通用应用平台。感兴趣的小伙伴可以自行查看 GitHub 项目中的源代码(https://github.com/ading2210/linuxpdf),该项目在 GPLv3 下获得许可,也可以直接试用 LinuxPDF:https://linux.doompdf.dev/linux.pdf


>>>>

参考


整理 | 苏宓

出品 | CSDN

  本文经授权转载自微信公众号「CSDN」(ID:csdnnews)



dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LinuxPDF PDF RISC-V Emscripten 开源
相关文章