zerobrew:用 Rust 把 Homebrew 提速 5-20 倍的包管理器
- 工具软件
- -475分钟前
- 3热度
- 0评论

核对时间:2026-08-19。整理自 GitHub 仓库
lucasgelfond/zerobrew的 README(含中文版)、CHANGELOG、官网 zerobrew.rs。zerobrew 迭代很快,命令以你本地zb --help和仓库当前 README 为准。
zerobrew 是个用 Rust 写的 Homebrew 替代品,口号是"即插即用、快 5–20 倍"。它是把 uv(Python 包管理器)那套架构搬到 Homebrew 上。文章分三块:
- 快速上手:它是什么、为什么快,装好并跑通第一个包;
- 安装与使用:常用命令、Brewfile、从 Homebrew 迁移、源码构建、维护;
- 实践经验:日常技巧、坑和注意点。
如果你苦于 Homebrew 慢,又不想改用 brew 的包管理器,zerobrew 或许就是你想要的。
一、快速上手
1.1 它是什么
- 定位:macOS / Linux 上的 Homebrew 替代品,Rust 编写;
- 思路:复用 Homebrew 的基础设施(formula 定义、官方预编译 bottle、元数据、CDN),只把"客户端引擎"换成 Rust。可以把它想成 Homebrew 生态的高性能前端;
- 现状:截至 2026-08-19,仓库约 7.5k+ star、392 commits;最新正式版 v0.3.2(2026-06-11,修了 CVE-2026-53970);
- 许可:MIT 或 Apache-2.0。
一句话:想留着 Homebrew 的软件生态、又嫌它慢,zerobrew 就是换个更快的引擎。
1.2 为什么快
zerobrew 的快来自几处工程取舍:
| 技术手段 | 作用 |
|---|---|
| 内容寻址存储 | 每个文件按内容哈希存一份,跨包重复的文件不重复占空间,重装近乎零成本(类似 Docker 镜像层) |
APFS clonefile |
macOS 上用文件系统快照拷贝(写时复制),复制几乎瞬时 |
| 并行下载 + 流式解压 | 多任务并发拉取、边下边装,吃满带宽和多核 |
| 复用 Homebrew 官方 CDN | 下载源不变,bottle 仍从官方拉,兼容有保障 |
| Rust 实现 | 编译型语言 + tokio 并发,启动快、内存低 |
装好后的数据目录结构(root 安装默认前缀 /opt/zerobrew,用户级安装落在 ~/.local/share/zerobrew,以安装脚本打印为准):
/opt/zerobrew/
├── store/ # 内容寻址存储,所有包的只读层,按哈希去重
├── cache/ # 元数据、索引缓存
├── db/ # SQLite 数据库,记录已安装状态
└── locks/ # 并发锁
1.3 官方性能数据
README 给的基准测试(Apple Silicon,清缓存冷启动计时):
| 场景 | Homebrew | zerobrew 冷启动 | zerobrew 热启动 |
|---|---|---|---|
| Top 100 公式批量安装 | 452s | 226s(2.0x) | 59s(7.6x) |
ffmpeg |
基准 | 0.9x(略慢) | 4.4x |
libsodium |
基准 | 6.0x | 18.1x |
sqlite |
基准 | 4.6x | 18.1x |
tesseract |
基准 | 3.4x | 29.5x |
ffmpeg 这种依赖很多的大家伙,冷启动反而略慢于 Homebrew(首次要解包大量依赖),热启动仍快 4 倍以上。结论很明显:小包、重复安装/升级收益最大;大型依赖树首次安装收益有限,甚至可能更慢。
1.4 和 Homebrew 的关系
- zerobrew 设计上不是为了替换 Homebrew,两者可并行安装使用,它们的前缀和数据库各自独立、互不干扰;
- 官方明确建议:用 zerobrew 作为 Homebrew 的补充
- 对 Homebrew 已经装好的软件,zerobrew 不会感知,反之亦然。切换前需要重新安装一遍目标软件。
1.5 跑通第一个包
安装完(见下一节),先确认命令进了 PATH:
zb --version
装个小包验证链路通不通:
zb install jq
zb list # 看已装列表,确认 jq 在
jq --version # 能直接跑,说明链接成功
能输出版本号就说明整条链路通了。
二、安装与使用
2.1 安装
官方脚本(推荐):
curl -fsSL https://zerobrew.rs/install | bash
脚本下载二进制、写 shell 配置。装完重开终端(或按提示 source)让 zb、zbx 进 PATH。curl | bash 建议先存下来看一眼再跑:
curl -fsSL https://zerobrew.rs/install -o install.sh
# 确认 install.sh 无误,再 bash install.sh
走 Homebrew 也行:
brew install lucasgelfond/zerobrew/zerobrew
2.2 更新 zb 本体
- 脚本装的:重跑安装脚本覆盖升级;
- Homebrew 装的:
brew update && brew upgrade zerobrew; - 区分两个命令:
zb update更新 formula 索引(=brew update),zb upgrade升级已装包(=brew upgrade)。
2.3 常用命令
| 命令 | 作用 | 对应 Homebrew |
|---|---|---|
zb install <formula> |
安装 | brew install |
zb uninstall <formula> |
卸载 | brew uninstall |
zb search <关键词> |
搜 formula | brew search |
zb info <formula> |
看公式详情/依赖 | brew info |
zb list |
列出已装 | brew list |
zb outdated |
列出可升级(--quiet/--verbose/--json) |
brew outdated |
zb upgrade |
升级全部/指定包(--build-from-source、--no-link) |
brew upgrade |
zb bundle |
按 Brewfile 装依赖 | brew bundle |
zb bundle dump |
导出当前环境为 Brewfile | brew bundle dump |
zb reset |
清掉已装、回到刚装好的状态 | — |
zb gc |
清理孤立存储 | brew cleanup 近似 |
zb doctor |
诊断,--repair 自动修 |
brew doctor |
zbx <command> |
临时隔离环境跑命令,不写 store | — |
每条命令都能 --help;全局 -v/-q 控日志详细度。
2.4 Brewfile
zerobrew 支持 Brewfile,方便整套环境"搬家"或备份:
zb bundle dump # 导出当前已装到 Brewfile
zb bundle install -f # 按 Brewfile 批量装,已装跳过,-f 强制重装
如果你已在用 brew bundle,生成的 Brewfile 同样是 brew/tap/cask 条目,zerobrew 的 zb bundle 可以直接消费常见的 Homebrew 风格 Brewfile。
2.5 从 Homebrew 迁移:zb migrate
v0.2.0 起提供了 zb migrate 命令,可扫描 Homebrew 已安装的 formula 并批量迁移(v0.2.0 起支持无交互的批量模式,一次迁移全部包)。大致流程:
brew bundle dump先备份;zb migrate自动扫描;- 按提示批量或逐个迁;
zb outdated/zb upgrade确认正常。
边界:官方只迁 homebrew/core 的 formula,cask(GUI 应用)和第三方 tap 不在范围内,这些留在 Homebrew。所以迁移后"Homebrew + zerobrew 并行"是常态。
2.6 源码构建与自定义安装
有的公式没官方 bottle,或你想本地编译:
# 强制源码构建(-s 是 --build-from-source 的简写)
zb install -s <formula>
zb upgrade --build-from-source
zerobrew 装不上时,会回退用 Homebrew 的 Ruby DSL 在本地构建,这是它兼容性的兜底方案。此外它支持:
- 外部 tap 和 cask(v0.1.2 起);
- GitHub Release 直装:可以从 GitHub Releases 直接安装二进制(对不在 homebrew-core 的工具很实用)。
三、实践经验与使用技巧
3.1 与 Homebrew 并行:智能回退函数
zerobrew 不是所有包都能装,在 shell 配置里加个包装函数,优先 zb、装不上回退 brew:
br() {
if zb install "$1" 2>/dev/null; then
echo "✔ 已通过 zerobrew 安装: $1"
else
echo "→ 回退到 Homebrew: $1"
brew install "$1"
fi
}
# br ffmpeg
# br some-cask-app # cask 自动走 brew
3.2 日常技巧
zbx临时运行:不想把某个包"装进"环境时,用zbx <command>在隔离环境里跑,用完即走,适合工具链冲突场景;- 定期
zb gc:内容寻址存储按哈希去重,但长期安装/升级会留下孤儿数据,存储体积会膨胀。社区反馈"用一段时间后 store 明显变大",养成定期zb gc的习惯; - CI/CD 加速:内容寻址存储天然适合做缓存——CI 里把
/opt/zerobrew/store作为缓存目录,restore-keys按分支缓存,任务冷启动装包时间可从分钟级降到秒级; zb doctor --repair:遇到奇怪的损坏(符号链接断掉、存储孤儿项)先跑它,v0.3.0 起支持自动修复,比手动清 store 安全;- 模糊匹配建议:找不到公式时,zb 会给出"你是不是要找 xxx"的推荐(v0.2.0 起),利用它快速纠正拼写错误;
ZEROBREW_API_URL环境变量:需要自建镜像/代理场景可指向自定义 API 地址,元数据还会持久化缓存,网络不稳时重复查询不重复拉取;--no-link:和 Homebrew 的 keg-only 同理,不想污染 PATH 时可以只安装不链接。
3.3 注意事项与常见问题
兼容范围有限。README 明确标注是"实验性"项目,官方支持范围以 homebrew/core 为主。cask、第三方 tap、Linux 上的部分特性都在演进中,遇到装不上的包,先查 GitHub Issues,大概率已有讨论或 workaround。
PATH 冲突。zb 和 brew 都会往 PATH 里加自己的 bin/,若两套都装了同名工具,执行的是哪个取决于 PATH 顺序。建议二选一管理常用工具,或用上面"智能回退"的思路统一入口。
存储体积管理。/opt/zerobrew/store 会随着安装历史增长,配合 zb gc + 定期 zb outdated 清理不用的包。若磁盘紧张,避免在容器/CI 里重复创建全新 store,尽量复用缓存。
安全与供应链。官方安装脚本是 curl | bash,建议先审阅再执行;bottle 的校验依赖上游 Homebrew 基础设施;历史上有安全修复(如 v0.3.2 的 CVE-2026-53970),记得及时升级 zb 本体。
卸载。目前没有官方 uninstall 子命令(zb reset 只重置安装状态)。社区实践是:移除 zb/zbx 二进制、删掉 ~/.local/share/zerobrew(或安装脚本输出提示的数据目录)与 /opt/zerobrew,再清理 shell 配置里的 PATH 条目。具体路径以安装脚本打印的输出为准,不同版本可能不同。
3.4 故障排查思路
zb --help # 确认命令与参数,版本不同可能不同
zb doctor # 自检,--repair 自动修
zb -v <cmd> # 开详细日志定位
还不行就带 zb -v 输出、版本号、OS、zb doctor 结果去 GitHub Issues。
总结
zerobrew 适合当 Homebrew 的并行补充:小包交给 zb 提速,GUI 和特殊 tap 留 brew,回退函数让两者无缝。它仍是实验性项目,兼容范围、store 打理、PATH 规划都得自己操心。等哪天补齐 cask、tap 和 brew services 这类守护进程管理,才谈得上真正搬家。