AI PLAY玩法更新持续收录
← 回到更新流

2026-09-10 · 原文发布日

用 trynix.dev 在浏览器核对历史 Nix 包,并给 PR 生成可启动预览链接

trynix.dev用qemu-wasm在浏览器里跑起一个完整的x86_64 Linux虚拟机,通过URL参数指定包名和版本(如python3@3.6.2),点Load就能拿到一个跑2017年Python的交互式shell,覆盖近13年的Nix包。作者还做了GitHub Action:在PR上自动评论一个链接,点开就能在浏览器里启动该PR构建出来的环境,不依赖任何服务器。

原文要点

来源称 trynix.dev 用 qemu-wasm 在浏览器跑完整 x86_64 Linux 虚拟机,可加载近 13 年的 Nix 包;包可用 URL 定位,例如 ?pkg=python3%403.6.2,点 Load 后得到 2017 年 Python 3.6.2 的交互 shell。作者还提到 trynix-preview:GitHub Action 在 PR 评论链接,点开用浏览器启动该 PR 构建环境,强调无服务器、只有浏览器。原文是短链接博客,没有给 Action 完整语法、性能或费用边界。

这次做成什么

完成两个可照做练习:一是用 URL 参数启动历史包并验证版本;二是设计一条 PR 预览评论流程,链接指向 trynix 环境。因来源未提供 trynix-preview 的可复制配置,Action YAML 为本站示意,真实 action 名称、输入和权限需回项目核对。

准备什么

  • 现代桌面浏览器支持 WebAssembly,能打开 trynix.dev
  • 一个可随便试验的 GitHub 仓库与测试 PR
  • 知道要验证的 Nix 包名与版本格式,如 python3@3.6.2
  • 如需 PR 评论,仓库需允许 GitHub Actions 写 pull-requests 注释

具体怎么做

  1. 用 URL 启动历史 Python

    浏览器打开 https://trynix.dev/?pkg=python3%403.6.2,确认 pkg 参数是 URL 编码的 python3@3.6.2。点击 Load,等待 WebAssembly 虚拟机启动;若页面按钮或文案不同,以实际页面为准,不改包名硬刷。

  2. 在 shell 里验证版本

    出现交互 shell 后先跑 python3 --version,再跑 python3 -c "import sys;print(sys.executable);print(sys.version_info)" 。把输出截图或复制到练习记录;只相信 shell 内打印,不凭页面标题判断版本。

  3. 换成自己关心的包

    把 URL 改成 ?pkg=包名%40版本,例如 nodejs@14.21.3 或 git@2.30.2 一类格式,Load 后查询对应命令版本。若某版本不存在或构建缺依赖,记录失败信息,不假设 13 年内每个组合都可启动。

  4. 设计 PR 预览评论

    在测试仓库放本站示意 workflow:PR 打开/同步后 checkout、构建或收集包参数,再用 actions/github-script 评论一条 trynix 链接。链接中的 pkg 必须从构建产物或输入变量生成,不能写死;先在仅你可见的仓库试跑,确认不泄露令牌。

  5. 核对失败边界

    断网或禁用 WebAssembly 时应看到启动失败;超大包首次加载慢只记录现象,不承诺秒开。把结果整理成表:URL、命令、期望版本、实际版本、是否通过、失败原因。

可直接复制的材料

浏览器验证记录表

expected 是本站练习参考值,非人工标注;actual/pass 由你打开页面后填写。

url,command,expected,actual,pass,note
https://trynix.dev/?pkg=python3%403.6.2,python3 --version,Python 3.6.2,待填,待填,2017 年版本演示
https://trynix.dev/?pkg=nodejs%4014.21.3,node --version,v14.21.3,待填,待填,如包不存在记失败
https://trynix.dev/?pkg=git%402.30.2,git --version,git version 2.30.2,待填,待填,仅练习

PR 评论链接生成片段

不是原作者提供的 workflow;owner/repo 由 github-script 注入,权限需 issues:write 或等效,包参数要来自真实构建。

# 本站示意,需核对 trynix-preview 真实 action 与输入;未实测
- uses: actions/checkout@v4
- name: Build or collect package ref
  id: build
  run: echo "pkg=python3%403.6.2" >> "$GITHUB_OUTPUT"
- name: Comment trynix link
  uses: actions/github-script@v7
  with:
    script: |
      const url = `https://trynix.dev/?pkg=${steps.build.outputs.pkg}`;
      github.rest.issues.createComment({owner, repo, issue_number: context.issue.number, body: `Boot this PR build in browser: ${url}`});

验收判定清单

本站设计的练习门槛;加载耗时受浏览器与包大小影响,不设固定时限。

通过标准:1) URL 含正确编码 pkg;2) Load 后 shell 内命令打印的 major/minor/patch 与 expected 完全一致;3) PR 评论里的链接点开能进入同一 pkg 页面;4) 失败项写明是 WebAssembly、网络、包缺失还是权限问题。禁止把页面展示名当作版本证据,禁止在公共仓库泄露 GITHUB_TOKEN 之外的私有令牌。

输入与输出示例

本站虚构演示,未声明真实打开过页面;数字仅用于说明字段对应。

输入

练习 URL 设为 https://trynix.dev/?pkg=python3%403.6.2,进入 shell 后输入 python3 --version 与 python3 -c "import sys;print(sys.version_info)",记录表 expected=Python 3.6.2。

对应输出

示意记录行:actual=Python 3.6.2 / sys.version_info(major=3, minor=6, micro=2, releaselevel='final', serial=0),pass=yes;PR 评论正文为 Boot this PR build in browser: https://trynix.dev/?pkg=python3%403.6.2。若 actual=Python 3.11.x 则 pass=no,note=加载了错误包或缓存镜像。

做完检查这些

  • shell 内 sys.version_info 的 major/minor/micro 与 URL 包版本一致才算通过
  • PR 评论包含且只包含预期 pkg 的 trynix 链接,不把密钥写进正文
  • 包不存在、WebAssembly 禁用、网络失败三类原因能分别记录
  • 不宣称所有近 13 年组合都可启动,也不在公共仓库滥用写权限

容易卡住的地方

  • @ 在 URL 中应编码为 %40,直接拼接可能被参数解析破坏
  • 浏览器隐私模式或弱网会让 qemu-wasm 启动失败,误判为包不存在
  • Actions 默认权限若只读,createComment 会 403,需要最小化授权
  • 把示例 pkg 写死会让 PR 预览链接指向错误环境

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Any Nix package, live in your browser
原作者
Simon Willison
原始发布日期
2026-09-10
来源
https://simonwillison.net/2026/Sep/10/trynix/