Homebrew 6.0 來了:先搞懂這幾個會影響你日常的改動
如果你是 Mac 開發者,brew 大概是你每天最早敲下的幾個指令之一。所以當它跳上 6.0 這個大版號時,值得花十分鐘搞清楚發生了什麼事——因為大版號意味著 breaking change,而這次有幾個改動,是你「下一次 brew install 就會直接撞到」的那種。
先給結論:6.0 的重點,是把你每天在用的 brew 變得更安全、也更快——不是塞一堆新功能,而是把基本功做扎實。而你會直接撞到的,是這三件事——
- 把供應鏈安全收緊:第三方 tap 不再「裝了就跑」。
- 改掉你每天的操作習慣:
brew install現在會先問你一句。 - 開始跟 Intel Mac 道別:x86_64 進入退場時間表。
剩下的都是錦上添花。下面一個一個看。
brew install 之後,它現在會先問你一句
這是你最快會注意到的改動。以前 brew install something 按下 enter,它就一路裝到底。6.0 開始,對開發者預設開啟「ask 模式」:你敲下指令後,它不會立刻動手,而是先列出這次會連帶安裝或升級哪些相依套件,停下來等你回一個 Y。升級時如果沒有東西需要動,它也夠聰明、不會多問。
官方說這是照使用者問卷做的決定——大家其實想在「它要對我的系統做什麼」之前,有個喊停的機會。
實務上唯一要注意的是 CI。你的 pipeline 裡如果有 brew install,多了一個互動式確認就會直接卡住。兩個解法:
# 本機:這次不要問
brew install -y wget # 或寫成 --no-ask
# CI:整個環境都別問
export HOMEBREW_NO_ASK=1
NOTE
-y / --no-ask 是「這次不要問」,HOMEBREW_NO_ASK 是「整個環境都別問」。本機留著 ask 模式其實很好用(避免手滑裝錯、被拖一大串相依套件下來),但 CI 記得設環境變數。
第三方 tap 不再「裝了就跑」:Tap 信任機制
這是 6.0 真正的頭條,也是最值得花時間理解的一個。
先講清楚問題:一個第三方 tap(brew tap user/repo 那種)本質上是一包會在你機器上、用你的權限、不經沙箱執行的 Ruby 程式碼。你 brew install 它底下的某個 formula,等於同意跑它的安裝腳本。過去這件事是默默發生的——這也正是為什麼近期會出現「把惡意程式碼塞進 tap」這類攻擊。
6.0 把這個洞補起來:第三方 tap(以及它底下的 formula、cask、外部指令)現在必須先被你明確信任,Homebrew 才會去 evaluate 它的程式碼。 官方的 Homebrew taps 和內建指令一律預設信任,所以你日常的 brew install wget 完全不受影響。
要信任有兩種做法:
# 做法一(推薦):只信任你真正要的那一個
# 用「完整路徑名」安裝,就只信任這一項
brew install user/repo/formula
brew install --cask user/repo/cask
# 做法二:信任整個 tap(連它之後新增的東西也一起放行)
brew trust user/repo
「做法一」的範圍最小,是官方建議的預設姿勢——你要哪個就信任哪個,而不是把整個 tap 未來會長出來的所有東西,現在就先簽下去。
過渡期如果你被擋住、或 CI 整批爆掉,有一個暫時的逃生門:
export HOMEBREW_NO_REQUIRE_TAP_TRUST=1
但官方講得很白:這只是過渡用的,最終會強制。所以正解是把你常用的幾個 tap 一次信任好,而不是長期靠這個環境變數繞過。
WARNING
如果你的 CI 在升上 6.0 之後突然變紅,第一個要懷疑的就是這裡——brew doctor 的 untrusted-tap 檢查、或第三方 tap 的 formula 載入被擋下。先盤點 pipeline 裡用到哪些非官方 tap,把它們補上 trust。
brew exec:Homebrew 版的 npx
如果你寫過 Node,一定用過 npx——不想把工具裝進全域,臨時拉下來跑一次就好。6.0 給了 Homebrew 一個對應的東西:brew exec(縮寫 brew x)。
它的用法是:指定這次需要哪些 formula,Homebrew 幫你(必要時)裝好、把它們和相依套件的執行檔目錄塞進 PATH,然後跑你的指令:
# 臨時用 jq + yq 跑一個腳本,不用先全域安裝
brew exec --formulae=jq,yq -- ./script.sh
對「我只是想跑個一次性腳本、不想污染環境」這種情境很實用,尤其是寫教學、寫 Makefile、或想在乾淨環境裡驗證相依關係的時候。
brew vulns:順手掃一下裝了什麼有洞的東西
延續這版的資安主軸,6.0 還多了 brew vulns:拿你「已經安裝」的套件去比對已知漏洞,告訴你哪些東西該升級了。
過去你大概得靠額外工具、或自己留意 CVE,現在 Homebrew 本身就能給你一張清單。詳細選項可以用 brew vulns --help 看,但概念很單純——把「你裝了什麼」和「哪些版本有已知問題」對起來,是個值得偶爾跑一次的習慣。
這版整體變快了
6.0 把幾個原本是選用的加速項目轉成預設:
- 內建 JSON API 變預設:把套件 metadata 合併成單次下載,少了一堆零碎的網路請求,啟動更快。(舊的
HOMEBREW_USE_INTERNAL_API環境變數也因此功成身退、被標記棄用。) brew leaves快了約 30%:就是列出你「手動裝、且沒被其他套件依賴」的那個指令。- 平行化:升級時平行抓 bottle 的 tab、
brew bundle預設平行安裝 formula。
這些都不用你動手,升上去就有。
Intel Mac 的倒數計時開始了
如果你還在用 Intel(x86_64)的 Mac,這段一定要看。官方公布了明確的退場時間表:
| 時間 | x86_64 macOS 的狀態 |
|---|---|
| 2026 年 9 月 | 降到 Tier 3:不再跑 CI、不再產新的 bottle |
| 2027 年 9 月 | 完全不支援,相關程式碼整批移除 |
白話講:今年九月之後,Intel Mac 上不少套件會開始沒有預編譯好的 bottle,得自己從原始碼編(慢,又容易踩雷);明年九月之後就完全不在支援範圍內了。手上還有 Intel 機器在當生產力主力的人,這一年就是你規劃遷移的窗口。
同一批 OS 相關更新還包括:
- macOS 27(Golden Gate) 初步支援上線(同時這版也是放掉 Intel 的版本)。
- 認得 M5、M5 Pro/Max 晶片。
- WSL 體驗改善(
brew config會顯示 Windows build)。
其他順手知道就好的改動
不是每個人都會用到,但掃一眼留個印象:
- Cask 現在可以 pin:把某個 GUI app 釘在特定版本,不讓它被升級。
- Install Steps 框架:把常見的安裝步驟(建目錄、搬檔案、建 symlink)改成「純資料、不需要在安裝當下跑 Ruby」的描述——又是一個縮小安全暴露面的設計。
- 下載冷卻(download cooldowns):對 Bundler、RubyGems、npm、pip、PyPI 加了節流,降低供應端被濫用的風險。
brew bundle變強:新增npm、krew、winget(Windows)支援,cleanup也能一起管 npm/cargo/go/uv。- Services:可以啟動 systemd timer、自動建好 service 需要的目錄。
要現在升級嗎?怎麼升
要。這版的安全改動是實打實有意義的,加速也是免費送的。升級照舊:
brew update
brew upgrade
升完之後,給自己三個提醒:
- CI 會不會被卡:ask 模式 → 設
HOMEBREW_NO_ASK=1;第三方 tap → 補brew trust,別長期靠HOMEBREW_NO_REQUIRE_TAP_TRUST繞過。 - 盤點你的非官方 tap:花五分鐘把常用的幾個一次信任好,之後就順了。
- Intel 使用者排遷移:把「九月前」放進行事曆。
一句話總結:Homebrew 6.0 沒有給你新玩具,但它讓「你每天都在用的這個工具」更安全、更快,也更願意在動手前先問你一句。對天天 brew 的人來說,這種版本反而最值得認真升。
資料來源:Homebrew 6.0.0 官方公告、Homebrew Tap-Trust 文件、Homebrew Manpage。