Pourquoi FreeBSD désapprouve-t-il GCC en faveur de Clang / LLVM?

241

Donc, je surfais sur le net et suis tombé sur cet article . Il indique essentiellement que FreeBSD , à partir de la version 10 et ultérieure, dépréciera GCC en faveur de Clang / LLVM .

D'après ce que j'ai vu sur le net jusqu'à présent, Clang / LLVM est un projet assez ambitieux, mais en termes de fiabilité, il ne peut rivaliser avec GCC .

Existe-t-il des raisons techniques pour lesquelles FreeBSD a choisi LLVM comme infrastructure de compilation, ou est-ce que tout se résume aux licences éternelles GNU / GPL vs BSD?

Cette question a (en quelque sorte) des informations pertinentes sur l'utilisation de GCC dans FreeBSD

NlightNFotis
la source

Réponses:

361

Résumé: La principale raison du passage de GCC à Clang est l'incompatibilité de la licence GPL v3 de GCC avec les objectifs du projet FreeBSD . Il existe également des problèmes politiques liés à l'investissement des entreprises, ainsi qu'aux exigences de la base d'utilisateurs. Enfin, des avantages techniques attendus sont liés à la conformité aux normes et à la facilité de débogage. Les améliorations des performances du monde réel en matière de compilation et d’exécution sont spécifiques au code et discutables; des cas peuvent être faits pour les deux compilateurs.

FreeBSD et la GPL: FreeBSD a une relation difficile avec la GPL. Les défenseurs des licences BSD estiment que les logiciels véritablement libres ne sont soumis à aucune restriction d'utilisation . Les défenseurs de la GPL estiment que des restrictions sont nécessaires pour protéger la liberté des logiciels, et en particulier que la possibilité de créer des logiciels non libres à partir de logiciels libres est une forme de pouvoir injuste plutôt qu'une liberté. Le projet FreeBSD, dans la mesure du possible, tente d’ éviter l’utilisation de la GPL :

En raison des complexités supplémentaires pouvant évoluer dans l'utilisation commerciale du logiciel GPL, nous essayons cependant de remplacer ce logiciel par des soumissions sous la licence plus souple de FreeBSD, dans la mesure du possible.

FreeBSD et la GPL v3: La GPL v3 interdit explicitement la soi-disant Tivoisation de code, une faille dans la GPL v2 qui permettait à des restrictions matérielles d'interdire aux utilisateurs des modifications logicielles par ailleurs légales. Fermer cette échappatoire a été une étape inacceptable pour de nombreux membres de la communauté FreeBSD:

Les éditeurs d’appareils, en particulier, ont le plus à perdre si l’important ensemble de logiciels actuellement sous licence GPLv2 migre vers la nouvelle licence. Ils n'auront plus la liberté d'utiliser le logiciel GPLv3 et de restreindre la modification du logiciel installé sur leur matériel ... En bref, il existe un grand nombre de consommateurs OpenSource qui sont soudainement très intéressés par la compréhension des alternatives au logiciel sous licence GPL.

En raison du passage de GCC à la GPL v3, FreeBSD a été obligé de continuer à utiliser GCC 4.2.1 (GPL v2), qui avait été publiée il y a longtemps, en 2007 , et est maintenant considérablement obsolète. Le fait que FreeBSD n’ait pas décidé d’utiliser des versions plus modernes de GCC, même avec les problèmes de maintenance supplémentaires liés à l’exécution d’un vieux compilateur et à des correctifs de backporting, donne une idée de la force de la nécessité d’éviter la GPL v3. Le compilateur C est un composant majeur de la base FreeBSD et "l' un des objectifs (provisoires) de FreeBSD 10 est un système de base exempt de GPL ".

Investissement des entreprises: À l'instar de nombreux grands projets open source, FreeBSD reçoit du financement et du développement de sociétés. Bien que le degré de financement ou de développement de FreeBSD par Apple ne soit pas facilement décelable, il existe un chevauchement considérable du fait que le système d’exploitation Darwin d’Apple utilise un code noyau substantiel provenant de BSD . De plus, Clang était à l'origine un projet Apple interne, avant d'être open source en 2007 . Les ressources de l'entreprise étant un élément clé du projet FreeBSD, la satisfaction des besoins des sponsors est probablement un facteur important du monde réel .

Userbase: FreeBSD est une option open source attrayante pour de nombreuses entreprises, car la licence est simple, non restrictive et peu susceptible de donner lieu à des poursuites. Avec l’arrivée de la GPL v3 et les nouvelles dispositions anti-Tivoisation , il a été suggéré que la tendance était de plus en plus rapide et dictée par les fournisseurs de licences plus permissives . Comme l'avantage perçu par FreeBSD pour les entités commerciales réside dans sa licence permissive, les utilisateurs de l'entreprise, de plus en plus pressés, s'éloignent de GCC et de la GPL en général.

