事情得从一次“认知颠覆”说起。我原以为在追求极致性能的系统编程领域,Rust已经做到了天花板,直到看到了NullClaw这个项目。

在我看到ZeroClaw(OpenClaw的Rust重写版)之后,这件事在我看来基本就尘埃落定了。ZeroClaw将原来Node.js版本动辄400MB起步的内存占用,直接压缩到一个3.4MB的二进制文件,启动速度更是天壤之别。我当时心想,语言性能之争可以告一段落了。
然后,NullClaw带着它678KB的二进制体积和约1MB的内存占用出现了。

这个数字让我愣了几秒。一个功能完整的自主AI助手框架,能在价值30多元的硬件上运行?这迫使我重新审视不同编程语言在特定场景下的设计哲学与工程实践。
背景:OpenClaw家族的演化之路
要理解NullClaw的意义,得先了解OpenClaw是什么。

OpenClaw本质上是一套为AI赋予“眼睛”和“手”的框架。“眼睛”是各种消息渠道(如Telegram、Discord),“手”是各种可执行工具,框架核心则负责让AI自主决策何时使用何种能力。
其原始版本由TypeScript编写,运行在Node.js上。虽然开发体验友好,但沉重的运行时开销使其难以部署在资源受限的环境中(例如廉价的VPS)。于是,这个家族开始了一段有趣的性能进化史:
| 实现 |
语言 |
空闲内存 |
启动时间 |
二进制大小 |
| OpenClaw |
TypeScript |
~850 MB |
>3 秒 |
需要 Node 运行时 |
| NanoBot |
Python |
~120 MB |
>1 秒 |
需要 Python 运行时 |
| PicoClaw |
Go |
~8 MB |
~50 ms |
~7.2 MB |
| NullClaw |
Zig |
~1 MB |
<2 ms |
678 KB |
这张对比表直观地展示了从动态语言到编译型语言,再到追求极致零开销的Zig所带来的数量级差异。
深度剖析:Zig为何能做到如此极致?
看到这些数据,第一个疑问是:这是如何做到的?仅仅归因于“Zig快”未免过于笼统。
1. 二进制体积:编译期的胜利
Rust生成3-5MB的二进制已经非常出色,但Zig能更进一步。关键在于设计哲学:
- 错误处理:Rust默认包含panic处理和错误传播基础设施,这些都会增加体积。Zig的错误处理是编译期概念,运行时无额外开销。
- 内存模型:Rust的所有权系统为了保证安全,会在代码中插入守卫逻辑。Zig遵循“显式优于隐式”的原则,程序员对内存操作拥有完全控制,没有隐藏的控制流,使得编译器能够进行更激进的优化。
- 编译模式:Zig的
-Doptimize=ReleaseSmall模式是专为最小化二进制体积设计的,配合其优秀的链接器,能剔除所有冗余。
2. 内存占用:架构设计的功劳
1MB的空闲内存并非魔术,而是模块化架构的结果。NullClaw的核心设计是将复杂性推向边缘,保持调度器(Orchestrator)极度精简。
数据流向:
[外部消息: Telegram/Discord/Slack]
│
▼
[Channel Adapter]
│
▼
[Core Orchestrator] ◄──── [Identity Config / Persona]
│ │
▼ ▼
[Memory [Tool
Engine] Sandbox]
│ │
▼ ▼
[SQLite] [允许命令
向量+关 白名单]
键词混合
检索]
│ │
└────┬────┘
▼
[LLM Provider]
OpenAI/Anthropic
/Ollama/Gemini...
│
▼
[Response 返回给 Channel]
如上图所示,内存引擎、工具沙箱等都是独立模块。主进程仅负责路由消息,不使用的模块不会常驻内存。这种高度解耦的设计是低内存占用的基石。
哲学思考:Zig vs. Rust,不同场景的最优解
这个案例清晰地区分了Rust和Zig的核心适用场景。
- Rust 的 Borrow Checker 解决了在复杂所有权、多人协作场景下的内存安全问题,这是其无可替代的优势。
- Zig 则在对内存模型有清晰、明确控制需求的场景下大放异彩。当数据的生命周期和流向非常明确时,Rust的所有权检查有时会显得“过度保护”,而Zig的显式哲学让开发者意图和最终生成的机器码都更加直接。
此外,Zig在工程实用性上的优势不容忽视,尤其是其一流的交叉编译体验,几乎可以做到一条命令编译出面向任何目标平台的静态链接二进制文件,这对于边缘部署场景至关重要。
实践:快速体验NullClaw
理论的尽头是实践。在本地运行NullClaw的体验异常顺畅:
# 第一步:克隆仓库
git clone https://github.com/nullclaw/nullclaw.git
cd nullclaw
# 第二步:用 ReleaseSmall 模式构建(这才能得到678KB)
zig build -Doptimize=ReleaseSmall
# 第三步:交互式初始化(配Provider、配渠道)
./zig-out/bin/nullclaw onboard --interactive
# 第四步:直接发消息给Agent
./zig-out/bin/nullclaw agent -m “Hello!”
整个过程没有npm install,没有虚拟环境,没有Docker。10秒内构建完成,生成的二进制文件拷贝到任何兼容设备上即可运行。这种体验重新定义了“轻量级AI基础设施”的可行性。
理性看待:不是银弹,而是特化工具
当然,NullClaw并非万能。它目前支持22+个AI提供商和13个消息渠道,内置混合检索内存引擎和工具沙箱,功能密度令人惊叹。但其生态成熟度、插件丰富度和文档完善度与OpenClaw原版仍有差距。
如何选择?
- 需要快速搭建功能全面、有团队协作需求的Agent平台:建议选择OpenClaw原版或ZeroClaw。
- 目标部署环境是树莓派、廉价VPS或IoT等资源受限设备:NullClaw是绝佳选择。
- 希望研究极致轻量的AI基础设施实现:NullClaw的代码是非常好的学习对象。
结语
从TypeScript到Rust,再到Zig,OpenClaw家族的演进像是一场不断逼近物理极限的性能实验。它揭示的并非简单的“语言优劣”,而是一个更深刻的道理:技术选型的核心在于精准匹配问题域与约束条件。
Zig通过NullClaw证明,在追求极致轻量、明确内存模型和无依赖部署的场景下,其“显式与零开销”的设计哲学具有独特优势。这种在各自领域做到极致的“卷”,正是推动技术边界向前拓展的健康动力。对于开发者而言,保持开放心态,深入了解不同工具的特性,才能在云栈社区这样的技术交流场中,找到最适合当下挑战的解决方案。
引用链接
[1] ZeroClaw: https://github.com/zeroclaw-labs/zeroclaw
[2] OpenClaw: https://github.com/openclaw/openclaw