亚毫秒虚拟机沙箱,使用CoW内存分叉。
Show HN: Sub-millisecond VM sandboxes using CoW memory forking

原始链接: https://github.com/adammiribyan/zeroboot

## Zeroboot:亚毫秒级AI代理沙箱 Zeroboot 提供极快的(亚毫秒级p50延迟,约1.7毫秒p99)虚拟机沙箱,用于安全地运行AI代理代码。它通过利用KVM虚拟化和Firecracker快照的新颖的写时复制(CoW)分叉机制来实现这一点。 Zeroboot 不采用传统的VM创建方式,而是将运行时环境预加载到基础VM中,然后通过将快照的内存映射为CoW来快速“分叉”新的隔离VM。这大大减少了启动时间——每个分叉大约0.8毫秒——同时保持硬件强制的内存隔离。 每个沙箱都是一个完整的KVM VM,消耗大约265KB的内存。Zeroboot为Python和TypeScript提供SDK,允许开发者轻松地在这些安全、短暂的环境中执行代码。 Zeroboot目前是一个可用的原型,尚未达到生产级成熟度,但它展示了在快速、安全地为AI应用提供沙箱方面的重大进展。

## 亚毫秒虚拟机沙箱与CoW分叉 Adam Miribyan 提出了一种使用 Firecracker 微型虚拟机和写时复制 (CoW) 内存分叉技术,实现快速、隔离代码沙箱的新方法。系统不是为每次执行启动新的虚拟机,而是先启动一次 Firecracker 并加载依赖项,然后快照虚拟机状态。后续执行通过使用 `MAP_PRIVATE` 映射快照内存来创建新的 KVM 虚拟机,利用 Linux 的 CoW 页面提高效率。 这带来了亚毫秒级的启动时间——比传统的容器或虚拟机方法快得多。虽然核心 CoW 机制并非新颖,但正确恢复快照的虚拟机证明具有挑战性。 讨论重点关注熵(分叉后需要重新播种的 RNG 状态)以及管理基础镜像更新的复杂性。该项目面向 AI 代理沙箱等用例,在这些用例中,快速执行至关重要,从而实现诸如推测并行执行之类的技术。提供了一个托管 API,支持多区域和自定义模板。初始开销约为 265KB,随工作负载内存使用量扩展,但受益于通过 CoW 实现的大量内存共享。
相关文章

原文

Zeroboot

Sub-millisecond VM sandboxes for AI agents via copy-on-write forking

License Rust API Status


demo

curl -X POST https://api.zeroboot.dev/v1/exec \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer zb_demo_hn2026' \
  -d '{"code":"import numpy as np; print(np.random.rand(3))"}'
Metric Zeroboot E2B microsandbox Daytona
Spawn latency p50 0.79ms ~150ms ~200ms ~27ms
Spawn latency p99 1.74ms ~300ms ~400ms ~90ms
Memory per sandbox ~265KB ~128MB ~50MB ~50MB
Fork + exec (Python) ~8ms - - -
1000 concurrent forks 815ms - - -

Each sandbox is a real KVM virtual machine with hardware-enforced memory isolation.

  Firecracker snapshot ──► mmap(MAP_PRIVATE) ──► KVM VM + restored CPU state
                              (copy-on-write)         (~0.8ms)
  1. Template (one-time): Firecracker boots a VM, pre-loads your runtime, and snapshots memory + CPU state
  2. Fork (~0.8ms): Creates a new KVM VM, maps snapshot memory as CoW, restores all CPU state
  3. Isolation: Each fork is a separate KVM VM with hardware-enforced memory isolation

Pythonsdk/python

from zeroboot import Sandbox
sb = Sandbox("zb_live_your_key")
result = sb.run("print(1 + 1)")

TypeScriptsdk/node

import { Sandbox } from "@zeroboot/sdk";
const result = await new Sandbox("zb_live_your_key").run("console.log(1+1)");

Working prototype. The fork primitive, benchmarks, and API are real, but not production-hardened yet. Open an issue if you're interested.

Apache-2.0

联系我们 contact @ memedata.com