Warum setzt FreeBSD GCC zugunsten von Clang / LLVM außer Kraft?

241

Also habe ich im Internet gesurft und bin auf diesen Artikel gestoßen . Grundsätzlich heißt es, dass FreeBSD ab Version 10 GCC zugunsten von Clang / LLVM ablehnt .

Nach dem, was ich bisher im Internet gesehen habe, ist Clang / LLVM ein ziemlich ehrgeiziges Projekt, aber in Bezug auf Zuverlässigkeit kann es nicht mit GCC mithalten .

Gibt es technische Gründe, warum sich FreeBSD für LLVM als Compiler-Infrastruktur entscheidet, oder läuft das Ganze auf die ewigen GNU / GPL-Lizenzen im Vergleich zu BSD-Lizenzen hinaus?

Diese Frage enthält (irgendwie) relevante Informationen zur Verwendung von GCC in FreeBSD

NlightNFotis
quelle

Antworten:

361

Zusammenfassung: Der Hauptgrund für den Wechsel von GCC zu Clang ist die Inkompatibilität der GPL v3- Lizenz von GCC mit den Zielen des FreeBSD-Projekts . Es gibt auch politische Fragen im Zusammenhang mit Unternehmensinvestitionen sowie Anforderungen an die Benutzerbasis. Schließlich werden technische Vorteile in Bezug auf die Einhaltung von Standards und die einfache Fehlersuche erwartet. Leistungsverbesserungen in der Praxis bei der Kompilierung und Ausführung sind codespezifisch und umstritten. Fälle können für beide Compiler gemacht werden.

FreeBSD und die GPL: FreeBSD hat eine unangenehme Beziehung zur GPL. Befürworter der BSD-Lizenz glauben, dass wirklich freie Software keine Nutzungsbeschränkungen hat . Die Befürworter der GPL sind der Ansicht, dass Einschränkungen erforderlich sind, um die Softwarefreiheit zu schützen, und insbesondere, dass die Fähigkeit, unfreie Software aus freier Software zu erstellen, eher eine ungerechte Form der Macht als eine Freiheit ist. Das FreeBSD-Projekt versucht, wo immer möglich, die Verwendung der GPL zu vermeiden :

Aufgrund der zusätzlichen Komplexität, die sich bei der kommerziellen Nutzung der GPL-Software ergeben kann, bemühen wir uns jedoch, diese Software nach Möglichkeit durch Einsendungen unter der lockeren FreeBSD-Lizenz zu ersetzen.

FreeBSD und die GPL v3: Die GPL v3 verbietet ausdrücklich die sogenannte Tivoization of Code, eine Lücke in der GPL v2, die es Hardwareeinschränkungen ermöglichte, ansonsten legale Softwaremodifikationen durch Benutzer zu verbieten. Die Schließung dieser Lücke war für viele in der FreeBSD-Community ein inakzeptabler Schritt :

Insbesondere Appliance-Anbieter haben die meisten Verluste zu verzeichnen, wenn die derzeit unter GPLv2 lizenzierte umfangreiche Software auf die neue Lizenz migriert wird. Sie werden nicht länger die Freiheit haben, GPLv3-Software zu verwenden und Änderungen der auf ihrer Hardware installierten Software einzuschränken. Kurz gesagt, es gibt eine große Anzahl von OpenSource-Kunden, die plötzlich sehr daran interessiert sind, Alternativen zu GPL-lizenzierter Software zu verstehen.

Aufgrund der Umstellung von GCC auf die GPL v3 war FreeBSD gezwungen, weiterhin GCC 4.2.1 (GPL v2) zu verwenden, das bereits 2007 veröffentlicht wurde und inzwischen erheblich veraltet ist. Die Tatsache, dass FreeBSD nicht auf modernere Versionen von GCC umstieg, selbst mit dem zusätzlichen Wartungsaufwand, einen alten Compiler auszuführen und Korrekturen für das Backporting vorzunehmen, lässt einen Eindruck von der Stärke der Anforderung, die GPL v3 zu vermeiden, aufkommen. Der C-Compiler ist eine Hauptkomponente der FreeBSD-Basis und " eines der (vorläufigen) Ziele für FreeBSD 10 ist ein GPL-freies Basissystem ".

