web-dev-qa-db-ja.com

FreeBSDがClang / LLVMを支持してGCCを非推奨にするのはなぜですか?

それでネットサーフィンをしていると偶然に遭遇しました この記事 。基本的に、バージョン10以降から FreeBSD は非推奨になると述べています [〜#〜] gcc [〜#〜]Clang/LLVM

これまでネット上で見てきたことから、 Clang/LLVM はかなり野心的なプロジェクトですが、信頼性の観点からは一致しません [〜#〜] gcc [〜#〜 ]

FreeBSDがLLVMをコンパイラインフラストラクチャとして選択している技術的な理由はありますか、それとも全体が永遠のGNU/GPL対BSDライセンスにまで煮詰められていますか?

この質問[〜#〜] gcc [〜#〜]FreeBSD の使用に関する(何らかの形で)関連情報があります

243
NlightNFotis

概要:[から切り替える主な理由〜#〜] gcc [〜#〜] to Clang はGCCの GPL v ライセンスと FreeBSDプロジェクトの目標 との非互換性です=。企業の投資に関連する政治的な問題や、ユーザーベースの要件もあります。最後に、標準への準拠とデバッグの容易さには、技術的な利点が期待されます。コンパイルと実行における実際のパフォーマンスの向上はコード固有であり、議論の余地があります。両方のコンパイラでケースを作成できます。

FreeBSDとGPL:FreeBSD はGPLとの関係が不安定です。 BSDライセンスの擁護者は、真にフリーなソフトウェアには 使用制限なし があると信じています。 GPLの支持者は、ソフトウェアの自由を保護するために 制限が必要 であり、特にフリーソフトウェアから非フリーソフトウェアを作成する能力は 不正な形の力 よりもむしろ自由。 FreeBSDプロジェクトは、可能であれば GPLの使用を避けます

ただし、GPLソフトウェアの商用利用で発展する可能性のある追加の複雑さのために、可能な限り、より緩和されたFreeBSDライセンスの下で、そのようなソフトウェアを提出物に置き換えるよう努めています。

FreeBSDとGPL v3:GPL v は、いわゆる Tivoization のコードを明示的に禁止しています 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の(暫定)目標の1つはGPLフリーのベースシステム 」です。

企業投資:多くの主要なオープンソースプロジェクトと同様に、FreeBSDは企業から funding および 開発作業 を受け取ります。 。 FreeBSDがAppleによって開発または提供されている)程度は簡単に見つけることはできませんが、Appleの Darwin OS はBSD由来の実質的なものを利用しているため、かなりの重複があります- カーネルコード 。さらに、Clang自体は元々社内であったApple以前はプロジェクトだった 2007年にオープンソース化された 。企業のリソースはFreeBSDプロジェクトの主要なイネーブラーであり、スポンサーのニーズを満たすことはおそらく 重要な実世界のドライバー です。

Userbase:FreeBSDは、多くの企業にとって魅力的なオープンソースオプションです。これは、ライセンスがシンプルで制限がなく、訴訟につながる可能性が低いためです。 GPL v3の登場と新しい アンチティボイゼーションの条項 により、 加速的でベンダー主導の、より寛容なライセンスへの傾向 があることが示唆されています。商用エンティティに対するFreeBSDの認識されている利点はその許容ライセンスにあるため、企業ユーザーベースからGCCおよび一般的にGPLからの移行を求める圧力が高まっています。

GCCの問題:ライセンスとは別に、GCCの使用には 認識された問題 があります。 GCCは完全に標準に準拠しているわけではなく、 ISO標準Cにはない拡張機能 があります。 300万行を超えるコードで、「 最も複雑でフリー/オープンソースのソフトウェアプロジェクトの1つ 」でもあります。この複雑さにより、ディストリビューションレベルのコードの変更は困難な作業になります。

技術的な利点:Clangにはいくつかの GCCと比較した技術的な利点 があります。最も注目に値するのは、IDE、リファクタリング、およびソースコード分析ツール用の はるかに有益なエラーメッセージ および 明示的に設計されたAPI です。 ClangのWebサイト presents plots は、はるかに効率的なコンパイルとメモリ使用量を示していますが、実際の結果は quit variable であり、広くGCCパフォーマンスと一致しています。一般に、Clangで生成されたバイナリ 実行速度が遅い は、同等のGCCバイナリよりも次のようになります。

LLVMを使用すると、GCCよりもコードのビルドが高速になりますが、ほとんどの場合、GCC 4.5でビルドされたバイナリはLLVM-GCCまたはClangよりもパフォーマンスが優れていました。後ろに。一部のテストでは、Clangで生成されたバイナリのパフォーマンスがひどいものでした。

結論:コンパイル効率が、FreeBSDのような大規模なプロジェクトをまったく新しいコンパイラツールチェーンに移動するという大きなリスクを負う大きな動機になることはほとんどありません。特にバイナリパフォーマンスが不足している場合。しかし、状況は実際には耐え難いものではなかった。 1)古くなったGCCを実行する、2)最新のGCCに移行してプロジェクトの目標と互換性のないライセンスを使用せざるを得ない、または3)安定したBSDライセンスのコンパイラーに移行するという選択肢がある場合、決定おそらく避けられなかった。これは基本システムとディストリビューションからのサポートにのみ適用されることを覚えておいてください。ユーザーが自分のFreeBSDボックスに最新のGCCをインストールして使用することを妨げるものは何もありません。

