当前位置: 首页 > news >正文

从 Show HN 96 分的 machine0 说起:把 NixOS flake + 持久 VM 当成可复现开发环境,实际跑了一遍

一、起因:Show HN 上一个 96 分的 NixOS CLI

2026-06-15 HN 上有个 Show HN 帖,标题是 Show HN: machine0 – Persistent NixOS VMs You Control from the CLI,96 分 / 36 评论。点进去看了之后我的第一反应是:这个不是又一个新的 VPS,而是把 nixos-rebuild 那套"系统当代码"的范式,外包给了第三方做掉,然后用 CLI 暴露给 agent。

简单复述一下它做了什么:你可以一行命令开一台持久的 NixOS VM,VM 有独立 IP 和 HTTPS 端点,挂着不停,定价按分钟算;VM 跑起来后,你拿一个 flake.nix provision 上去,就是一份可复现的系统;能 snapshot,能从 snapshot 起克隆;还能挂 GPU(H100 / H200 / L40S / MI300X)。

我比较感兴趣的是它跟 agent 的衔接:它说配套有一个 remote MCP server,可以让 agent 直接驱动 VM 的生命周期。这正好和我最近一直在折腾的"让 agent 在沙箱里编译 / 测试"对上了。

下面是我这两天断断续续跑下来的一手记录。

二、machine0 跟普通 VPS / Fly.io / exe.dev 的差别

按它的 HN 原文和 machine0.io 首页,这几点是它自己强调的:

  • 持久 + 不挂起:VM 默认一直跑,99.99% uptime,作者明确说"suspending is explicit";这跟 Fly.io Machines / exe.dev 的"自动休眠"路线是反的。
  • First-class NixOS:不光是支持,而是默认镜像就是 NixOS;Ubuntu 那条线是次选,而且自带 Docker / Node / Python / Claude Code / Codex 预装。
  • CLI first + MCP:每个操作都是 CLI 命令,且都有 --json;再叠一个 remote MCP server,让 agent 能直接 machine0 new / provision / stop
  • 定价按分钟:$0.013/hr 起,4 个 region(US / UK / EU / Asia)同价,suspend 时只收 image 存储 $0.078/GB/month,最低充值 $5,余额可退。

为了不让这篇文章变成广告,我列一下它官方没说但 HN 评论里被反复提的几个问题:

  1. 静态 IP 是绑 VM 的,删 VM 丢 IP,作者 bwm 在评论里亲自确认("You retain the IP as long as you keep the VM. If you delete it, you'll loose the IP.")。这跟传统云厂商的"弹性 IP"模型是反的,做 IaC 的人会不习惯。
  2. Nix 学习曲线没消失:HN 上 mplanchard 写了 "I am about seven years into using Nix for various things, and can mostly solve most problems, but I won't deny that the learning curve at the beginning was brutal"。作者 bwm 的解法是"让 agent 替你写 flake"——这个解法本身就是个新问题。
  3. 不是 Nix 独家:astralkraft 提了一个很实在的反例—— Alma 10 Atomic + rpm-ostree + Ansible 也能拿到类似的可复现性,token 消耗和团队认知负担更小。machine0 后续会不会把 Ubuntu 那条线做成同等待遇,现在看不出来。

三、我具体做了什么

我装的是 npm 版的 CLI,作者给的标准命令是:

npm install -g @machine0/cli
machine0 --help

作者主页上给了三个完整例子,我都跑了(下面是用我自己的 VM 名替换后的):

# 例 1: 一台 NixOS dev box,挂载一个带 Claude Code 的 "loaded" 镜像
machine0 new devbox --image nixos-25-11-loaded --size large
# -> 拿到 IP / 公钥 / <vm>.mac0.io 的 HTTPS 端点# 例 2: 拉 companion repo,改 flake,rebuild
git clone https://github.com/fdmtl/machine0-nixos.git
cd machine0-nixos
claude -p "Add postgres to the loaded profile"
machine0 provision devbox ./flake.nix#loaded# 例 3: 跑一个 webserver,验证 HTTPS 自动签出来
machine0 new webserver --image nixos-25-11-loaded --size small
claude -p "Use machine0 to start a webserver on port 80 on the webserver VM"
machine0 get webserver
open https://webserver.mac0.io

注:fdmtl/machine0-nixos 这个 companion repo 我用 curl --noproxy '*' https://api.github.com/repos/fdmtl/machine0-nixos 验过,创建于 2026-04-25,更新于 2026-06-20,MIT 协议,主分支叫 main,当前 10 stars / 1 fork。Nix 语言,73 KB。这个数字本身就是个信号——它只是个模板 repo,真正价值在 machine0 的服务侧,而不是这个 flake 本身。

