Sandbox(共享内核)
定义
在 Box 的术语中,Sandbox 不是「任意沙箱」,而是
ExecutionIsolation::Sandbox:工作负载与宿主共享
Linux 内核,隔离由 namespace、cgroup 与 OCI Runtime
的进程策略提供。请求方式只有一种:--isolation sandbox。省略隔离标志表示
MicroVM,二者没有中间态。
Linux 上,未设置 A3S_BOX_OCI_MIGRATION 时,新的 Sandbox
记录默认路由到 SandboxViaOci,即通过
a3s-oci-sdk 交给固定版本的 A3S OCI Runtime。这是 v3.2.7
发布线的生产默认,而不是预览开关。
问题背景
并非所有工作负载都需要硬件虚拟化。受信工具、基准测试、以及已经运行在受控 CI 主机上的自动化,往往更需要快速启动与较低内存,而不是第二份内核。若产品只提供 MicroVM,这类场景会被不必要的虚拟化成本挡住。Sandbox 把共享内核路径保留为显式选项,同时禁止实现「MicroVM 失败就改走 Sandbox」。
机制说明
生产路径上的所有者
Sandbox GA 使用长期、身份围栏的 OCI 所有者进程(a3s-oci
与 a3s-oci-agent):
- 启动前探测可执行文件能力并计算 SHA-256;
- 所有者根目录必须以模式
0700创建,且属于同一 UID; - 仅当 PID 启动身份、端点、路径与摘要匹配时才复用已有所有者;
- 未知套接字或产物漂移导致失败,而不是改连其他进程。
所有者被不干净地终止时,其父绑定的 Native Linux 进程树一并终止。下一次普通 Box 操作启动新的身份围栏所有者,将已认证的旧代际视为已停止,拒绝合成不可用的退出状态,并只删除该确切代际。
能力边界
Sandbox 路径拒绝仅 VM 功能:TEE、warm pool、snapshot-fork,以及(在
GA
证据中)命名桥与静态发布端口。文件系统、exec、PTY、pause/resume、快照恢复、重启与清理通过
OCI 契约提供;网络保持私有 netns 与 loopback 中继。完整威胁模型见
docs/host-sandbox-backend-design.md。
与 a3s-sandbox 仓库的区别
GitHub 上的 A3S-Lab/Sandbox
是面向 Agent 的轻量跨平台命令沙箱。Box 的
--isolation sandbox 是本地 OCI
工作负载的共享内核隔离模式。名称相近,产品对象不同。需要「给模型跑一条命令」时应阅读
a3s-sandbox;需要「像 Docker 一样跑镜像」时应阅读 Box。
在 Box 中的位置
- 枚举:
src/core/src/config.rs。 - 后端:
src/runtime/src/local_execution/oci_backend.rs、oci_owner.rs、oci_production.rs。 - 适配:
src/runtime/src/sandbox/。 - 主机准备:
scripts/prepare-linux-sandbox-host.sh、docs/installation.md中的 Linux Sandbox 一节。 - 证据:
docs/sandbox-ga-evidence.md。默认未覆盖:MicroVM 到 OCI 的全面切换、WHPX/KVM MicroVM 生产组合、HostRuntimeService 作为默认 create 路径。
验证命令
# 可选:固定产物路径;省略 A3S_BOX_OCI_MIGRATION 即使用 GA 默认 |
仅保留 MicroVM、禁用 Sandbox 路由时,设置
A3S_BOX_OCI_MIGRATION=off。显式
sandbox/on 在所有者未就绪时硬失败。
相关与易混
- 相关:隔离级别对比、OCI 标准与 bundle、A3S 项目族谱
- 易混:Sandbox 不是默认路径。也不要把「Linux Sandbox
GA」理解成「所有隔离都已迁到 OCI Runtime」。省略
--isolation的 MicroVM 拆分仍然有效,直到单独的 MicroVM cutover。