最近又重新用Mac作为开发环境,于是对Homebrew相关的概念(或项目)稍微关注一下;进一步,搜集相关开源项目,记录得到本文。
题外话:很多次看到某某项目志在成为Homebrew的平替,可是这么多年下来,还是没有哪个成功过。
Homebrew在macOS包管理领域的地位稳固得一逼,这背后是一个由技术、生态、用户体验和社区网络共同构筑的护城河。
| 原因维度 | 具体分析 |
|---|---|
| 先发与网络效应 | Homebrew是第一个成功解决macOS缺乏主流包管理器痛点的项目。海量用户、教程、脚本都围绕它构建,形成巨大的转换成本。新项目面临"鸡生蛋蛋生鸡"的生态困境 |
| 庞大而成熟的生态 | Homebrew拥有超万款软件包(Formula),覆盖开发、工具到桌面应用的方方面面。二进制预编译包大大提升安装速度和成功率。这是任何新项目短期内难以企及的核心资源 |
| 与系统的深度集成 | Homebrew的安装路径、权限管理等设计已与macOS及开发者的工作流深度融合。谨慎地遵循Unix传统和macOS的目录结构,保证出色的系统兼容性和稳定性 |
| 持续的迭代与改进 | Homebrew团队始终保持活跃更新,不断改进性能(如增量更新)、增加功能(如官方支持AppleSilicon)。这使得它总能化解部分"平替"项目的性能或功能优势 |
| 强大的社区与品牌 | brew install已成为macOS开发者社区的常识和流行语。这种强大的品牌心智和社区认同,是新项目难以逾越的无形壁垒 |
但是,这些挑战者的价值不容忽视。它们像鲶鱼一样,持续刺激Homebrew自身进行优化(例如加快速度、改善用户体验),最终让整个社区受益。
作为Mac用户,看个人需求,不用Homebrew,则可以直接无视本文;若有简单使用,可大致浏览前面章节;若对Homebrew生态有兴趣,可以往下翻阅。当然本文并不会很深入,简单介绍,入门实战。
Homebrew
官网,开源(GitHub,46.6K Star,11K Fork)。几乎是装机必备的包管理工具。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
命令行:
bash
brew search
brew info
brew install
brew install --verbose --debug FORMULA|CASK
brew update
brew upgrade
brew uninstall
brew list
brew config
brew doctor
brew create URL [--no-fetch]
brew edit
brew commands
操作示意图