363
ire_and_curses

検討する価値があることの1つは、FreeBSDが現在GCC 4.2.1を ire_and_curses回答に記載 として使用していることです。したがって、パフォーマンスの比較は4.5ではなく、4.6でもプロジェクトに実際には関係ありません。したがって、あなたが尋ねるべき質問は次のとおりです。

  1. 新しいClangと、プロジェクトで使用されている古いGCCのパフォーマンスの違いは何ですか?

  2. GCC 4.2.1でコンパイルされた同じバイナリは、新しいClangとどのように比較されますか?

GCCがGPL v3に移行したため、FreeBSDは2007年にリリースされたGCC 4.2.1(GPL v2)を使用し続けることを余儀なくされ、現在はかなり古くなっています。

Clangが現在のGCCに遅れをとっているが、プロジェクトに実装されているGCCよりもまだ数年進んでいる場合、進化するという彼らの決定は十分に正当化され、真に刺激を受けています。

38
Mikel King

GCCはGPLv3ですが、GCCによって生成されるバイナリには、ライセンスの制約はありません。明らかに、GCCを使用して、必要なライセンスに該当するソフトウェアを構築できます。 GCCに付属し、バイナリに含まれているCライブラリでさえ、ライセンスは不要です。 http://www.gnu.org/licenses/gcc-exception-faq.html

GNU GPLv3のセクション2:

すべてのターゲットコードが適格なコンパイルプロセスによって生成された場合、GPLv3の条件に違反しない限り、ランタイムライブラリと独立モジュールを組み合わせることによって形成されたターゲットコードの作業を伝搬する権限があります。次に、このような組み合わせを伝えることができます選択の条件の下で。これは、独立モジュールのライセンスと一致しています。

「適格」とは、コンパイルにGCCとGPL非互換ソフトウェアの両方が含まれないことを意味します。これは制限ではありません。BSDライセンスのソフトウェアは、GNU GCCを含む)ビルドプロセスで使用できます。

ご覧のとおり、上記とは異なり、使用に非互換性がないため、GCCから移動する[〜#〜] real [〜#〜]ライセンス関連の理由はありません。 FreeBSD内のGCC。

この変化の背後にある本当の理由は、政治的かつ日和見的なものです。

  • BSDには、哲学的にGNUパブリックライセンス(上記の* ire_and_curses *と同様))と競合する独自のライセンスがあります。
  • CLANGは、FreeBSDのスポンサーによって開始された新しい非GPLコンパイラであり、技術的にはGPLライセンスのGCC(* ire_and_curses *で説明)と同等であるようです。

これらの事実は、FreeBSDがGCCから離れてそれを取り除く機会を生み出します。彼らは、GCCを使用して無料またはBSDライセンスのソフトウェアを構築することはできるが、実際には法的に強制されているわけではありませんが、 「すべてのBSDライセンスソフトウェア」の理念。

19
Eric

私は専門家ではありませんが、私の理解では、Clang/LLVMはGCCよりも少ないリソースを使用し、より高速です。

http://clang.llvm.org/features.html#performance

多くのものを何度も構築する必要がある環境を実行している場合、そのパフォーマンスは、エネルギーコストと時間の実質的な節約につながる可能性があります。それが本当なら。

7
EightBitTony