百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

6MB PDF竟能运行Linux?这名高中生在PDF里玩DOOM后,再“整活”!

gudong366 2025-06-02 15:20 10 浏览

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


近日,一位开源爱好者 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 。


>>>>

参考


  • https://news.ycombinator.com/item?id=42959775
  • https://www.tomshardware.com/software/linux/minimal-linux-os-runs-in-a-6mb-pdf-document-in-chrome-linuxpdf-leverages-risc-v-emulator
  • https://github.com/ading2210/linuxpdf


整理 | 苏宓

出品 | CSDN

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

相关推荐

U盘文件被删怎么简单恢复(u盘里的文件被误删了怎么找回)

现在这个社会不是靠关系靠路子,主要还是靠实力。刘强在机关工作,人长得帅气,工作能力又强。唯独一样不好,脾气太大,动不动就发火,因为小事常和同事发生口角。一次他火大的差点把办公桌给掀翻了,领导见他野蛮的...

不小心删除了一些文件?9 个最佳免费硬盘恢复软件

恢复您曾经无意或意外删除的所有文件和数据。您是否曾经错误地删除了一个对您的工作至关重要并导致您丢失所有进度的文件?我们为您提供了一些最好的免费硬盘恢复软件,以帮助您恢复意外删除的文件,以解决您的文件删...

Studio 中文版:数据救援神器,误删 / 分区损坏 / RAID 恢复一键找回

Studio中文版:数据救援神器,误删/分区损坏/RAID恢复一键找回当文件意外删除、分区损坏,或RAID阵列崩溃时,一款可靠的数据恢复工具往往能挽回关键损失。R-Studio中文版...

你值得拥有的11款Linux数据恢复工具

如果你使用的是Linux操作系统,那么你一定想知道一旦硬盘崩溃的话又该如何保存和恢复数据。其实,现在有很多Linux数据恢复工具可以让我们摆脱数据安全的困扰。小编已经为各位准备好了一些最好的Linux...

误删文件内容怎么恢复(误删文件内容怎么恢复回来)

  在日常使用电脑的过程中,误删文件的情况时有发生。无论是由于操作失误还是病毒攻击,误删文件都会给我们带来不小的困扰。幸运的是,随着技术的发展,误删文件恢复已不再是难题。本文将介绍几款国内外知名的误删...

u盘如何恢复删除的文件?推荐5款u盘数据恢复软件!

在日常生活与工作中,U盘作为便捷的数据存储载体,频繁用于传输和保存各类重要文件。然而,误删文件的情况却时有发生,无论是珍贵的照片、重要的工作文档,还是精心制作的视频,一旦删除,都可能带来不小的麻烦。...

怎么恢复删除的数据?5种有效的数据恢复方法汇总!

在数字化办公与生活的时代,电脑里的每一份数据都承载着重要信息。然而,一个误操作就可能导致数据被删除,无论是尚未保存的重要文档,还是珍藏多年的照片,都可能瞬间“消失”。但其实,数据删除并不意味着永久丢...

u盘删除文件怎么找回?5个数据恢复工具汇总,助你巧妙恢复数据!

在日常使用U盘的过程中,误删文件的情况时有发生,重要的工作文档、珍贵的照片视频一旦消失,难免让人焦急万分。别担心,只要选对数据恢复工具,被删除的数据仍有找回的可能。下面就为你汇总5款实用的数据...

Linux下恢复误删文件:思路+实践(linux删除如何恢复)

周五篮球群里有人问误删文件了怎么恢复,得知是ext4文件系统之后我推荐了ext4magic这个工具,然后又有人提到了xfs的话怎么办,正好前几天看到DaveChinner在邮件列表里提到了这个问题,...

苹果放大招!不用虚拟机了,Mac直接跑Linux容器,开发者效率翻倍

苹果这次真给开发者送福利了!今天凌晨(6月10日),苹果在官宣的Containerization框架直接炸了技术圈——Mac现在能原生运行Linux容器镜像了!这可不是虚拟机那种“套娃”方案,而是基...

7 款老牌经典软件,值得收藏(经典老歌软件)

Calibrehttps://calibre-ebook.com/Calibre是一个电脑电子书管理软件。肯定有人说了,电子书还要管理?那当然了。它的功能更强大的让你想象不到,首先它可以导入PDF,...

神仙级的免费开源电子书阅读器,还支持听书功能

神仙级的免费开源电子书阅读器,还支持听书功能,极空间部署『KoodoReader』哈喽小伙伴们好,我是Stark-C~前段时间不是给大家分享的电子书管理工具『TaleBook』嘛~,然后就有粉丝私信...

如何在Ubuntu系统中重置root密码(ubuntu忘记密码重置root密码命令)

很多人有个问题,就是喜欢把密码设置得很长很复杂,结果谁也没防住,却成功防住了自己ヽ(.ˇдˇ;)ノ对于现代人,特别是年轻人,都有过忘记密码的经历吧。在这篇文章中,我们来了解如何在Ubuntu1...

5款功能强大的PDF阅读器,让PDF阅读更轻松

分享5款功能强大的PDF阅读器,拥有丰富的PDF阅读工具,支持PDF文档划线、笔记、标记等操作,让PDF阅读更轻松!1.嗨动PDF编辑器一款实用的PDF处理软件,不仅可以阅读PDF文档,还能直接编辑、...

上班摸鱼利器! 免费好用的电子书阅读器,NAS轻松部署Koodo Reader

哈喽,大家好我是生活爱好者。笔者也是一名小说爱好者,平时用手机用某信读书,会员也开了,在家看体验也不错,但是上班的时候,在工作快速完成之后,想摸个鱼用手机就不太方便啦,作为爱折腾的人,必须要工作认真,...