Unternehmensinvestitionen: Wie viele große Open-Source-Projekte erhält FreeBSD Finanzierungs- und Entwicklungsleistungen von Unternehmen. Obgleich das Ausmaß, in dem FreeBSD von Apple finanziert oder entwickelt wird, nicht leicht erkennbar ist, gibt es erhebliche Überschneidungen, da Apples Darwin OS einen umfangreichen Kernel-Code verwendet, der von BSD stammt . Darüber hinaus war Clang selbst ursprünglich ein internes Apple-Projekt, bevor es 2007 als Open-Source- Projekt eingeführt wurde . Da Unternehmensressourcen eine Schlüsselrolle für das FreeBSD-Projekt spielen, ist die Erfüllung der Sponsorenbedürfnisse wahrscheinlich ein wesentlicher Faktor in der Praxis .

Userbase: FreeBSD ist für viele Unternehmen eine attraktive Open-Source-Option, da die Lizenzierung einfach und uneingeschränkt ist und wahrscheinlich nicht zu Rechtsstreitigkeiten führen wird. Mit der Einführung der GPL v3 und den neuen Anti-Tivoization-Bestimmungen wurde ein sich beschleunigender, herstellergetriebener Trend hin zu freizügigeren Lizenzen vermutet . Da der wahrgenommene Vorteil von FreeBSD für kommerzielle Unternehmen in der Erlaubnis der Lizenz liegt, steigt der Druck der Unternehmensbenutzer, sich von GCC und der GPL im Allgemeinen zu entfernen.

Probleme mit GCC: Abgesehen von der Lizenz hat die Verwendung von GCC einige wahrgenommene Probleme . GCC ist nicht vollständig standardkonform und hat viele Erweiterungen, die in ISO-Standard C nicht enthalten sind . Mit über 3 Millionen Codezeilen ist es auch " eines der komplexesten und quellfreiesten Softwareprojekte ". Diese Komplexität macht die Änderung von Code auf Distro-Ebene zu einer herausfordernden Aufgabe.

Technische Vorteile: Clang hat einige technische Vorteile gegenüber GCC . Am bemerkenswertesten sind informativere Fehlermeldungen und eine explizit entwickelte API für IDEs, Refactoring und Tools zur Quellcode-Analyse. Obwohl die Clang-Website grafische Darstellungen enthält, die auf eine wesentlich effizientere Kompilierung und Speichernutzung hinweisen, sind die tatsächlichen Ergebnisse recht unterschiedlich und entsprechen weitgehend der Leistung von GCC. Im Allgemeinen werden von Clang erstellte Binärdateien langsamer ausgeführt als die entsprechenden GCC-Binärdateien:

Während die Verwendung von LLVM beim Erstellen von Code schneller ist als GCC ... In den meisten Fällen zeigten die in GCC 4.5 erstellten Binärdateien eine bessere Leistung als LLVM-GCC oder Clang ... In den restlichen Tests war die Leistung entweder nahe an der von GCC oder gut hinter. In einigen Tests war die Leistung der mit Clang generierten Binärdateien einfach schrecklich.

Fazit: Es ist sehr unwahrscheinlich, dass die Kompilierungseffizienz ein wesentlicher Beweggrund dafür ist, das erhebliche Risiko einzugehen, ein großes Projekt wie FreeBSD auf eine völlig neue Compiler-Toolchain zu verlagern, insbesondere wenn die Binärleistung fehlt. Die Situation war jedoch nicht wirklich haltbar. Wenn Sie die Wahl haben zwischen 1) einem veralteten GCC, 2) einem modernen GCC und der Verwendung einer Lizenz, die nicht mit den Zielen des Projekts vereinbar ist, oder 3) einem stabilen BSD-lizenzierten Compiler war wahrscheinlich unvermeidlich. Beachten Sie, dass dies nur für das Basissystem und die Unterstützung durch die Distribution gilt. nichts hindert einen Benutzer daran, ein modernes GCC auf seiner FreeBSD-Box selbst zu installieren und zu verwenden.

