Homebrew 6.0.0 發佈說明 / 有什麼新功能
Homebrew 6.0.0 是一次重大更新,重點在於安全性強化、效能優化以及擴展跨平台支援。此版本引入了針對第三方 tap 的強制信任機制、預設使用更快的內部 JSON API,以及為 Linux 安裝提供沙盒機制,使其與 macOS 的體驗保持一致。
安全性強化與 Tap 信任
Homebrew 6.0.0 實作了新的 tap 信任機制,以降低執行來自第三方 tap 的任意、未經沙盒保護的 Ruby 程式碼之風險。第三方 tap 以及與其相關的所有 formulae 或 casks,現在必須由使用者明確信任,才能進行程式碼評估或執行。官方 Homebrew taps 預設仍保持信任狀態。
信任模型的關鍵更新包括:
- 強制信任:在進行任何程式碼執行之前,未經信任的 taps 會被標記。
- 管理指令:
brew tap現在包含管理信任的指令,使用者可以透過其遠端 URL 來信任 taps。 - Bundle 集成:
brew bundle現在支援trusted:選項,且brew bundle dump會記錄已信任的項目。 - 安全性漏洞通知:此版本解決了三個關鍵的安全漏洞,包括 HTTPS-to-HTTP 重定向保護的繞過 (GHSA-7699-qf8c-q47m)、透過 macOS
.pkgpostinstall 中的 Git hooks 執行 root 權限程式碼 (GHSA-6689-q779-c33m),以及透過/var/tmpplist 進行本地攻擊者所有權分配 (GHSA-59v8-x8q4-px5c)。
效能與 API 改進
內部 JSON API 現在已成為預設值,取代了先前的 opt-in 系統。此 API 將 Homebrew 的元數據整合到單次下載中,減少了網路請求並加速了 brew update 的過程。HOMEBREW_USE_INTERNAL_API 環境變數現在已棄用。
一般的效能提升包括:
- 啟動速度:對 Ruby 函式庫載入與一般啟動效能進行了微調。
- 指令碼優化:
brew leaves的速度提升了約 30%。 - 升級效率:在升級期間並行化 bottle 的標籤獲取過程。
Linux 沙盒化與跨平台支援
為了使 Linux 與 macOS 一致,Homebrew 6.0.0 引入了 Linux Bubblewrap 沙盒。這確保了 build、test 與 postinstall 階段會在沙盒環境中執行。此功能對開發者預設是啟用的。
除了沙盒化之外,此更新也擴展了作業系統支援:
- macOS 27 (Golden Gate):已為即將推出的 macOS 版本加入初步支援。
- Windows/WSL:
brew bundle現在支援 Windows 上的winget,且 WSL 分析數據現在已標記,以便進行更好的追蹤。 - Linux Casks:為 Linux 上的 casks 加入了 AppImage 支援以及 freedesktop 垃圾桶實作。
開發者體驗與 brew bundle
根據使用者調查,Homebrew 已將其預設值更新為對開發者更友善的設定。一個顯著的變化是 ask 模式現在是開發者的預設值,這意味著 brew install 與 brew upgrade 現在會顯示依賴關係摘要,並在繼續之前需要使用者確認。
對 brew bundle 的改進包括:
- 並行安裝:Formulae 的安裝現在預設會自動在背景執行並行任務。
- 擴展支援:為
npm、krew、cargo、go與uv加入了更廣泛的清理支援。 - Windows 集成:為 Windows 使用者加入了
winget支援。
新指令碼工具
brew exec:一個與npx類似的新指令,支援 formulae 環境。brew vulns:一個新的 tap 與子指令,用於檢查已安裝套件的已知安全性漏洞。brew as-console-user:一個新指令,專為在 MDM 或 root 環境下執行 Homebrew 而設計。
未來發展藍圖與棄用事項
Intel macOS 支援
由於 macOS 27 (Golden Gate) 將停止支援 Intel 處理器,Homebrew 將調整其支援層級:
September 2026:macOS Intel
x86_64將移至 Tier 3 (不提供 CI 支援,不提供新的 binary bottles)。September 2027:macOS Intel
x86_64將完全不再受支援,且相關程式碼將被刪除。
其他變更
master到main遷移:預設分支的遷移工作持續進行中,GitHub Actions 現在會警告使用者將@master從@main遷移過來。brew-rs實驗計畫:將 Ruby frontend 遷移至 Rust 的實驗計畫已結束。基準測試顯示 Rust 僅在特定的、快取過的 bottle 獲取過程中有增益益處,而非在具代表性的完整安裝過程中。效能優化重點已回歸至 Ruby。Install Steps Framework:一個新的框架,將常見的 postinstall 與 preflight 行為表現為宣告式 DSL 資料,減少了在安裝時評估 Ruby 檔案的需求。
社群意圖
雖然此版本廣受讚譽,因其效能與安全性強化,但社群中有些使用者表達了對更好的版本鎖定 (version pinning) 與原生支援多個相同套件的版本 (例如:Node, Python, PHP) 的需求,並指出他們使用 mise 或 pyenv 等工具來避免因強制升級而導致的「意外破壞性變更」。