macOS 包管理生態系統正在經歷一場復興,隨著 Kelp 成為主導地位的 Homebrew 的最新競爭對手,這一領域的替代方案正在不斷增加。這個基於 Go 語言的工具旨在透過直接利用 GitHub 釋出版本來簡化 macOS 上的二進位制包安裝,解決了困擾 Homebrew 使用者的特定痛點。
Homebrew 的不足推動替代解決方案的出現
許多開發者對 Homebrew 的行為表達了越來越多的不滿,特別是它在安裝單個新包時自動更新所有包的傾向。這種行為導致一些使用者遇到嚴重中斷,一位評論者描述了一次簡單的包安裝如何導致長達一小時的系統範圍更新,隨後花了一週時間才恢復正常功能。這些經歷為 Kelp 等替代解決方案創造了機會,它承諾提供更可控的包管理方法。
「上週我不得不在 Homebrew 上下載一個依賴項。由於我的個人裝置很長時間以來一直很穩定,所以很久沒有下載任何東西了,因此依賴項已經過時。結果,Homebrew 決定在開始新下載之前升級所有東西,而且完全沒有提示我。一小時後,我的裝置出現了各種問題,我花了整整一週才完全恢復正常。」
雖然一些使用者發現了像 HOMEBREW_NO_AUTO_UPDATE=1
和 HOMEBREW_NO_ANALYTICS=1
這樣的環境變數可以緩解 Homebrew 激進的更新行為,但許多人質疑為什麼這些不是預設設定。社群討論揭示了可以進一步自定義 Homebrew 行為的其他環境變數,這表明該工具的預設配置優先考慮便利性而非使用者控制。
值得注意的 Homebrew 替代包管理器
工具 | 語言 | 重點 | 主要特性 |
---|---|---|---|
Kelp | Go | GitHub 二進位制釋出 | 簡單的 JSON 配置,直接二進位制下載 |
MacPorts | TCL | 編譯包 | 成熟的生態系統,隔離安裝 |
Nix/nix-darwin | Nix | 可復現環境 | 不可變包,回滾支援 |
Mise | 未知 | 版本管理 | 專案特定依賴,執行器 |
Pixi | Rust | Conda 包 | 快速,每個工具隔離環境 |
Bin | 未知 | GitHub 二進位制 | 簡單的二進位制管理 |
Eget | 未知 | GitHub 二進位制 | 直接二進位制下載 |
Devbox | 未知 | 開發環境 | 基於 Nix,專案隔離 |
常用 Homebrew 環境變數
HOMEBREW_NO_AUTO_UPDATE=1
- 防止自動更新HOMEBREW_NO_ANALYTICS=1
- 停用分析收集HOMEBREW_NO_EMOJI=1
- 停用輸出中的表情符號HOMEBREW_NO_ENV_HINTS=1
- 停用環境提示HOMEBREW_NO_INSTALL_CLEANUP=1
- 防止自動清理HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
- 跳過依賴項更新
競爭激烈的競爭者領域
Kelp 進入了一個競爭日益激烈的領域。長期存在的替代品如 MacPorts 和 pkgsrc 已經加入了較新的選擇,包括 Nix/nix-darwin、Mise、Pixi、Bin、Eget、Devbox 和 Ubi。每種工具都提供了不同的包管理方法,具有不同程度的複雜性和功能集。
在討論中,Nix 特別受到關注,支持者強調其全面的包目錄和強大的隔離能力。然而,批評者指出其陡峭的學習曲線、複雜的命令語法以及在 macOS 上的偶爾相容性問題。這種緊張關係說明了定義包管理領域的功能與簡單性之間的基本權衡。
幾位評論者指出,專注於特定用例的更簡單工具可能正在獲得關注。像 Bin 和 Eget 這樣的工具專門針對 GitHub 二進位制釋出版本——這與 Kelp 所針對的是同一個細分市場。這表明趨勢正朝著專注於特定任務而非試圖提供全面解決方案的工具發展。
Kelp 的方法和差異化
Kelp 以直接的二進位制包管理方法脫穎而出。它不是等待公式更新或管理複雜的依賴關係,而是直接從 GitHub 釋出版本下載二進位制檔案到一箇中心位置,並使它們在使用者的 PATH 中可用。對於主要使用獨立二進位制工具的使用者來說,這種方法提供了即時性和簡單性。
該工具支援指定版本、檢查更新,甚至透過提供直接下載連結從非 GitHub 來源安裝包。其配置儲存在一個簡單的 JSON 檔案中,使其在系統之間透明且可移植。這種設計理念與尋求在開發環境中獲得更多控制和可預測性的使用者相一致。
然而,一些評論者提出了關於安全性和信任的重要問題。與 Homebrew 由社群維護和審查的精選公式不同,Kelp 的直接二進位制下載方法將更多責任放在使用者身上,要求他們驗證包的可信度。這對於評估包管理替代方案的開發人員來說是一個重要考慮因素。
macOS 包管理的未來
包管理工具的激增表明生態系統正在分化,不同的解決方案針對不同的工作流程和優先順序進行了最佳化。這種多樣性反映了 macOS 開發者的異質需求和管理軟體依賴關係的固有複雜性。
一些使用者正在採用混合方法,將多種工具用於不同目的——也許使用 Homebrew 安裝 GUI 應用程式,Nix 用於開發工具,以及像 Kelp 這樣的輕量級管理器用於 GitHub 二進位制檔案。這種務實的策略允許開發者利用每個系統的優勢,同時避免各自的弱點。
隨著格局的不斷發展,在簡單性、靈活性和安全性之間取得適當平衡的工具可能會獲得更多采用。Kelp 專注於解決特定痛點而非完全替代 Homebrew 的方法,代表了一種務實的方法,可能會引起尋求工作流程漸進改進的開發者的共鳴。
參考:kelp