Freebsd

為什麼 FreeBSD 棄用 GCC 以支持 Clang/LLVM?

  • April 25, 2016

所以我在網上沖浪,偶然發現了這篇文章。它基本上表明FreeBSD從版本 10 及更高版本開始將棄用GCC以支持Clang/LLVM

從目前我在網上看到的情況來看,Clang/LLVM是一個相當雄心勃勃的項目,但在可靠性方面它無法與GCC 相提並論

FreeBSD 選擇 LLVM 作為他們的編譯器基礎設施是否有任何技術原因,或者整個問題歸結為永恆的 GNU/GPL 與 BSD 許可證?

這個問題(不知何故)有關於在FreeBSD中使用GCC的相關資訊

總結:從 *GCC切換到Clang*的主要原因是 GCC 的GPL v3許可證與FreeBSD 項目的目標不兼容。還有與企業投資以及使用者群要求有關的政治問題。最後,在符合標準和易於調試方面有預期的技術優勢。編譯和執行方面的現實世界性能改進是特定於程式碼且值得商榷的;可以為兩種編譯器製作案例。

FreeBSD 和 GPL: FreeBSD與 GPL 的關係很不穩定。BSD 許可倡導者認為,真正的自由軟體沒有使用限制。GPL 倡導者認為,為了保護軟體自由,限制是必要的,特別是從自由軟體創建非自由軟體的能力是一種不公正的權力形式,而不是一種自由。FreeBSD 項目盡可能避免使用 GPL

由於 GPL 軟體的商業用途可能會產生額外的複雜性,但是,我們會盡可能用更寬鬆的 FreeBSD 許可下的送出來替換此類軟體。

FreeBSD 和 GPL v3: GPL v3明確禁止所謂的程式碼Tivoisation ,這是GPL v2中的一個漏洞,它允許硬體限制以禁止使用者對其他合法的軟體進行修改。對於 FreeBSD 社區中的許多人來說,堵住這個漏洞是不可接受的:

如果目前根據 GPLv2 許可的大量軟體現在遷移到新許可,那麼設備供應商的損失尤其大。他們將不再有使用 GPLv3 軟體的自由並限制修改安裝在其硬體上的軟體……簡而言之,有大量開源消費者突然對了解 GPL 許可軟體的替代品非常感興趣。

由於 GCC 轉向 GPL v3,FreeBSD 被迫繼續使用 GCC 4.2.1 (GPL v2),它早在 2007 年就發布了,現在已經過時了。FreeBSD 沒有轉而使用更現代的 GCC 版本,即使執行舊編譯器和向後移植修復程序帶來額外的維護難題,這一事實也讓我們對避免使用 GPL v3 的要求有所了解。C 編譯器是 FreeBSD 基礎的主要組件,並且“ FreeBSD 10 的(暫定)目標之一是一個無 GPL 的基礎系統”。

**企業投資:**與許多主要的開源項目一樣,FreeBSD 從企業那裡獲得資金開發工作。儘管 Apple 資助或給予開發 FreeBSD 的程度不容易發現,但由於 Apple 的Darwin OS使用了大量源自 BSD 的核心程式碼,因此存在相當大的重疊。此外,在 2007 年開源之前,Clang 本身最初是一個內部 Apple 項目。由於公司資源是 FreeBSD 項目的關鍵推動力,因此滿足贊助商的需求可能是一個重要的現實驅動力

**使用者群:**對於許多公司來說,FreeBSD 是一個有吸引力的開源選項,因為許可簡單、不受限制且不太可能導致訴訟。隨著 GPL v3 和新的反 Tivoisation 條款的到來,已經表明存在一個加速的、供應商驅動的趨向於更寬鬆的許可證的趨勢。由於 FreeBSD 對商業實體的感知優勢在於其許可許可,因此來自企業使用者群的壓力越來越大,要求他們遠離 GCC 和一般的 GPL。

**GCC 的問題:**除了許可證之外,使用 GCC 還存在一些問題。GCC 不完全符合標準,並且有許多 ISO 標準 C 中沒有的擴展。它擁有超過 300 萬行程式碼,也是“最複雜和自由/開源軟體項目之一”。這種複雜性使得發行版程式碼修改成為一項具有挑戰性的任務。

技術優勢:與 GCC 相比, Clang 確實具有一些技術優勢。最值得注意的是提供更多資訊的錯誤消息和明確設計的用於 IDE、重構和原始碼分析工具的API 。儘管 Clang 網站提供的圖表表明編譯和記憶體使用效率更高,但現實世界的結果變化很大,並且大致符合 GCC 性能。通常,Clang 生成的二進製文件比等效的 GCC 二進製文件執行得更慢:

雖然使用 LLVM 在建構程式碼方面比 GCC 更快……在大多數情況下,GCC 4.5 建構的二進製文件的性能優於 LLVM-GCC 或 Clang……在其餘測試中,性能要麼接近 GCC,要麼很好在後面。在某些測試中,Clang 生成的二進製文件的性能簡直糟糕透頂。

**結論:**編譯效率極不可能成為承擔將 FreeBSD 等大型項目遷移到全新編譯器工具鏈的重大風險的重要動力,尤其是在缺乏二進制性能的情況下。然而,情況並沒有真正站得住腳。在 1) 執行過時的 GCC、2) 遷移到現代 GCC 並被迫使用與項目目標不兼容的許可證或 3) 遷移到穩定的 BSD 許可編譯器之間進行選擇時,決定可能是不可避免的。請記住,這僅適用於基礎系統,以及來自發行版的支持;沒有什麼能阻止使用者自己在他們的 FreeBSD 機器上安裝和使用現代 GCC。

引用自:https://unix.stackexchange.com/questions/49906