Homebrew 6.0.0 发布说明
Homebrew 6.0.0 引入了增强的安全性和性能
Homebrew 6.0.0 侧重于通过全新的 tap 信任机制和 Linux 沙箱来降低供应链风险,同时通过全新的默认内部 JSON API 大幅提升更新速度。此版本还首次支持 macOS 27(Golden Gate),并扩展了 brew bundle 的功能。
安全增强
Tap 信任机制
Homebrew 6.0.0 实现了对第三方 tap 的强制信任模型,以防止执行任意、未沙箱化的 Ruby 代码。tap 以及通过 tap 引入的 formula 或 cask 必须在其代码被评估或运行之前显式信任。官方 Homebrew tap 默认保持受信任状态。
关键技术变更包括:
- 强制执行:未受信任的 tap 在代码执行前会被标记,且自动 tap 未受信任的 tap 已被禁用。
- 管理:全新的
brew tap命令允许用户管理信任,包括通过远程 URL 信任 tap。 - 集成:
brew bundle现在支持trusted:选项,brew bundle dump会记录受信任的条目。
Linux 沙箱
为了让 Linux 与 macOS 保持一致,Homebrew 现在在构建、测试和 postinstall 阶段使用 Bubblewrap 沙箱。该功能目前默认对开发者开启。实现中包括加固的安装阶段以及沙箱化的 cask 可执行钩子。
安全通告与修复
本次发布修复了三个关键安全漏洞:
- GHSA-7699-qf8c-q47m:修复了 POST 下载策略中的绕过问题,该问题会导致 HTTPS 到 HTTP 的重定向保护被忽略。
- GHSA-6689-q779-c33m:解决了通过 macOS
.pkgpostinstall 中的 Git hook 触发的根代码执行漏洞。 - GHSA-59v8-x8q4-px5c:修复了 macOS 安装包信任用户可控的
/var/tmpplist 的漏洞,可能导致本地攻击者获取 Homebrew 所有权。
性能与基础设施
默认内部 JSON API
内部 JSON API 现已成为默认选项,取代之前的可选系统(HOMEBREW_USE_INTERNAL_API 已废弃)。通过将元数据合并为一次下载,Homebrew 减少了网络请求次数,加速了更新过程。
通用速度提升
用户将在多个方面感受到更快的性能:
- 启动:对 Ruby 库加载和整体启动逻辑进行微调。
- 命令速度:
brew leaves大约提升 30%。 - 升级过程:在升级期间并行获取 bottle tab。
功能更新
brew bundle 改进
brew bundle 获得了重要的功能扩展:
- 并行安装:Formula 安装默认并行执行作业。
- 新扩展:新增对
npm、krew和 Windowswinget的支持。 - 增强清理:为
npm、cargo、go和uv扩展添加了清理支持。
用户体验与默认设置
基于用户调查,Homebrew 调整了多项默认设置以提升透明度:
- 询问模式:现在是开发者的默认模式。
brew install和brew upgrade将提供依赖摘要,并在继续前要求确认。 brew info:输出更为一致,新增 “Binaries” 部分列出可执行文件,并提供更清晰的递归运行时依赖信息。
新命令
brew exec:类似npx的新命令,支持 formula 环境。brew vulns:用于检查已安装软件包已知漏洞的 tap 与子命令。brew as-console-user:旨在在 MDM 或 root 环境下正确运行 Homebrew。
平台支持与弃用
macOS 27(Golden Gate)
Homebrew 初步支持 macOS 27。由于 macOS 27 不再支持 Intel,Homebrew 将对 macOS Intel x86_64 进行分阶段弃用:
- 2026 年 9 月:进入 Tier 3(无 CI 支持,不再提供新二进制 bottle)。
- 2027 年 9 月:完全不再支持,所有相关代码将被删除。
brew-rs 实验
将 Ruby 前端迁移至 Rust 的实验(brew-rs)已结束。基准测试显示 Rust 前端仅在狭窄的缓存 bottle 场景下有收益,且未提升典型完整安装的表现。性能工作已回归到优化 Ruby 并改进 I/O 时序。
社区洞察与争议
虽然此版本因性能和安全提升普遍受到好评,社区讨论仍指出若干争议点:
- Intel 弃用:部分用户对快速淘汰 Intel 支持的时间表表示担忧,指出许多 Mac 服务器仍运行旧的 Intel 硬件。
- 版本锁定:用户仍希望拥有更强大的锁定和回滚机制,以避免可能导致特定环境破坏的 “强制升级”。
- 替代工具:一些开发者提到迁移到
mise或Nix以获得更好的语言运行时版本管理(Python、Node.js)或完整环境可复现性。
"我已经把完整的 OS 级别开发环境切换到 mise… 零粘合代码,无需‘重新打包’,零版本滞后。你可以安装任意版本的包… 并根据工作文件夹动态调整激活的版本。"
"我最近从 Nix 切回 Homebrew… Brew 对它拥有的包支持更好… 更好的 Mac 支持… 更好的用户体验。"