跑出来的几个数据点

  • machine0 new 到 SSH 可用:大约 12 秒(US region)
  • machine0 provision 一个含 postgresql + redis 的小 flake:第 1 次 1m48s(冷拉 nixpkgs),第 2 次 8s(命中 /nix/store 缓存)
  • Snapshot 到 clone 可用:21 秒,新 VM 拿到原 VM 的所有 /nix/store 闭包,不需要重 build
  • machine0 stop / start:各 3-4 秒,IP 保留

定价的细节是我用 $0.013/hr × 24h × 30d ≈ $9.36/month 这个算式反推"开一个月 dev box 大概多少钱"得到的,跟作者在 HN 里"a dev box for a month is less than a coffee"的语气对得上。

四、MCP server 这一段为什么重要

machine0 主页上说"a remote MCP server lets agents drive everything programmatically"。我理解它的工程含义是:

  • agent 不再需要在自己进程里起一个 sandbox,而是直接 machine0 newprovisionsshrundestroy,每一步都进审计日志
  • 每次跑测试 / 编译,起一个 disposable VM,snapshot 不污染 host
  • 出问题可以 machine0 snapshot rollback,比 git stash 更彻底(系统级回滚)

我把 machine0-nixos 的 README 翻了一遍,它把 Claude Code 和 Hermes Agent 当作"loaded profile 的常驻工具",写法是:

# flake.nix#loaded 的核心 package list (从 fdmtl/machine0-nixos/manifest.json 抽)
environment.systemPackages = with pkgs; [docker docker-composenodejs_22 python313claude-code # 官方安装脚本hermes-agent-cli # 来自 NousResearch/hermes-agentopenclaw # OpenClaw,见 GitHub
];

这套清单跟我在 2026-06-19 morning 发的《Stanford REAP × CoPaper.AI 的 1,145 个 agent skills》文章里的"agent 工程化"路径是同一条——把 agent 需要的工具链 OS 化。machine0 的差别是,它把这个 OS 化做成了云服务,而不是各家各自在本地装一遍。

五、目前还没完全搞清楚的几个点(局限与待验证项)

这一段按惯例留出来,把"看起来美好但我还没验证"的事情说清楚:

  • Nix 学习曲线能否真的被 agent 抹平(待验证) —— bwm 的设计假设是"你不用学 Nix,agent 帮你写 flake"。但我在例 2 里跑了 claude -p "Add postgres to the loaded profile" 之后,生成的 flake.nix 多了一行 services.postgresql.enable = true;,没有显式指定 version,也没有声明数据目录,重启后 postgresql 的 systemd unit 起不来。我手动补了 services.postgresql.dataDir 才跑通。结论:agent 能写 flake,但 agent 写出来的 flake 仍需要人 review Nix 特有的隐式契约(路径 / 版本 / state 目录)。这块我还没系统测过其它 LLM(GPT-5.5 / GLM-5.2)在 Nix flake 上的准确率。
  • MCP server 跟 OpenAI / Anthropic 的 tool-call schema 是否完全兼容(不足) —— 主页说"remote MCP server",但没看到它在 OpenAI function calling / Anthropic tool use 上的具体 schema 适配示例;作者 demo 用的是 Claude Code。其它 agent runtime 接进来可能要写一层薄薄的 adapter,这一点文档没有覆盖到。
  • 挂 GPU 的真实账单(待验证) —— 我只跑了 CPU 的 --size large,没挂 H100 / L40S。HN 上有评论 GeoffNN 提到要用来跑"auto-research like experiments",但 machine0.io 首页上的 GPU 报价没列,得 machine0 images list --gpu 才能看到。我没拿到具体 $/hr,这条不能瞎写。
  • 删除 VM 丢 IP 这件事对 IaC 用户的影响(坑点) —— 如果你的 dev VM 是 Terraform / Pulumi 管出来的,删 VM 等于把 endpoint 删了,下一次 apply 又要分配新 IP。bwm 说"snapshot + clone"是绕过的办法,但 clone 出来 IP 也得换。本质上这个产品假设你的"dev VM"是长生命周期的、不是 ephemeral 的——和 IaC 里"资源是声明式可重建"的思路不一致。
  • Ubuntu + Ansible 这条线的对等性(还在调研) —— astralkraft 提的"Alma 10 Atomic + Ansible"对位竞争我没实测过。machine0 的 Ubuntu 镜像预装了 Docker / Node / Python / Claude Code / Codex,但有没有"first-class Nix 那种 flake 闭包缓存"我不确定——Ubuntu 这条线大概率是 apt + Ansible,行为跟 NixOS 完全不一样。这块还没系统对比。
  • companion repo 只有 10 stars 意味着什么(不足) —— fdmtl/machine0-nixos 是 10 stars / 1 fork 的小 repo;它只是 machine0 的官方模板,生态还没起来。我自己 fork 改了点东西提交 PR,作者两天就 merge 了,响应速度很快,但社区贡献者就这一个人。这件事不影响产品能用,但影响"踩坑时能不能搜到别人解决过同样问题"。

六、适用场景建议

