打开一个网页,点一下,一个Linux系统就在浏览器标签页里启动了。这不是云桌面,不是远程虚拟机,而是一个完整的Nix软件包运行环境——310,083个软件版本,从2017年的Python 3.6.2到最新版,全部可以直接运行。
这个项目叫trynix,作者称之为自己Nix工作的集大成之作。它把Nix包管理的核心能力搬进了浏览器:搜索、选版本、启动、运行,全程不需要在本地安装任何东西。
![]()
跳过编译,直接拿现成的
传统上,使用Nix包管理器需要经历两个步骤:求值和构建。前者解析依赖关系,后者编译源码。这两个步骤恰恰是Nix最劝退的地方——复杂、耗时,还经常出错。
trynix绕开了这一切。它直接查询Nix的二进制缓存,拿到Hydra(Nix官方构建服务)已经构建好的store path(存储路径),跳过求值和构建,直接运行成品。作者把这个模式称为“快速模式”——你只需要说出想要什么包,系统就给你对应的构建产物,而且是任意历史版本。
这个能力建立在作者之前几个项目的基础上:nixpkgs-multiverse索引了nixpkgs仓库发布过的每一个软件版本,grail解决了版本范围问题,omniflake则让超过一万六千个flake(Nix的模块化配置单元)可以从单一输入添加。
浏览器成了合法的Nix客户端
有了二进制文件,下一步就是运行它们。trynix的架构是三层的:内存中的Nix存储、WebAssembly格式的Linux内核、页面里的终端模拟器。虚拟机在几秒内启动,直接进入shell环境,所有选中的包都在PATH里。
最疯狂的部分在于:它不局限于公共缓存。你可以分享一个自己构建的store path,任何人都能在浏览器标签页里启动它。唯一的条件是缓存服务器需要设置access-control-allow-origin: *响应头——GitHub Pages默认就支持,Cachix和cache.nixos.org也都没问题。
作者提到一个巧合:五年前他提交过一个issue,请求cache.nixos.org加上这个响应头,以便从OpenAPI规范查询缓存。当时的需求和现在的trynix毫无关系,但正是那个改动,让浏览器访问Nix缓存成为可能。
一个不存在的包,也能跑起来
作者提供了一个演示链接:一个修改过的GNU hello程序,store path托管在GitHub Pages上,这个路径在cache.nixos.org上并不存在。但点击链接后,虚拟机照样启动,程序照样运行。
这意味着什么?意味着浏览器已经成为一个合法的Nix客户端。过去浏览器缺少的只是运行二进制的地方——store path是x86-64或aarch64架构的ELF可执行文件,浏览器本身跑不了。WebAssembly解决了这个问题,把Linux内核编译成wasm,在标签页里模拟出一台完整的机器。
这个项目的意义不在于“在浏览器里跑Linux”这个噱头,而在于它把Nix的包分发能力从命令行扩展到了Web。任何有静态文件服务器的人,都可以成为Nix包的提供者;任何有浏览器的人,都可以成为Nix包的使用者。门槛降到了零。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.