ire_and_curses
quelle
4
Der von Ihnen angegebene Benchmark stammt aus einer alten Version von Clang. Die Benchmarks für neuere Versionen scheinen aktuellere Versionen näher zu sein. Meine eigenen Nachforschungen für einfache Programme haben ergeben, dass Clang 3.0 ein paar Prozent schneller ist als GCC 4.6, aber GCC war in der Thread-Version 20% schneller. phoronix.com/scan.php?page=news_item&px=MTA5Nzc ist ein neuerer Phoronix-Benchmark.
Sean
6
"GCC ist nicht vollständig standardkonform": Ist es nicht möglich, Compiler-Switches zu verwenden, um die Einhaltung eines bestimmten Standards zu erzwingen?
Giorgio
4
Lesen Sie zuallererst nicht zu viel in Phoronix-Benchmarks oder lesen Sie sie lieber überhaupt nicht. Zweitens stimmt es, dass GCC nicht standardmäßig vollständig standardkonform ist, es sei denn, Sie geben explizit einen Standard an. Andernfalls werden die GNU-Erweiterungen ebenfalls aktiviert. Dies scheint jedoch ein merkwürdiger Grund zu sein, stattdessen Clang zu verwenden Auch sie implementieren die am häufigsten verwendeten GNU-Erweiterungen, da sie Clang als Ersatz für GCC einsetzen möchten.
kyrias
1
@ Giorgio: Nein. Ein Beispiel finden Sie unter gcc.gnu.org/c99status.html - und das ist nur C99 (der selbst jetzt 14 Jahre alt ist). Auch gcc.gnu.org/onlinedocs/libstdc++/manual/status.html - clang unterstützt beide besser (ich denke, es ist voll - und wenn nicht, ist es definitiv besser).
Tim Čas
4
@Demizey Ich verteidige Phoronix nicht, aber wenn Sie etwas ablehnen, sollten Sie zumindest einen gültigen Grund angeben.
Mario
38

Eine erwägenswerte Sache ist, dass FreeBSD derzeit GCC 4.2.1 verwendet, wie in ire_and_curses answer angegeben. Daher sind die Leistungsvergleiche nicht von 4.5 oder 4.6 und nicht wirklich relevant für das Projekt. Daher sollten Sie folgende Fragen stellen:

  1. Was sind die Leistungsgewinne des neuen Clangs gegenüber dem älteren GCC, den das Projekt verwendet?

  2. Wie vergleichen sich dieselben in GCC 4.2.1 kompilierten Binärdateien mit dem neuen Clang?

Aufgrund der Umstellung von GCC auf die GPL v3 war FreeBSD gezwungen, weiterhin GCC 4.2.1 (GPL v2) zu verwenden, das bereits 2007 veröffentlicht wurde und inzwischen erheblich veraltet ist.

Wenn Clang hinter dem aktuellen GCC zurückbleibt, aber dem implementierten GCC im Projekt noch einige Jahre voraus ist, ist ihre Entscheidung, sich weiterzuentwickeln, gut begründet und wirklich inspiriert.

Mikel King
quelle
19

Obwohl es sich bei GCC um GPLv3 handelt, unterlagen die von GCC erstellten Binärdateien keiner Lizenzbeschränkung. Im Klartext können Sie GCC verwenden, um Software zu erstellen, die unter die gewünschte Lizenz fällt. Sogar die C-Bibliothek, die mit GCC geliefert wird und in der Binärdatei enthalten ist, ist lizenzfrei. http://www.gnu.org/licenses/gcc-exception-faq.html

Abschnitt 2 der GNU GPLv3:

Sie haben die Berechtigung, eine Arbeit aus Zielcode zu verbreiten, die durch die Kombination der Laufzeitbibliothek mit unabhängigen Modulen erstellt wurde, auch wenn eine solche Verbreitung andernfalls gegen die Bestimmungen der GPLv3 verstoßen würde, vorausgesetzt, der gesamte Zielcode wurde durch berechtigte Kompilierungsprozesse generiert. Sie können dann eine solche Kombination unter Bedingungen Ihrer Wahl im Einklang mit der Lizenzierung der Independent-Module übermitteln .

