早上等 Homebrew 装软件,咖啡都凉了

你有没有过这种经历:早上打开电脑,想装个工具,敲下 brew install xxx,然后就开始等。等下载、等解压、等链接,等到你的咖啡都凉了,软件还在那慢悠悠地装着。

这就像你去超市买东西,明明只买一瓶水,却要排队等前面的人慢慢结账、慢慢装袋、慢慢找零钱。你心里想:能不能快点啊?

现在有个叫 ZeroBrew 的新工具,用 Rust 重写了 Homebrew 的核心逻辑。第一次装软件快 2 倍,重复装的话能快 20 倍。今天咱们就聊聊它为什么这么快,以及怎么安全地试用它。

ZeroBrew 是什么?为什么这么快?

ZeroBrew 就像是 Homebrew 的"涡轮增压版"。它用 Rust 重写了核心逻辑,并且借鉴了 Nix 的设计思路,把软件包管理变成了一件超快的事。

快在哪里?用超市来比喻

想象一下,传统的 Homebrew 就像这样:你去超市买东西,每次都要从货架上拿新的商品,结账时要一个一个扫码,装袋时要慢慢整理。

而 ZeroBrew 是这样的:

超市有个"智能仓库",每个商品都有唯一的编号(SHA-256)。如果你之前买过,直接从仓库拿,不用再去货架找。拿商品时不是真的"拿",而是用魔法"复制"一份,几乎不占空间,速度超快。多个收银台同时工作,不用排队。下载、解压、链接同时进行,不用等一个步骤完成再开始下一个。

技术细节(给爱钻研的朋友)

ZeroBrew 的核心优化点:

软件包存在 /opt/zerobrew/store/{sha256},如果已经存在,重装就是秒级。macOS 的写时复制技术(APFS clonefile),“复制"文件几乎不占磁盘空间,速度极快。多个包同时下载,避免重复请求。下载、解压、链接并发进行,不浪费时间。从 Homebrew 的 CDN 拉取 bottle,并复用它们。

目录结构也很清晰:

/opt/zerobrew/
├─ store/     # 内容寻址存储(SHA-256 键)
│  ├─ Cellar/ # 实际的软件包
│  ├─ bin/    # 可执行文件的符号链接
│  └─ opt/    # 软件包目录的符号链接
├─ cache/     # 下载的 bottle 缓存
├─ db/        # SQLite 数据库
└─ locks/     # 文件锁

实测数据:到底快多少?

作者做了个基准测试:

软件包Homebrew 时间ZeroBrew 时间提速倍数
jq5.2s2.1s2.5×
git12.8s6.3s2.0×
wget8.4s3.9s2.2×
sqlite15.6s7.8s2.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 的缓存机制能帮你省大量时间:

# 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。

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 版本。$PATH 里 Homebrew 的路径在前面。调整 $PATH,把 ZeroBrew 的路径放前面:

export PATH="/opt/zerobrew/store/bin:$PATH"

/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

你觉得这篇文章有用吗?

如果你也被 Homebrew 的速度折磨过,或者对 ZeroBrew 感兴趣,不妨试试看。

你平时最常用 Homebrew 装哪些工具?装得最慢的是哪个?欢迎在评论区聊聊。

如果这篇文章对你有帮助,点个赞让更多人看到这个提速神器,或者转发分享给可能需要的朋友。关注梦兽编程,不错过更多实用的开发工具和技巧。

你的支持是我持续创作的最大动力!