Problèmes liés à GCC: Outre la licence, l'utilisation de GCC soulève certains problèmes . GCC n'est pas conforme entièrement aux normes, et a de nombreuses extensions ne se trouvent pas dans la norme ISO C . Avec plus de 3 millions de lignes de code, il s'agit également de "l' un des projets de logiciels les plus complexes et les plus libres / ouverts ". Cette complexité rend la modification de code au niveau de la distribution difficile.

Avantages techniques: Clang présente certains avantages techniques par rapport à GCC . Les plus notables sont les messages d'erreur beaucoup plus informatifs et une API explicitement conçue pour les IDE, les outils de refactoring et d'analyse de code source. Bien que le site Web de Clang présente des tracés indiquant une compilation et une utilisation de la mémoire beaucoup plus efficaces, les résultats réels sont assez variables et largement conformes aux performances de GCC. En général, les fichiers binaires produits par Clang s'exécutent plus lentement que les fichiers binaires GCC équivalents:

Bien que l'utilisation de LLVM soit plus rapide en code de construction que GCC ... dans la plupart des cas, les fichiers binaires construits de GCC 4.5 avaient obtenu de meilleurs résultats que LLVM-GCC ou Clang ... dans les autres tests, les performances étaient soit proches de celles de GCC, soit bien. derrière. Dans certains tests, les performances des fichiers binaires générés par Clang étaient simplement terribles.

Conclusion: il est hautement improbable que l'efficacité de la compilation soit un facteur de motivation important pour prendre le risque substantiel de déplacer un projet de grande envergure comme FreeBSD vers une toute nouvelle chaîne de compilation, en particulier lorsque les performances binaires font défaut. Cependant, la situation n'était pas vraiment tenable. Vous avez le choix entre 1) utiliser un GCC obsolète, 2) passer à un GCC moderne et être forcé d’utiliser une licence incompatible avec les objectifs du projet ou 3) opter pour un compilateur stable sous licence BSD, la décision était probablement inévitable. Gardez à l'esprit que cela ne s'applique qu'au système de base et au support de la distribution; rien n'empêche un utilisateur d'installer et d'utiliser un GCC moderne sur sa machine FreeBSD.

ire_and_curses
la source
4
Le repère que vous avez cité provient d’une ancienne version de Clang. Les points de repère pour les versions récentes semblent être les versions récentes sont plus proches. Ma propre recherche de programmes simples a permis à Clang 3.0 d’accroître sa vitesse de rotation de quelques pour cent par rapport à GCC 4.6, mais GCC était 20% plus rapide sur la version threadée. phoronix.com/scan.php?page=news_item&px=MTA5Nzc est un nouveau benchmark de Phoronix.
Sean
6
"GCC n'est pas entièrement conforme aux normes": n'est-il pas possible d'utiliser des commutateurs de compilateur pour appliquer la conformité à une norme donnée?
Giorgio
4
Tout d’abord, n’en lisez pas trop dans les tests de performances de Phoronix, ou plutôt, ne les lisez pas du tout. Deuxièmement, il est vrai que GCC n’est pas entièrement conforme aux normes par défaut, à moins que vous ne spécifiiez explicitement une norme. Sinon, les extensions GNU seront également activées, mais cela semblerait une raison étrange d’utiliser plutôt Clang. eux aussi mettent en œuvre les extensions GNU les plus couramment utilisées, car ils cherchent à ce que Clang soit utilisable comme remplacement instantané de GCC.
Kyrias
1
@Giorgio: Non. Voir gcc.gnu.org/c99status.html pour un exemple - et ce n'est que C99 (qui a lui-même 14 ans maintenant). Aussi gcc.gnu.org/onlinedocs/libstdc++/manual/status.html - clang a un meilleur support pour les deux (je pense qu'il est plein - et sinon, il est certainement au moins mieux).
Tim Čas
4
@Demizey, je ne défends pas Phoronix, mais si vous voulez écarter quelque chose, vous devriez au moins fournir une raison valable.
Mario
38

Une chose à considérer est que FreeBSD utilise actuellement GCC 4.2.1 comme indiqué dans la réponse de ire_and_curses. Les comparaisons de performances ne sont donc pas de 4.5 ou même 4.6 ne sont pas vraiment pertinentes pour le projet. Par conséquent, les questions que vous devriez vous poser sont les suivantes:

  1. Quels sont les gains de performance du nouveau Clang par rapport à l'ancien GCC utilisé par le projet?

  2. Comment les mêmes fichiers binaires compilés dans GCC 4.2.1 se comparent-ils au nouveau Clang?

En raison du passage de GCC à la GPL v3, FreeBSD a été obligé de continuer à utiliser GCC 4.2.1 (GPL v2), qui avait été publiée il y a longtemps, en 2007, et est maintenant considérablement obsolète.