"Berechtigt" bedeutet, dass die Kompilierung nicht sowohl GCC- als auch GPL-inkompatible Software umfasst. Das ist keine Einschränkung: BSD-lizenzierte Software kann im Build-Prozess mit GNU GCC verwendet werden.

Wie Sie sehen, gibt es im Gegensatz zu den obigen Ausführungen keinen REAL -lizenzbezogenen Grund, sich von GCC zu entfernen, da keine Inkompatibilität mit der Verwendung von GCC in FreeBSD besteht.

Der wahre Grund für diese Veränderung ist politisch und opportunistisch:

  • BSD hat eine eigene Lizenz, die philosophisch mit der GNU Public Lizenz konkurriert (wie * ire_and_curses * oben erklärt),
  • CLANG ist ein neuer Nicht-GPL-Compiler, der von einem Sponsor von FreeBSD initiiert wurde und technisch gesehen dem GPL-lizenzierten GCC entspricht (wie oben von * ire_and_curses * beschrieben).

Diese Tatsachen bieten FreeBSD die Möglichkeit, sich von GCC zu entfernen und es loszuwerden: Sie sind rechtlich nicht dazu gezwungen, da sie GCC durchaus noch zum Erstellen von kostenloser oder BSD-lizenzierter Software verwenden könnten, aber sie möchten sich an das halten Philosophie "Alle BSD-lizenzierte Software".

Eric
quelle
5
Entschuldigung, ich musste das ablehnen. Leider zeigt sich Ihre Unkenntnis mit BSDs und Software-Tiefs. Nur zur Veranschaulichung: Es war eine politische und keine technische Entscheidung, die BSD Anfang der neunziger Jahre vom traditionellen Portable C Compiler (PCC) zum GCC wechselte. Clang ist ein Apple-Projekt! Als jemand, der täglich GCC benutzt, um auf OpenBSD zu leben, das versucht, auf PCC zurückzukehren, irrt man sich in allen Konten.
Predrag Punosevac
5
Es geht nicht um die resultierenden Binärdateien, sondern um die Tatsache, dass gcc Teil von FreeBSD ist - daher sind die Lizenzbeschränkungen von Bedeutung.
Sonntag,
3
Wenn die Religion des Projekts "No GPLv3" lautet, verschwinden die technischen Aspekte. Stellen Sie sich vor, Sie hätten beispielsweise einen Microsoft-Compiler verwendet.
Thorbjørn Ravn Andersen
3
Dies ist die einzige Antwort, die das richtig hervorhebt license of compiler != license of end product. Beschwerden über eine Lizenz des Compilers können möglicherweise nur relevant sein, wenn der Benutzer die Lizenz nicht versteht.
Brandin
6
Es geht nicht darum, ob die erstellten Binärdateien unter GPLv3 fallen, sondern ob Änderungen am Compiler selbst GPLv3-Konformität erfordern. Hardwareanbieter modifizieren häufig den Stock Compiler, um besser mit ihrer Hardware zu arbeiten, oder nutzen Hardware auf proprietäre Weise. Das Risiko zu beseitigen, dass Ihre benutzerdefinierten Änderungen der GPLv3 entsprechen müssen, oder rechtliche Schritte zu riskieren, ist eine große Sache für solche Organisationen. Es ist wirklich die Lizenz des Compilers, die hier zählt.
David Harks
7

Ich bin kein Experte, aber ich verstehe, dass Clang / LLVM weniger Ressourcen verbraucht als GCC und schneller ist.

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

Wenn Sie in einer Umgebung arbeiten, in der Sie viele Dinge erstellen müssen, kann diese Leistung zu einer echten Einsparung von Energiekosten und Zeit führen. Wenn es echt ist.

EightBitTony
quelle
Kleinigkeiten ... und es gibt Tools, mit denen sich wiederholende Kompilierungszeiten weiter verkürzen lassen - ccache.samba.org Ungeachtet der offensichtlichen Möglichkeiten für paralleles Kompilieren (siehe distcc) sind die Verbindungszeiten in großen Projekten schwieriger zu lösen
Rob11311
Ja, sehr gut, aber der resultierende Binärcode ist langsamer, p
rustyx
1
@rustyx nicht mit gcc 4.2 verglichen!
Miles Rout