trynix.dev 把歷史 Nix 套件變成瀏覽器裡的可重現測試環境

trynix.dev 把歷史 Nix 套件變成瀏覽器裡的可重現測試環境

事件事實

Farid Zakaria 發布 trynix.dev,利用 qemu-wasm 在瀏覽器內啟動 x86_64 Linux 虛擬機器,再把 Nix 歷史版本的套件放到虛擬機器的 PATH。使用者可以透過 URL 指定套件,例如載入 2017 年的 Python 3.6.2,在不安裝本機依賴的情況下取得互動式 shell。程式碼與工作流公開在 GitHub 的 fzakaria/trynix 專案。

Simon Willison 的獨立測試說明,trynix 依靠 WebAssembly 編譯的 QEMU、Nix binary cache 和記憶體中的 Nix store;瀏覽器負責下載閉包並執行模擬器,不需要專用應用伺服器。Zakaria 另推出 trynix-preview GitHub Action,在 pull request 中留言一條連結,讓審查者直接啟動已建置的 PR 產物。

它解決的問題

Nix 保留套件定義和 store path 的歷史版本,trynix 把這種可定址性轉成「連結即環境」。對除錯和回歸測試而言,問題報告可附上精確的套件版本,而不是隻寫「在我的機器上失敗」。PR 審查者也能在瀏覽器快速確認命令列行為,降低本地安裝、SSH、VPN 或容器設定的摩擦。

不過它不是本機開發環境的替代品。QEMU 在 WebAssembly 中做 CPU 模擬,冷啟動和大型二進位檔都會較慢;目前主要提供序列主控臺,並受瀏覽器記憶體限制。PR Action 也不會替你建置或快取產物,維護者必須先把安全的 store path 推到指定 cache。

安全與營運考量

公開 cache 需要允許瀏覽器跨來源讀取,私有團隊若直接照搬設定,等同把快取內容暴露給任意來源。對 fork 的 PR,工作流應固定在預設分支執行並使用隔離 cache,避免不受信任的修改取得主 cache 寫入權。trynix 的價值在於可重現和可分享,前提是把二進位來源、許可權和效能限制寫清楚。

來源