Si Clang est à la traîne par rapport au CCG actuel, mais qu'il a encore des années lumière d'avance sur le CCG mis en œuvre dans le projet, sa décision d'évoluer est bien justifiée et véritablement inspirée.

Mikel King
la source
19

Même si GCC est GPLv3, les fichiers binaires résultants produits par GCC n'ont jamais eu de contrainte de licence. En clair, vous pouvez utiliser GCC pour créer un logiciel relevant de la licence de votre choix. Même la bibliothèque C fournie avec GCC et incluse dans le binaire est sans licence. http://www.gnu.org/licenses/gcc-exception-faq.html

Section 2 de la GNU GPLv3:

Vous êtes autorisé à propager une œuvre de code cible formée en combinant la bibliothèque d'exécution avec des modules indépendants, même si cette propagation contreviendrait aux termes de GPLv3, à condition que tout le code cible ait été généré par des processus de compilation éligibles. Vous pouvez ensuite transmettre une telle combinaison selon les termes de votre choix , conformément à la licence des modules indépendants.

"Eligible" signifie que la compilation ne concerne pas les logiciels incompatibles GCC et GPL. Ce n'est pas une restriction: un logiciel sous licence BSD peut être utilisé dans le processus de construction impliquant GNU GCC.

Comme vous pouvez le voir, contrairement à ce qui a été dit plus haut, il n'y a pas REAL raison lié à la licence de se éloigner de GCC car il n'y a pas d' incompatibilité avec l' utilisation du CCG à l' intérieur FreeBSD.

La vraie raison derrière ce changement est politique et opportuniste:

  • BSD possède sa propre licence qui, philosophiquement, entre en concurrence avec la licence GNU Public (comme expliqué ci-dessus par * ire_and_curses *),
  • CLANG est un nouveau compilateur non-GPL initié par un sponsor de FreeBSD qui semble techniquement équivalent au GCC sous licence GPL (comme décrit ci-dessus par * ire_and_curses *).

Ces faits offrent à FreeBSD l’occasion de s’éloigner de GCC et de s’en débarrasser: ils ne sont pas légalement obligés de le faire, car ils pourraient toujours utiliser GCC pour créer des logiciels libres ou sous licence BSD, mais ils veulent rester fidèles à la réalité. philosophie "tous les logiciels sous licence BSD".

Eric
la source
5
Désolé j'ai dû voter ceci. Malheureusement, votre méconnaissance des BSD et des bas logiciels montre. Pour mémoire, c’est la décision politique et non technique qui a poussé les BSD à passer de leur traditionnel compilateur Portable C (PCC) à GCC au début des années 90. Clang est un projet Apple! En tant que personne qui utilise quotidiennement GCC pour vivre sur OpenBSD et qui tente de revenir à PCC, vous vous trompez dans tous les comptes.
Predrag Punosevac
5
Il ne s'agit pas des binaires résultants, mais du fait que gcc fait partie de FreeBSD - les contraintes de licence importent donc.
sstn
3
Si la religion du projet dit "Pas de GPLv3", alors les aspects techniques disparaîtront - imaginez simplement qu'ils utilisaient par exemple un compilateur Microsoft.
Thorbjørn Ravn Andersen
3
C’est la seule réponse qui indique correctement que license of compiler != license of end product. Les réclamations concernant une licence du compilateur ne peuvent éventuellement être pertinentes que si l'utilisateur ne comprend pas la licence.
Brandin
6
Il ne s'agit pas de savoir si les fichiers binaires produits relèvent de la GPLv3, mais de savoir si les modifications apportées au compilateur lui-même nécessitent la conformité à la GPLv3. Les fournisseurs de matériel modifient souvent le compilateur de stock pour mieux utiliser leur matériel ou en tirent parti. Supprimer le risque que vos modifications personnalisées doivent être conformes à la GPLv3 ou risquer des poursuites judiciaires est un gros problème pour de telles organisations. C'est vraiment la licence du compilateur qui compte ici.
David Harks
7

Je ne suis pas un expert, mais je pense que Clang / LLVM utilise moins de ressources que GCC et est plus rapide.

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

Si vous travaillez dans un environnement où vous devez souvent construire beaucoup de choses, ces performances peuvent se traduire par de réelles économies de temps et de coûts énergétiques. Si c'est réel.

EightBitTony
la source
Minor .. et il existe des outils pour réduire encore les temps de compilation répétitifs - ccache.samba.org Peu importe les possibilités évidentes de compilation parallèle (voir distcc), les temps de liaison ont tendance à être plus difficiles à résoudre dans les grands projets
Rob11311
Oui, très bien, mais le code binaire résultant est plus lent. P
rustyx
1
@rustyx pas comparé à gcc 4.2!
Miles Rout