ZeroBrew 是一个用 Rust 写的 Homebrew 替代品,安装软件包快得像闪电。今天我们来聊聊它为什么这么快,以及如何安全地试用它。
早上等 Homebrew 装软件,咖啡都凉了
你有没有过这种经历:早上打开电脑,想装个工具,敲下 brew install xxx,然后就开始等。等下载、等解压、等链接,等到你的咖啡都凉了,软件还在那慢悠悠地装着。
这就像你去超市买东西,明明只买一瓶水,却要排队等前面的人慢慢结账、慢慢装袋、慢慢找零钱。你心里想:能不能快点啊?
现在有个叫 ZeroBrew 的新工具,用 Rust 重写了 Homebrew 的核心逻辑。第一次装软件快 2 倍,重复装的话能快 20 倍。今天咱们就聊聊它为什么这么快,以及怎么安全地试用它。
ZeroBrew 是什么?为什么这么快?
ZeroBrew 就像是 Homebrew 的“涡轮增压版”。它用 Rust 重写了核心逻辑,并且借鉴了 Nix 的设计思路,把软件包管理变成了一件超快的事。
快在哪里?用超市来比喻
想象一下,传统的 Homebrew 就像这样:你去超市买东西,每次都要从货架上拿新的商品,结账时要一个一个扫码,装袋时要慢慢整理。
而 ZeroBrew 是这样的:
- 超市有个“智能仓库”,每个商品都有唯一的编号(SHA-256)。如果你之前买过,直接从仓库拿,不用再去货架找。
- 拿商品时不是真的“拿”,而是用魔法“复制”一份,几乎不占空间,速度超快。
- 多个收银台同时工作,不用排队。
- 下载、解压、链接同时进行,不用等一个步骤完成再开始下一个。
技术细节(给爱钻研的朋友)
ZeroBrew 的核心优化点:
- 内容寻址存储:软件包存在
/opt/zerobrew/store/{sha256},如果已经存在,重装就是秒级。
- APFS clonefile:利用 macOS 的写时复制技术,“复制”文件几乎不占磁盘空间,速度极快。
- 并行下载:多个包同时下载,避免重复请求。
- 流式处理:下载、解压、链接并发进行,不浪费时间。
- 复用 Homebrew bottle:从 Homebrew 的 CDN 拉取 bottle,并复用它们。
目录结构也很清晰:
/opt/zerobrew/
├─ store/ # 内容寻址存储(SHA-256 键)
│ ├─ Cellar/ # 实际的软件包
│ ├─ bin/ # 可执行文件的符号链接
│ └─ opt/ # 软件包目录的符号链接
├─ cache/ # 下载的 bottle 缓存
├─ db/ # SQLite 数据库
└─ locks/ # 文件锁
实测数据:到底快多少?
作者做了个基准测试:
| 软件包 |
Homebrew 时间 |
ZeroBrew 时间 |
提速倍数 |
| jq |
5.2s |
2.1s |
2.5× |
| git |
12.8s |
6.3s |
2.0× |
| wget |
8.4s |
3.9s |
2.2× |
| sqlite |
15.6s |
7.8s |
2.0× |
重复安装更快,因为 ZeroBrew 会直接从 store 里拿,几乎是秒装。
你可以自己跑个测试:
./benchmark.sh # 测试 top-100 包
./benchmark.sh --format html -o results.html # 生成 HTML 报告
./benchmark.sh -c 20 --quick # 快速测试 22 个包
怎么安全地试用?不影响现有的 Homebrew
你可能会担心:我现在用的好好的 Homebrew,万一 ZeroBrew 出问题怎么办?
别慌,ZeroBrew 和 Homebrew 可以和平共处,互不干扰。下面是我推荐的方案。
1. 安装 ZeroBrew
一行命令搞定:
curl -sSL https://raw.githubusercontent.com/lucasgelfond/zerobrew/main/install.sh | bash
安装完后,运行它提示的 export 命令(或者重启终端)。
安全提示:curl | bash 虽然方便,但不透明。如果你担心安全,可以先下载脚本看看,或者从源码编译:
git clone https://github.com/lucasgelfond/zerobrew
cd zerobrew
cargo build --release
cargo install --path zb_cli
2. 试着装几个常用工具
先从几个你熟悉的工具开始:
zb install jq # 装一个
zb install wget git # 装多个
zb uninstall jq # 卸载
zb reset # 卸载所有 ZeroBrew 管理的包
zb gc # 垃圾回收,清理不用的 store 条目
3. 设置智能回退(推荐)
在你的 ~/.zshrc 或 ~/.bashrc 里加上这个:
br() {
if zb "$@" 2>/dev/null; then
return 0
else
echo "[br] zb 处理不了 '$*',自动切换到 brew..."
brew "$@"
fi
}
这样,你就可以用 br install xxx 来装软件。如果 ZeroBrew 支持,就用它(快);如果不支持,自动切换到 Homebrew(稳)。
4. 选择高收益的包
不是所有包都值得用 ZeroBrew 装。优先选这些:
- jq、git、wget、ripgrep、fd、sqlite 这些常用的开发工具。
- 你在多台机器上都要装的工具。
- 基准测试里表现好的包,比如 node、python、go。
5. 在 CI/CD 里用 ZeroBrew
如果你有 macOS 的 CI 环境,ZeroBrew 的缓存机制能帮你省大量时间。这也正是运维/DevOps工作中持续优化效率的体现。
# GitHub Actions 示例
- name: Cache ZeroBrew store
uses: actions/cache@v3
with:
path: /opt/zerobrew/store
key: zerobrew-${{ hashFiles('**/Brewfile') }}
- name: Install dependencies
run: zb install jq git wget ripgrep fd
定期运行 zb gc 来控制缓存大小。
迁移与恢复:万一出问题怎么办?
- 先装 5-10 个你熟悉的包,看看效果。确认这些包能正常工作。如果没问题,再扩展到更多包。
- 如果你不想用了,卸载很简单:
zb reset # 卸载所有 ZeroBrew 管理的包
sudo rm -rf /opt/zerobrew # 删除 ZeroBrew 目录
hash -r # 清除 shell 命令缓存
ZeroBrew 的所有东西都在 /opt/zerobrew 里,删掉就完事了,不会影响 Homebrew。
- 注意
$PATH 顺序:ZeroBrew 和 Homebrew 都会把可执行文件链接到 /usr/local/bin。如果你想优先用某一个,确保你的 $PATH 里把它放在前面:
# 优先用 ZeroBrew
export PATH="/opt/zerobrew/store/bin:$PATH"
# 或者用上面的 br() 函数,自动回退
- 目前 ZeroBrew 主要支持核心的命令行工具。GUI 应用(Casks)和非核心 Taps 继续用 Homebrew,核心 CLI 工具用 ZeroBrew。
什么时候应该继续用 Homebrew?
ZeroBrew 虽然快,但不是万能的。以下情况建议继续用 Homebrew:
- 你依赖非核心 Taps 或冷门的 formula。
- 你的工作流深度依赖 Homebrew 内部机制(比如自定义 tap、formula 开发)。
- 你需要管理大量 GUI 应用(Casks)。
好消息是,ZeroBrew 和 Homebrew 可以并存,各取所长。
几个实用技巧
定期清理缓存:ZeroBrew 的 store 会越来越大,定期清理一下:
zb gc # 清理不用的 store 条目
你可以设置个 cron 任务,每周自动清理:
# 每周日凌晨 2 点清理
0 2 * * 0 /usr/local/bin/zb gc
一键恢复开发环境:把你常用的工具写成脚本,换机器时一键恢复:
#!/bin/bash
# bootstrap.sh
set -euo pipefail
packages=(jq git wget ripgrep fd sqlite node python go)
zb install "${packages[@]}"
echo “开发环境恢复完成!”
跑基准测试:想知道 ZeroBrew 对你的工具栈提速多少?跑个测试:
./benchmark.sh -c 20 --quick
open results.html
常见坑与对策
-
zb install xxx 报错,说找不到 formula。
- 原因:ZeroBrew 目前主要支持核心 formula,一些冷门的可能还不支持。
- 对策:用上面的
br() 函数,自动回退到 Homebrew。
-
装完 ZeroBrew 后,某些命令还是用的 Homebrew 版本。
-
/opt/zerobrew/store 越来越大。
- 原因:ZeroBrew 会缓存所有装过的包。
- 对策:定期运行
zb gc 清理。
总结
- ZeroBrew 用 Rust 重写了 Homebrew 的核心逻辑,速度快 2-20 倍。
- 和 Homebrew 并存,优先用 ZeroBrew 装常用工具,冷门的继续用 Homebrew。
- 核心技术是内容寻址存储、APFS clonefile、并行下载和流式处理。
下一步
- 安装 ZeroBrew:
curl -sSL https://raw.githubusercontent.com/lucasgelfond/zerobrew/main/install.sh | bash
- 试装几个常用工具:
zb install jq git wget
- 设置智能回退函数(见上文)
- 跑个基准测试,看看提速多少
- 在 CI/CD 里试用,缓存 store 目录
小抄(Cheatsheet)
# 安装 ZeroBrew
curl -sSL https://raw.githubusercontent.com/lucasgelfond/zerobrew/main/install.sh | bash
# 基本操作
zb install jq # 安装
zb uninstall jq # 卸载
zb reset # 卸载所有
zb gc # 垃圾回收
# 智能回退函数(加到 ~/.zshrc)
br() {
if zb “$@” 2>/dev/null; then
return 0
else
echo “[br] zb 处理不了 ‘$*’,自动切换到 brew…”
brew “$@”
fi
}
# 基准测试
./benchmark.sh -c 20 --quick
open results.html
如果你也深受软件安装缓慢的困扰,不妨试试这个全新的思路。更多关于开发效率提升的工具和讨论,欢迎来云栈社区交流分享。