任意 Nix 包,直接在浏览器里运行
文章目录
任意 Nix 包,直接在浏览器里运行
Any Nix package, live in your browser — simonwillison.net · 8 小时前 · 🛠 工具 / 开源
把 13 年前构建的 Python 3.6 解释器,在不安装任何软件的前提下,直接跑在浏览器标签页里——这是 trynix.dev 展示的能力,也是 Farid Zakaria 自称的 Nix 工作巅峰之作。其核心机制是把 QEMU 通过 qemu-wasm 编译成 WebAssembly,在页面内启动一台完整的 x86_64 Linux 虚拟机;随后借助 Nix 二进制缓存中保存的历史构建产物,把任意一个 Nix 包及其依赖闭包注入这台虚拟机,最终给出一个可以敲命令的交互式 shell。每个包都是 URL 可寻址的:访问 https://trynix.dev/?pkg=python3%403.6.2,点一下 Load,稍等片刻你就站在一台装着 Python 3.6.2 的 Linux 里。这件事之所以成立,靠的是 Nix 两个长期被低估的性质:包集合按内容哈希寻址,而 cache.nixos.org 事实上保留了过去 13 年间几乎所有构建产物,于是 2013 年构建出来的字节今天仍然可以原样取回,不需要重新编译。虚拟机内部运行的是真实的内核与 Linux 用户态,Nix 的 /nix/store/ 哈希路径原封不动地存在,所以你在里面敲下的命令与当年构建时的环境几乎一致;宿主侧只要求一个支持 WebAssembly 的现代浏览器,x86 服务器、Apple Silicon 笔记本乃至平板都能得到同样的结果。它的意义不只是技术炫技:复现一个只在旧版本依赖下出现的 bug、向同事演示某个历史版本的真实交互行为、在隔离环境里观察不受信任代码的表现,过去需要 Docker、CI 或一台一次性虚拟机,现在只需要一条能贴进聊天窗口的链接。当然代价同样明显:首次访问要下载虚拟机镜像与目标包的依赖闭包,体积可达数百 MB,冷启动受网络带宽与浏览器内存上限约束,长时间交互的体验无法与本地原生环境相比,因此它更像是可复现性的演示与应急复现工具,而不是日常开发环境的替代品。作者的核心观点是,可复现构建这个长期停留在口号层面的承诺,第一次变成了一条可点击、可分享、几十秒内就能亲手验证的 URL。
核心论点
- trynix.dev 的技术底座是 qemu-wasm,也就是把 QEMU 的系统级模拟器编译成 WebAssembly 并在浏览器中运行,页面里出现的不是容器、也不是用户态模拟,而是一台完整的 x86_64 Linux 虚拟机;WebAssembly 负责承载模拟器的执行,虚拟机内部运行真实内核与用户态工具链,Nix 包的 /nix/store 哈希路径原样保留,因此在里面敲下的命令与当年构建环境几乎一致,而宿主侧只要求一个支持 WebAssembly 的现代浏览器,x86 服务器、Apple Silicon 笔记本乃至平板都能得到相同结果,不需要在本地安装 Nix、Docker 或任何运行时。
- 每个包都通过查询参数寻址,例如 https://trynix.dev/?pkg=python3%403.6.2 对应 Python 3.6.2,点击 Load 后即可获得交互式 shell,这意味着任何一个历史版本的 Nix 包都可以被当成一条可分享的链接发送出去;能够覆盖过去 13 年的包,靠的是 cache.nixos.org 长期保存的历史构建产物与 Nix 按内容哈希寻址的 store 模型,两者叠加让 2013 年构建出来的字节在今天依然可以原样取回,而不必重新编译或重建依赖图。
- 实用价值集中在复现与演示:调试只在旧版本依赖下才出现的 bug、向他人展示某个历史版本的真实交互行为、在隔离的一次性环境里运行不受信任的代码,过去往往需要 Docker、CI 或临时虚拟机,现在只需要一条链接;由于整个虚拟机跑在浏览器沙箱内,对宿主机几乎零污染,这也让它成为教学、技术分享与安全研究的低成本实验台,特别适合演示那些用文字描述很难讲清楚的版本差异问题。
- 限制同样明确:首次访问要下载虚拟机镜像与目标包的依赖闭包,体积可达数百 MB,冷启动时间受网络带宽与浏览器内存上限影响,长时间交互的体验无法与本地原生环境相比,因此它更适合作为可复现性的演示与应急复现工具,而不是日常开发环境的替代品;此外,包覆盖范围取决于 Nix 缓存中实际存在的历史构建,并非任意包、任意版本都一定能命中。
💡 为什么值得读: 因为它把「可复现构建」这个听起来很抽象的口号,压缩成了一条点开就能亲手验证的链接,三十秒内你就能在浏览器标签页里跑起 2013 年的 Python 3.6.2。
🏷️ Nix, WebAssembly, QEMU, browser
留下一点回声