一、它到底是什么:一个守护进程,四种负载
ArcBox 是用 Rust 从零写的 macOS 容器与虚拟机运行时,定位写得很直白,是 Docker Desktop 与 OrbStack 的开源替代。它最值得看的地方在架构上的归并:一个守护进程、一条命令行 abctl,同时管四种负载。
| 负载层 | 是什么 | 入口 |
|---|---|---|
| 容器 | 一个可直接顶替的 Docker 引擎,外加原生 Kubernetes | docker … / abctl k8s |
| 沙箱 | 给 AI Agent 与不可信代码用的一次性微虚机 | abctl claude / abctl sandbox |
| Linux 机器 | 有自己内核、磁盘与发行版的完整虚拟机 | abctl machine |
| macOS 客户机 | 从基础镜像克隆出来的即用即弃 macOS 虚拟机 | abctl macos |
容器这一层是真的兼容,不是差不多能用:它暴露一个 Docker 兼容的 socket 并代理到客户机里的 dockerd,所以 Docker CLI、你的脚本和 Compose 文件都不用改。官方文档里有一句描述很克制,说本地跑的沙箱与云端 ArcBox Platform 用的是同一个原语,代码不用改就能从本地扩到集群。
沙箱这一层是它与其他 macOS 容器方案真正的分界:每个沙箱是一台独立微虚机,用 Firecracker 嵌套在客户机里启动,各有自己的内核。abctl claude 就是这套原语加上一层顺手的外壳——按内置模板建一个沙箱,把你的终端接进去跑 Claude Code,并且把 Agent 的权限弹窗关掉。理由写在 README 里:边界是微虚机本身,不是那一堆确认框。宿主目录一个都不挂,/workspace 从空目录开始,Agent 要什么自己 clone。
再往下有几处是自己写的,不是把现成引擎包一层:两个 hypervisor 后端(自研 VMM 走 Hypervisor.framework,另一个走 Virtualization.framework,可用 abctl system backend hv|vz 切换)、一整套 VirtIO 设备、一个用户态网络数据面(官方说不用 pf NAT、也不用 utun 设备)、NFSv4 走 vsock 把容器数据挂到 ~/ArcBox 供 Finder 直接浏览,以及用 FEX 在 Apple 芯片上翻译 x86-64 镜像。
覆盖面还延伸到了 amd64 镜像与 Kubernetes 这两处:docker run --platform linux/amd64 能直接跑,看内核架构会返回 x86_64;abctl k8s start 起一个由守护进程托管的本地 k3s。abctl k8s enable 会顺手装好 kubectl、并入 kubeconfig 并切好上下文。另有一个迁移工具,能把 OrbStack 或 Docker Desktop 的镜像(含全部 tag)、命名卷、自建桥接网络和容器一起搬过来。
二、怎么用:从装到跑起第一个容器
官方给两条安装路径,第一条是 Homebrew:
# Homebrew(cask) brew install --cask arcboxlabs/tap/arcbox # 或者安装脚本 curl -fsSL https://get.arcbox.dev | bash
装完启动守护进程,再打开 Docker 兼容:
abctl daemon start abctl docker enable # 跑一个容器 docker run -d -p 8080:80 nginx curl http://localhost:8080 # 体检与看全部命令 abctl doctor abctl --help
想试 Agent 沙箱,只要一个 API Key:
export ANTHROPIC_API_KEY=sk-... abctl claude # 首次会构建镜像,之后约 1 秒启动 abctl claude --id review # 第二个互不干扰的会话 abctl claude -- --model opus # 双横线之后的参数全部转给 Agent
沙箱本身有一套完整的生命周期命令,模板、创建、执行、拷文件、暴露端口、快照、恢复都有:
abctl sandbox templates abctl sandbox create --from-image myapp:latest --memory 512 --ttl 3600 abctl sandbox run <id> -- ./untrusted-binary abctl sandbox cp <id>:/tmp/out.tgz . abctl sandbox expose <id> 8080 abctl sandbox checkpoint <id> --name clean abctl sandbox restore <snapshot-id>
需要一台完整的 Linux 环境,或者一台用完就丢的 macOS:
abctl machine create dev --distro ubuntu --disk 50 --mount ~/code:/code abctl machine start dev abctl machine ssh dev abctl machine exec dev -- cargo build abctl macos image pull tahoe-base abctl macos create ci --image tahoe-base --cpus 4 --memory 8192 abctl macos start ci abctl macos ip ci --wait 30
从别的运行时搬过来,先看计划再动手:
abctl migrate from orbstack --dry-run # 只看计划,不改动任何东西 abctl migrate from orbstack abctl migrate from docker-desktop
整个过程里最容易忽略的是权限:本机装了它之后,~/ArcBox 会多出一份容器数据的只读视图,而 abctl docker setup 会往系统里装 docker、compose、buildx 三个二进制。知道这两件事写在哪,后面会省掉一次排错。
三、优点和缺点,摊开说
先说值得用的地方:
- 许可干净:LICENSE-MIT 是标准 MIT 全文(版权方 ArcBox Labs),另有 LICENSE-APACHE,两个文件里都没有追加条款。
- 四种负载共用一个守护进程和一条 CLI,容器与虚拟机不是两套互不相干的东西。
- 沙箱是内核级隔离,不是命名空间级的:宿主目录不挂载,文件进出都要显式拷贝。
- 迁移工具直接吃 OrbStack 与 Docker Desktop 的镜像、卷、网络和容器,换运行时不是从零开始。
- Apple 芯片上能跑 amd64 镜像,不用为了本地复现而改 CI 的构建目标。
再说必须提前知道的缺点——这部分才是重点:
| 风险点 | 具体情况 |
|---|---|
| 性能表是目标值,不是实测 | README 里那张与 OrbStack 逐项对比的表,抬头原文写的是 These are the numbers we are working toward, with OrbStack for comparison。整张表五行里,只有网络那一行给得出实测口径:自研后端单流宿主到客户机 22.7 Gbps,约为 Apple 原生 virtio-net 的两倍多。 |
| 项目自己写了一份失败的测试报告 | 仓库里有一份文档,标题直译就是网络数据面的实测性能与已知限制。它承认多流宿主到客户机会塌:每路流超过约 4 到 5 Gbps 时,一路跑满、其余接近零;稳定态上限 10 到 12 Gbps,约为单流的一半。作者把三个客户机侧实验(队列长度从 1024 翻倍到 2048、网卡丢包计数、软中断 CPU 占用)逐条做完并全部排除,再抽样宿主侧线程,发现单流 29.5 Gbps 与双流 10.9 Gbps 烧掉的是同样约 120% 的单核预算,于是把根因定位到每个中断的固定开销。源码里还留着一行注释,说中断抑制等基础路径验证完再加。注意同一份文档里,抬头写的是单流 22.7 Gbps,后面宿主侧采样一节写的是 29.5 Gbps,两个数来自不同次运行。 |
| 商业口径不在许可文件里 | 两个许可文件都是标准全文、没有追加条款;但 README 的贡献一节多写了一句:运行时按 MIT 与 Apache-2.0 开源、个人使用免费、商业使用在公开测试期免费。这句时间限定不在任何许可文件里。同时云端 ArcBox Platform 是付费产品:Linux 与 Windows 走候补名单、按秒计费,macOS、iOS、Android 需要联系销售。 |
| 沙箱有硬性机型门槛 | README 明确写沙箱需要嵌套虚拟化,也就是 Apple 芯片 M3 及以上配 macOS 15 以上、并使用默认的 VZ 后端,其他主机上沙箱命令会直接失败。需求一节写的是仅 Apple 芯片、Intel 支持进行中;后续计划里 Linux 宿主支持也还挂着。 |
| macOS 客户机被许可限死 | 只能走 Virtualization.framework,且每台主机最多 2 个。README 把原因写得很清楚,是 Apple 的许可限制,不是技术做不到。 |
| 公开测试期,破坏性变更按正式版发 | 最新运行时版本是 v0.7.0,其中一个改动把启动机器的返回时机改了:从 Agent 首次应答改成机器真正可用,Alpine 约 2.2 秒、Ubuntu 约 14 秒,官方要求调用方把超时提到 15 秒以上。版本号还在 0.x,升级前值得先读一遍发版说明。 |
| 装得上,卸不干净 | README 首选的 Homebrew 安装路径之后,abctl daemon start 会报找不到守护进程,这条问题单从八月中一直开着,修复补丁至今未合并(#644)。而 abctl docker setup 装进系统的 docker、compose、buildx,目前没有一个命令能把它们一起卸掉,问题单里已经有人在问怎么完整移除(#710)。 |
另外,把闲置 Mac 并入集群当 CI 算力这一节,README 自己标着还在开发中;它承诺的从本地沙箱平滑扩到云端机群,现在只有前半截是真的。
四、最终能达到什么效果
落地之后,日常会变成这样:写一个要跑的脚本、或审一个来路不明的仓库,一条 abctl claude 起一个微虚机(首次构建镜像,之后约 1 秒可用),Agent 在里面 clone、装依赖、跑测试,权限弹窗一次都不弹,因为宿主上什么都没挂给它;跑完用 abctl sandbox cp 把产物拷回本地,用过的机器连同它的内核一起丢掉。容器那一侧是另一条路径:docker compose up 照旧可用,镜像、命名卷和自建网络可以从 OrbStack 迁过来,Finder 里还能直接翻容器的卷和镜像层。
一句话:给 Agent 一台真机器、以及换掉 Docker Desktop,这两件事在它这里是同一个守护进程上的两种用法。
| 场景 | 结论 |
|---|---|
| 想给 Agent 一个用完即弃、且不接触宿主文件的执行环境 | 推荐,这是它最扎实的部分 |
| 想找能读源码、跑得动的 Docker Desktop 替代品 | 可以试,容器层已能日常用,但要先接受公开测试期 |
| 机器是 Intel Mac,或者你想在 Linux 宿主上跑 | 暂不推荐,宿主支持还没到 |
| 需要在生产里当唯一容器运行时 | 暂不推荐,未到 1.0 且破坏性变更按正式版发 |
| 关心多流网络吞吐 | 先自己压一遍,别拿官方表里网络那一行当验收标准 |
动手前先做三件事:
- 先跑 abctl doctor 体检,确认机型与系统版本满足沙箱门槛,再去试 abctl claude。
- 迁移前一定先跑带 --dry-run 的那条,看清楚哪些容器会被判为阻塞;跨容器共享网络命名空间的容器需要在源端先处理掉。
- 把 abctl docker setup 装进系统的 docker、compose、buildx 记在备忘里,目前没有一个命令能把它们一起卸掉。
下期预告:上一期文末预告过的让 AI 操作真实账号那三条路,继续欠着;本期榜上先冒出来的是隔离方向的项目,所以先把它写掉。下期做 Agent 沙箱的横向对比——本机微虚机、Kubernetes 原生、云厂商容器沙箱这三条路线,隔离层、许可与宿主门槛完全不同。
#GitHub趋势#AI Agent#沙箱#macOS
数据来源:GitHub 官方页面与 REST API · 抓取时间:2026-09-16 17:36。文中命令均取自仓库 README 原文;性能数字取自仓库内 docs/net-perf-limits.md;命令行为与报错信息来自仓库公开问题单(#644 / #710)。本轮未在本机安装运行该项目,所有结论均为文档、发版说明与问题单层面的核实结果。项目地址:https://github.com/arcboxlabs/arcbox
