Riepilogo: Il motivo principale per passare da GCC a Clang è l'incompatibilità della licenza GPL v3 di GCC con gli obiettivi del progetto FreeBSD . Ci sono anche questioni politiche a che fare con gli investimenti aziendali, così come i requisiti della base di utenti. Infine, ci sono dei vantaggi tecnici attesi dalla conformità agli standard e dalla facilità di debug. I miglioramenti delle prestazioni del mondo reale nella compilazione e nell'esecuzione sono specifici del codice e discutibili; i casi possono essere fatti per entrambi i compilatori.
FreeBSD e la GPL: FreeBSD ha una relazione difficile con la GPL. I sostenitori della licenza BSD ritengono che il software veramente gratuito non abbia restrizioni d'uso . I sostenitori della GPL ritengono che siano necessarie restrizioni al fine di proteggere la libertà del software, e in particolare che la capacità di creare software non libero dal software libero è una forma ingiusta di potere piuttosto che una libertà. Il progetto FreeBSD, ove possibile, cerca di evitare l'uso della GPL :
A causa delle complessità aggiuntive che possono evolversi nell'uso commerciale del software GPL, tuttavia, ci sforziamo di sostituire tale software con invii sotto la licenza più rilassata di FreeBSD ogni volta che è possibile.
FreeBSD e la GPL v3: La GPL v3 proibisce esplicitamente la cosiddetta tivoizzazione del codice, una scappatoia nella GPL v2 che ha permesso alle restrizioni hardware di impedire modifiche software altrimenti legali da parte degli utenti. Chiudere questa scappatoia è stato un passaggio inaccettabile per molti nella comunità di FreeBSD:
In particolare, i fornitori di apparecchiature hanno più da perdere se la vasta gamma di software attualmente in licenza con GPLv2 passa oggi alla nuova licenza. Non avranno più la libertà di usare il software GPLv3 e limitare la modifica del software installato sul loro hardware ... In breve, c'è una vasta base di consumatori OpenSource che sono improvvisamente molto interessati a capire le alternative al software con licenza GPL.
A causa del passaggio di GCC a GPL v3, FreeBSD è stato costretto a rimanere usando GCC 4.2.1 (GPL v2), che è stato rilasciato nel 2007 , e ora è notevolmente obsoleto. Il fatto che FreeBSD non si sia mosso per usare versioni più moderne di GCC, anche con il mal di testa di manutenzione aggiuntivo di eseguire un vecchio compilatore e correzioni di backport, dà un'idea della forza del requisito per evitare GPL v3. Il compilatore C è un componente importante della base di FreeBSD e " uno degli obiettivi (indicativi) di FreeBSD 10 è un sistema di base privo di GPL ".
Investimenti aziendali: come molti dei principali progetti open source, FreeBSD riceve finanziamenti e attività di sviluppo dalle aziende. Sebbene la misura in cui FreeBSD sia finanziato o dato dallo sviluppo da parte di Apple non sia facilmente individuabile, vi è una considerevole sovrapposizione poiché il sistema operativo Darwin di Apple utilizza un sostanziale codice kernel originato da BSD . Inoltre, lo stesso Clang era originariamente un progetto Apple interno, prima di essere open source nel 2007 . Dato che le risorse aziendali sono un fattore chiave per il progetto FreeBSD, soddisfare le esigenze degli sponsor è probabilmente un fattore determinante per il mondo reale .
Base utente: FreeBSD è un'opzione attraente open source per molte aziende, perché la licenza è semplice, senza restrizioni e probabilmente non porta a azioni legali. Con l'arrivo di GPL v3 e le nuove disposizioni anti-tivoisation , è stato suggerito che c'è una tendenza accelerata, guidata dai fornitori, verso licenze più permissive . Poiché il vantaggio percepito da FreeBSD per le entità commerciali risiede nella sua licenza permissiva, vi è una crescente pressione da parte della base di utenti aziendali per allontanarsi da GCC e dalla GPL in generale.
Problemi con GCC: oltre alla licenza, l'utilizzo di GCC presenta alcuni problemi percepiti . GCC non è completamente conforme agli standard, e ha molte estensioni che non si trovano nella norma ISO C . Con oltre 3 milioni di righe di codice, è anche " uno dei progetti software più complessi e gratuiti / open source ". Questa complessità rende complessa la modifica del codice a livello di distro.
Vantaggi tecnici: Clang presenta alcuni vantaggi tecnici rispetto a GCC . I più importanti sono i messaggi di errore molto più informativi e un'API esplicitamente progettata per gli IDE, gli strumenti di refactoring e di analisi del codice sorgente. Sebbene il sito Web di Clang presenti grafici che indicano una compilazione e un utilizzo della memoria molto più efficienti, i risultati del mondo reale sono abbastanza variabili e sostanzialmente in linea con le prestazioni di GCC. In generale, i binari prodotti da Clang funzionano più lentamente rispetto ai binari GCC equivalenti:
Mentre usare LLVM è più veloce nella costruzione del codice di GCC ... nella maggior parte dei casi i binari compilati di GCC 4.5 avevano prestazioni migliori di LLVM-GCC o Clang ... nel resto dei test le prestazioni erano vicine a quelle di GCC o bene dietro a. In alcuni test, le prestazioni dei binari generati da Clang erano semplicemente orribili.
Conclusione: è altamente improbabile che l'efficienza della compilazione sia una motivazione significativa per correre il rischio sostanziale di spostare un grande progetto come FreeBSD in una toolchain di compilatore completamente nuova, in particolare quando mancano le prestazioni binarie. Tuttavia, la situazione non era davvero sostenibile. Data la scelta tra 1) eseguire un GCC obsoleto, 2) Passare a un GCC moderno ed essere costretto a utilizzare una licenza incompatibile con gli obiettivi del progetto o 3) passare a un compilatore con licenza BSD stabile, la decisione era probabilmente inevitabile. Tieni presente che questo vale solo per il sistema di base e supporto dalla distribuzione; nulla impedisce a un utente di installare e utilizzare un GCC moderno sulla propria casella FreeBSD.