Formula和Cask
| 特性 | Formula(公式) | Cask(木桶) |
|---|---|---|
| 管理的软件类型 | 命令行工具、开发库、服务(如wget,python) |
GUI应用程序(如chrome) |
| 安装目标位置 | 通常安装在/usr/local/Cellar(Intel)或/opt/homebrew/Cellar(AppleSilicon)下,并链接到系统路径。 |
通常直接安装到/Applications目录,和手动拖拽安装一样 |
| 软件包格式 | 通常是从源码编译,或安装预编译的二进制命令行程序 | 下载并解压官方提供的.dmg或.pkg等macOS应用程序包 |
| 使用命令 | 如brew install node |
如brew install --cask firefox |
| 比喻 | 原料和厨房工具,在后台用来制作东西的 | 成品菜肴:直接端上桌,开盖即用 |
从Homebrew 2.0开始,安装图形应用通常需要加上--cask参数。但许多常见应用(如firefox)即使不加参数,Homebrew也能智能识别并作为Cask安装。
无论Formula还是Cask,本质都是用Ruby编写的文件,定义:
- 软件的名称、描述、版本;
- 软件的源代码地址或下载地址;
- 软件的依赖关系;
- 安装步骤(对于Formula可能是编译指令,对于Cask则是解压和拷贝指令);
- 配置选项等。
dmg和pkg
.dmg和.pkg,两种格式都是macOS上分发和安装软件的常见方式,但交互和集成深度不同。
| 特性 | .dmg |
.pkg |
|---|---|---|
| 本质 | 磁盘映像文件,类似于一个虚拟U盘或光盘 | 安装程序包,包含一个由"安装器"应用程序执行的标准化安装脚本 |
| 安装体验 | 手动拖拽。打开后,通常需要将应用图标拖到/Applications的快捷方式上 |
向导式安装。双击后运行图形化的安装向导,用户点击继续即可完成 |
| 安装内容 | 通常只包含应用程序本身,有时附带一个指向应用程序文件夹的快捷方式 |
可以安装更复杂的内容:包括应用程序、系统框架、配置文件、后台服务等 |
| 系统集成 | 较浅。通常只是把应用拷贝到指定位置 | 较深。可以在系统级目录安装文件、运行安装后脚本、需要管理员密码授权 |
| 卸载方式 | 直接删除。从/Applications拖到废纸篓即可 |
可能需要专用卸载程序,或使用系统偏好设置中的移除功能(如果支持) |
| 典型用途 | 分发大多数独立的桌面应用程序,如Chrome | 分发需要深度系统集成的软件,如驱动程序、开发工具链、企业软件 |
| 与Cask关系 | 自动下载.dmg文件,挂载它,将其中的应用程序复制到/Applications,后卸载.dmg,全程自动化 |
会调用系统安装器以静默模式运行,无需用户点击 |
Tap
Brewfile
Brewfile包含所有Homebrew安装过的软件、Mac App Store应用、全局npm包等,作用是为开发环境提供一份完整配方,方便在新机器上快速重建。
命令行使用:
bash
# Homebrew自动扫描当前已安装的所有内容,并生成Brewfile
brew bundle dump --describe --force
# 安装所有依赖
brew bundle install
# 检查当前系统是否符合Brewfile描述
brew bundle check
# 卸载Brewfile中未列出的、通过Homebrew安装的软件
brew bundle cleanup
# 列出Brewfile中所有条目
brew bundle list
# 在Brewfile环境上下文中执行命令
brew bundle exec <命令>
Brewfile文件示例:
# 1. 首先指定使用的Taps(软件源仓库)
tap "homebrew/cask"
tap "homebrew/core"
tap "homebrew/bundle" # Brewfile功能本身所在的Tap
tap "adoptopenjdk/openjdk" # 第三方Tap示例:Java发行版
# 2. 命令行工具 (Formulae)
brew "node" # Node.js
brew "python@3.11" # 指定版本的Python
brew "mas" # Mac App Store命令行工具
# 3. 图形应用程序 (Casks)
cask "google-chrome"
# 4. 安装Mac App Store应用程序(需要先安装mas)
mas "Xcode", id: 497799835 # Xcode
mas "Things 3", id: 904280696 # 任务管理
mas "Magnet", id: 441258766 # 窗口管理(App Store版)
# 5. 安装全局npm包(通过Homebrew安装的node)
npm "typescript", global: true
npm "yarn", global: true
npm "@angular/cli", global: true
# 6. 启动服务(通过brew services管理)
service "mysql" # 安装mysql Formula后,可设置开机启动
service "redis", args: ["start"] # 启动redis服务
Applite
官网,开源(GitHub,6.4K Star,168 Fork)现代化的Homebrew GUI工具,
Zerobrew
开源(GitHub,5.4K Star,131 Fork)基于Rust的项目Zerobrew,旨在成为一个更快、更现代的Mac包管理器,带来前所未有的极速体验。官方文档。
核心思想是借鉴近年来在Python社区大放异彩的超高速工具uv的设计模型,并将其巧妙地应用于Mac软件包管理。通过一系列创新设计,它实现令人惊叹的性能提升,冷启动安装速度可达Homebrew的5倍,而热启动(缓存命中)安装速度更是高达20倍!
GitHub官方披露的基准测试报告
| Package | Homebrew | ZB(cold) | ZB(warm) | ColdSpeedup | WarmSpeedup |
|---|---|---|---|---|---|
| Overall(top100) | 452s | 226s | 59s | 2.0x | 7.6x |
| ffmpeg | 3034ms | 3481ms | 688ms | 0.9x | 4.4x |
| libsodium | 2353ms | 392ms | 130ms | 6.0x | 18.1x |
| sqlite | 2876ms | 625ms | 159ms | 4.6x | 18.1x |
| tesseract | 18950ms | 5536ms | 643ms | 3.4x | 29.5x |
先进的架构设计:
- 内容可寻址存储(Content-addressable store):所有软件包都根据其内容的
sha256哈希值存储在/opt/zerobrew/store/{sha256}/目录下。如果一个特定版本的软件包已经被安装过一次,后续任何需要它的安装请求都无需重新下载或解压,而是直接复用,实现"秒装"。 - APFS
clonefile技术:当从store中将软件包安装到指定位置时,利用苹果文件系统(APFS)的写时复制(copy-on-write)特性。这会创建一个几乎不占用额外磁盘空间的克隆文件,极大提升链接速度和磁盘效率。 - 并行下载与流式执行:能够并行处理多个下载任务,并对进行中的请求进行去重。更重要的是,下载、解压和链接等步骤会以流式(Streaming)方式并发执行,一个包还没下载完,另一个包的解压可能已经开始,最大化地利用了系统资源和网络带宽。
- 复用Homebrew CDN:直接从Homebrew官方CDN下载预编译好的二进制包(bottles)。保证软件包来源的稳定性和可靠性,同时也能够无缝访问Homebrew庞大的软件生态。
实战
安装:
bash
curl -sSL https://raw.githubusercontent.com/lucasgelfond/zerobrew/main/install.sh | bash
安装过程中,会检查系统架构(如aarch64-apple-darwin)和是否已经安装Rust及其生态工具:

使用:命令设计与Homebrew非常相似,学习和迁移成本极低,可轻松地将brew替换为zb来执行常用操作。
bash
zb install jq
# 同时安装多个包
zb install wget git
zb uninstall jq
# 基于manifest文件安装
zb install --file Brewfile
# 当前目录中Brewfile的简写
zb bundle
# 清空所有已安装包
zb reset
# 垃圾回收:清理未被使用的store条目
zb gc
Cakebrew
官网,开源(GitHub,5K Star,256 Fork)Homebrew GUI工具。
安装:brew install --cask cakebrew。
Whalebrew
官网,开源(GitHub,4.2K Star,108 Fork)项目,用Docker容器化方式运行命令行工具,实现环境隔离。
WailBrew
官网,为Homebrew提供一套简洁直观的开源(GitHub,1.9K Star,78 Fork)可视化GUI,使用Wails框架开发,结合Go的后端效能与React的灵活性。
能够直观展示所有已安装的软件包,支持一键检查更新、安装新软件或卸载旧应用,清晰查看复杂的依赖关系。 执行系统诊断,完全不需要记忆复杂的终端机指令。支持批量检查过期包并选择单独或全部更新,查看详细的包信息包括依赖关系和冲突提示。