zerobrew:用 Rust 把 Homebrew 提速 5-20 倍的包管理器

目录
[隐藏]

核对时间:2026-08-19。整理自 GitHub 仓库 lucasgelfond/zerobrew 的 README(含中文版)、CHANGELOG、官网 zerobrew.rs。zerobrew 迭代很快,命令以你本地 zb --help 和仓库当前 README 为准。

zerobrew 是个用 Rust 写的 Homebrew 替代品,口号是"即插即用、快 5–20 倍"。它是把 uv(Python 包管理器)那套架构搬到 Homebrew 上。文章分三块:

  1. 快速上手:它是什么、为什么快,装好并跑通第一个包;
  2. 安装与使用:常用命令、Brewfile、从 Homebrew 迁移、源码构建、维护;
  3. 实践经验:日常技巧、坑和注意点。

如果你苦于 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)让 zbzbx 进 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 起支持无交互的批量模式,一次迁移全部包)。大致流程:

  1. brew bundle dump 先备份;
  2. zb migrate 自动扫描;
  3. 按提示批量或逐个迁;
  4. 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 这类守护进程管理,才谈得上真正搬家。

参考