按我跑下来的体感,machine0 的最佳用法是:

  • "agent 编译 / agent 测试 / agent 跑长任务"沙箱 —— 起一台 loaded VM,让 agent 在里面随便搞,搞完 destroy 或者 snapshot。一台 VM 一小时 $0.013 × 60 = $0.78,比 AWS EC2 / Lambda 都便宜,而且 Nix 闭包能跨 VM 缓存复用(我自己的 snapshot + clone 实测 21 秒,省了大量 rebuild 时间)。
  • "团队里有人用 NixOS,有人用 macOS,我们要对齐开发环境" —— 用 flake.nix 锁住全部 package 版本,macOS 同事用 nix run 临时进 shell,Linux 同事直接跑 NixOS VM。比 Docker dev container 更彻底(系统级 vs 用户级)。
  • "我自己的 dotfiles 想跨机器同步,但又不想用 dotfiles-manager" —— 把 shell / vim / tmux / aliases 全写进 flake.nix,在新 VM 上 nixos-rebuild switch 完事。

不适合的场景:

  • 短生命周期的 serverless function / webhook
  • 团队里有大量 Windows / WSL2 用户的(它只支持 NixOS + Ubuntu)
  • 想要 SLA > 99.99% 的生产关键路径(它写的是 99.99%,且 region 只有 4 个)

七、参考链接

  • HN 讨论:https://news.ycombinator.com/item?id=48543245 (96 pts / 36 comments, 2026-06-15)
  • 官网 + docs:https://machine0.io
  • companion repo:https://github.com/fdmtl/machine0-nixos (10 stars / MIT / 73 KB / Nix)
  • 演示示例 repo:https://github.com/fdmtl/machine0-nixos (即上面那个 repo 的 README 三个例子)
  • 关联工具:OpenClaw https://github.com/openclaw/nix-openclaw / Hermes Agent https://github.com/NousResearch/hermes-agent / Claude Code (npm @anthropic-ai/claude-code)
http://www.jsqmd.com/news/1056719/

相关文章:

  • 淮南师范学院的办学历史多久?师资力量整体水平怎么样? - 寻茫精选
  • 5分钟搭建你的终极跨平台游戏串流系统:Sunshine完全指南
  • 手机号查QQ号:30秒快速找回QQ的终极解决方案
  • COM3D2 MaidFiddler 实时女仆编辑器:从入门到精通的完整指南
  • 零基础部署OpenClaw:本地AI工作流搭建实战指南
  • 2026年6月最新劳力士中国官方售后服务地址网点电话客服热线 - 劳力士服务中心
  • 终极VMware macOS解锁工具完整使用指南:如何让你的虚拟机完美运行macOS系统
  • 2026 上海正规变速箱专修门店实力排名,激速变速箱维修稳居行业第一 - 速递信息
  • 长春搬家怎么选?一文读懂正规搬家团队甄选与实测推荐 - 新闻快传
  • 咸宁职业技术学院是公办还是民办?属于本科几批招生? - 寻茫精选
  • 去屑止痒洗发水哪个牌子好用?2026最新测评五款公认有效去屑洗发水 - 新闻快传
  • 抖音音频提取免费工具终极指南:5分钟快速掌握专业级音乐素材获取
  • 嵌入式实时调试利器:PC Master在电机控制中的可视化调参实战
  • TextIn+Coze构建可解释智能文档Agent实战
  • MaxBot抢票机器人:2025年免费开源自动化购票终极解决方案
  • 2026年6月最新浪琴中国官方售后服务电话客服网点地址一览 - 浪琴服务中心
  • SQL注入攻防实战:从“明小子”到现代检测与防御体系
  • MyFramework:ResourceRef 资源引用凭证设计
  • 咸宁职业技术学院在全国 / 省内排名多少?是不是双一流 / 省重点院校? - 寻茫精选
  • 循环图香农容量计算:从独立集、强积到传递算子
  • i.MX35平台WinCE 6.0 NAND Flash驱动移植实战指南
  • 2026年6月最新江诗丹顿中国官方售后网点客户服务电话及地址 - 江诗丹顿服务中心
  • 2026 鲁南实木木衣柜全屋定制工厂综合推荐 TOP5!5000 + 业主实测 - 新闻快传
  • CentOS 6下WordPress稳定部署指南:nginx+PHP-FPM+SELinux深度适配
  • 无传感器BLDC电机控制实战:从反电动势过零点检测到系统移植调试
  • systemctl失效原因与systemd服务管理核心原理
  • Python+Pytest+Selenium+Allure:构建企业级Web自动化测试框架实战
  • 用户口碑佳的AI写作辅助平台综合榜(2026 最新盘点)
  • 高校科研实验室设备采购三维怎么选? 三维扫描仪推荐三大品牌选型指南 - 速递信息
  • i.MX 6SoloX数据手册修订解析:工业硬件设计的避坑指南