加载失败
Homebrew 在最新发布计划中决定废弃允许绕过 Gatekeeper 的 --no-quarantine 功能,这主要影响它的 casks(用于分发 macOS 上的 GUI/.app 包)。该决定源于 Apple 在 Apple Silicon 上对代码签名与 notarization 的严格要求,以及 Intel 平台正逐步被 macOS 新版本(如 Tahoe/Sequoia)边缘化。社区讨论围绕技术细节(com.apple.quarantine、ad-hoc 签名、bottles 与 formulae 的差别)、签名/公证的成本(Apple Developer Program 的年费与身份要求)、以及维护者的沟通与治理方式展开。评论同时提出多种绕过或替代方案,并把问题放在更大范畴的用户自由、平台锁定与迁移选择(如 MacPorts、Nix、Asahi Linux)上。
Homebrew 官方与多位评论者指出这次变更主要影响 casks(macOS 上以 .app/.dmg/.pkg 形式分发的预编译 GUI 应用),而不影响 formulae(从源码构建的包)或 Homebrew 的 bottles(预构建二进制包)。因此常用的 CLI 工具和通过 Homebrew 构建/分发的包通常仍能正常安装与运行,但依赖 casks 批量部署 GUI 应用的用户会明显受影响。多位用户展示了用 Brewfile 批量引导几十个 cask 的实际用例,说明对日常系统引导和 IT 自动化的实际影响不可忽视。
不少评论把此事看作 Apple 持续收紧平台控制的一环,担心 Gatekeeper 的逐步强化会慢慢剥夺用户对机器的掌控权。支持这一担忧的人引用近期 macOS 版本的安全策略变化,认为限制会以“缓慢累加”的方式出现;反对者则指出 Gatekeeper 仍可被禁用、且 Apple 很难彻底封锁因开发者与专业用户的基数。讨论中也出现迁移意向,有人打算在下一次硬件更新时改用 Linux 或尝试 Asahi Linux(用于在 Apple Silicon 上运行 Linux 的项目)。总体上,这部分讨论把技术改变与更广泛的反垄断/使用者权利议题联系起来。
Homebrew 要求 casks 能够通过 Gatekeeper 检查(即签名并被 notarize)会对不愿意或无法承担 Apple Developer Program(需付费并提供法律身份认证)的开源/小团队项目带来实质性障碍。评论里列举的受影响实例包括 LibreWolf、FreeTube、Alacritty 等,维护者不一定会为每个平台支付签名/公证费用或愿意将构建与身份信息上交。结果是用户要么转为手动下载并在每次更新后清除 quarantine,要么依赖第三方 tap、或直接放弃通过 Homebrew 分发的便捷性,这增加了维护成本和使用摩擦。
讨论中大量关注技术细节并澄清常见误解:com.apple.quarantine 是由下载器或分发工具设置的扩展属性,会触发 Gatekeeper 的首次/深度检查;移除该 xattr 可以避免初次提示。Apple Silicon 的内核要求二进制带有签名,但 ad-hoc(本地)签名可满足内核执行要求;不过 ad-hoc 签名并不等同于被 Apple notarize 的签名,notarization 才能避免 Gatekeeper 的完整阻断。bottles 有时不会触发 quarantine,这解释了为何部分二进制通过 Homebrew 安装时不遇到相同阻塞。
评论里汇总了若干绕过或替代方案:手动/脚本化用 xattr -dr com.apple.quarantine 清除属性、在 postinstall 里解除 quarantine、使用第三方 tap 重新分发或用户本地 codesign、或直接从源码构建(Nix、MacPorts 等可选)。有人提供了自动化工具(如 autoremove-quarantine),也有人提醒若 Homebrew 为第三方二进制自动签名将把信任与法律责任集中到 Homebrew 身上,容易被滥用并成为攻击目标。总体讨论在便利性、安全性与维护责任之间权衡,揭示没有简单的齐全方案。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]
大量评论围绕 Homebrew 是否仍为“pro”级工具展开:批评者认为项目越来越面向普通用户,强制弃用旧版本、在 issue 区封锁反对意见且维护者语气强硬;维护者回应称项目由志愿者维护、需要用 issue 跟踪工作而不是无休止辩论,并建议把公共讨论移到 discussions 区。这引发了信任与治理模式的争论,部分人因此考虑迁移到 MacPorts、Nix 或发起 fork,体现出技术决策同时也是社区与沟通风格的问题。
Gatekeeper: macOS 的安全机制集合,用于执行签名、notarization 和已知恶意软件检查;当文件带有 com.apple.quarantine 属性时会触发相关提示与深度检查。
cask(Homebrew cask): Homebrew 用于分发 macOS GUI 应用的机制,通常提供预编译的 .app/.dmg/.pkg 包,属于受 Gatekeeper 约束的分发类型。
bottle(Homebrew bottle): Homebrew 为 formulae 生成并分发的预构建二进制包,通常用于命令行工具或库,行为上与 casks 的 Gatekeeper 约束不同。
com.apple.quarantine / xattr: macOS 的扩展属性,表示文件来自互联网;xattr 命令可以查看或删除该属性(例如 xattr -dr com.apple.quarantine),删除后可避免 Gatekeeper 的首次阻断提示。
notarization: Apple 的自动化审核/签名流程,开发者通过 Apple Developer Program 提交应用以获得 Apple 的标识和信任,能减少 Gatekeeper 的阻断提示。
ad-hoc signature: 本地生成的代码签名,可满足 Apple Silicon 内核的签名要求以允许执行,但不等同于 Apple 的 notarization,也不能替代 Gatekeeper 的全部检查。
tap(Homebrew tap): Homebrew 的第三方包仓库机制,社区或个人可以通过 tap 分发自定义 formulae 或 casks,常被用作官方仓库无法提供时的替代。
Brewfile: Homebrew 的清单文件,用于声明一组 formulae 与 casks,方便在新机器上批量引导安装。