Dlaczego FreeBSD wycofuje GCC na korzyść Clang / LLVM?


241

Więc surfowałem po sieci i natknąłem się na ten artykuł . Zasadniczo stwierdza, że FreeBSD , począwszy od wersji 10 i nowszych, przestanie używać GCC na rzecz Clang / LLVM .

Z tego, co widziałem do tej pory w sieci, Clang / LLVM jest dość ambitnym projektem, ale pod względem niezawodności nie może się równać z GCC .

Czy są jakieś techniczne powody, dla których FreeBSD wybiera LLVM jako infrastrukturę kompilatora, czy też cała sprawa sprowadza się do wiecznych licencji GNU / GPL vs. BSD?

To pytanie ma (jakoś) istotne informacje na temat korzystania z GCC we FreeBSD

Odpowiedzi:


361

Podsumowanie: Głównym powodem przejścia z GCC na Clang jest niezgodność licencji GCC GPL v3 z celami projektu FreeBSD . Istnieją również kwestie polityczne związane z inwestycjami korporacyjnymi, a także wymagania bazy użytkowników. Wreszcie oczekuje się technicznych korzyści związanych ze zgodnością ze standardami i łatwością debugowania. Rzeczywiste ulepszenia wydajności w zakresie kompilacji i wykonywania są specyficzne dla kodu i mogą być przedmiotem dyskusji; przypadki mogą być wykonane dla obu kompilatorów.

FreeBSD i GPL: FreeBSD ma niełatwe relacje z GPL. Zwolennicy licencji BSD uważają, że prawdziwie wolne oprogramowanie nie ma ograniczeń użytkowania . Zwolennicy GPL uważają, że ograniczenia są konieczne w celu ochrony wolności oprogramowania, a zwłaszcza, że ​​możliwość tworzenia niewolnego oprogramowania z wolnego oprogramowania jest niesprawiedliwą formą władzy, a nie wolności. Projekt FreeBSD, tam gdzie to możliwe, stara się unikać korzystania z GPL :

Ze względu na dodatkowe złożoności, które mogą ewoluować w komercyjnym użyciu oprogramowania GPL, staramy się jednak zastępować takie oprogramowanie zgłoszeniami w ramach łagodniejszej licencji FreeBSD, gdy tylko jest to możliwe.

FreeBSD i GPL v3: GPL v3 wyraźnie zakazuje tzw tiwoizacja kodu, lukę w GPL v2 co pozwoliło ograniczeń sprzętowych do zabrania modyfikowania oprogramowania inaczej prawnych przez użytkowników. Zamknięcie tej luki było niedopuszczalnym krokiem dla wielu członków społeczności FreeBSD:

W szczególności dostawcy urządzeń mogą najwięcej stracić, jeśli duża część oprogramowania obecnie licencjonowanego na podstawie GPLv2 migruje do nowej licencji. Nie będą już mieli możliwości korzystania z oprogramowania GPLv3 i ograniczania modyfikacji oprogramowania zainstalowanego na ich sprzęcie ... Krótko mówiąc, istnieje duża baza konsumentów OpenSource, którzy nagle są bardzo zainteresowani zrozumieniem alternatyw dla oprogramowania licencjonowanego GPL.

Z powodu przejścia GCC na GPL v3, FreeBSD zostało zmuszone do pozostania przy użyciu GCC 4.2.1 (GPL v2), które zostało wydane w 2007 roku i jest obecnie znacznie przestarzałe. Fakt, że FreeBSD nie przestawił się na używanie bardziej nowoczesnych wersji GCC, nawet z dodatkowymi problemami związanymi z utrzymaniem starego kompilatora i poprawek dotyczących backportowania, daje pewne wyobrażenie o sile wymogu unikania GPL v3. Kompilator C jest głównym składnikiem bazy FreeBSD, a „ jednym z (wstępnych) celów FreeBSD 10 jest system podstawowy wolny od GPL ”.

Inwestycje korporacyjne: Podobnie jak wiele dużych projektów open source, FreeBSD otrzymuje fundusze i prace rozwojowe od korporacji. Chociaż stopień, w jakim FreeBSD jest finansowany lub opracowywany przez Apple, nie jest łatwy do wykrycia, istnieje znaczny nakładanie się, ponieważ system operacyjny Darwin firmy Apple wykorzystuje znaczny kod jądra pochodzący z BSD . Ponadto sam Clang był pierwotnie wewnętrznym projektem Apple, zanim został otwarty w 2007 roku . Ponieważ zasoby korporacyjne są kluczowym czynnikiem umożliwiającym projekt FreeBSD, zaspokojenie potrzeb sponsorów jest prawdopodobnie znaczącym czynnikiem napędzającym rzeczywisty świat .

Baza użytkowników: FreeBSD jest atrakcyjną opcją typu open source dla wielu firm, ponieważ licencjonowanie jest proste, nieograniczone i raczej nie prowadzi do procesów sądowych. Wraz z pojawieniem się GPL v3 i nowymi przepisami anty-Tivoisation zasugerowano, że istnieje tendencja przyspieszająca, kierowana przez sprzedawców, w kierunku bardziej liberalnych licencji . Ponieważ postrzegana przewaga FreeBSD dla podmiotów komercyjnych polega na jego liberalnej licencji, narasta presja ze strony użytkowników korporacyjnych, aby odejść od GCC, a ogólnie GPL.

Problemy z GCC: Oprócz licencji korzystanie z GCC ma pewne dostrzegane problemy . GCC nie jest w pełni zgodny ze standardami i posiada wiele rozszerzeń, które nie występują w standardzie ISO C . Przy ponad 3 milionach linii kodu jest to także „ jeden z najbardziej złożonych i darmowych / otwartych programów ”. Ta złożoność sprawia, że ​​modyfikacja kodu poziomu dystrybucji jest trudnym zadaniem.

Korzyści techniczne: Clang ma pewne zalety techniczne w porównaniu do GCC . Najbardziej godne uwagi są znacznie bardziej pouczające komunikaty o błędach i specjalnie zaprojektowany interfejs API dla IDE, refaktoryzacji i narzędzi do analizy kodu źródłowego. Chociaż strona internetowa Clanga przedstawia wykresy wskazujące na znacznie bardziej wydajną kompilację i wykorzystanie pamięci, rzeczywiste wyniki są dość zmienne i zasadniczo zgodne z wydajnością GCC. Ogólnie rzecz biorąc, pliki binarne produkowane przez Clanga działają wolniej niż równoważne pliki binarne GCC:

Podczas gdy używanie LLVM jest szybsze w budowaniu kodu niż GCC ... w większości przypadków zbudowane pliki binarne GCC 4.5 działały lepiej niż LLVM-GCC lub Clang ... w pozostałych testach wydajność była zbliżona do GCC lub dobrze za. W niektórych testach wydajność plików binarnych generowanych przez Clanga była po prostu okropna.

Wniosek: Bardzo mało prawdopodobne jest, aby wydajność kompilacji była istotnym czynnikiem motywującym do podjęcia znacznego ryzyka przeniesienia dużego projektu, takiego jak FreeBSD, na zupełnie nowy zestaw narzędzi kompilatora, szczególnie w przypadku braku wydajności binarnej. Jednak sytuacja tak naprawdę nie do zniesienia. Biorąc pod uwagę wybór między 1) uruchomieniem przestarzałego GCC, 2) przejściem do nowoczesnego GCC i zmuszeniem do korzystania z licencji niezgodnej z celami projektu lub 3) przejściem do stabilnego kompilatora licencjonowanego BSD, decyzja było prawdopodobnie nieuniknione. Należy pamiętać, że dotyczy to tylko systemu podstawowego i wsparcia z dystrybucji; nic nie stoi na przeszkodzie, aby użytkownik sam zainstalował i używał nowoczesnego GCC na swoim urządzeniu FreeBSD.


4
Cytowany przez ciebie test porównawczy pochodzi ze starej wersji Clanga. Testy porównawcze dla najnowszych wersji wydają się być nowsze wersje są bliższe. Moje własne badania prostych programów spowodowały, że Clang 3.0 był kilka procent szybszy niż GCC 4.6, ale GCC był o 20% szybszy w wersji z wątkami. phoronix.com/scan.php?page=news_item&px=MTA5Nzc to nowszy test porównawczy Phoronix.
Sean

6
„GCC nie jest w pełni zgodny ze standardami”: Czy nie można użyć przełączników kompilatora w celu wymuszenia zgodności z danym standardem?
Giorgio

4
Przede wszystkim nie wczytaj zbyt wiele w testy porównawcze Phoronix, a raczej w ogóle ich nie czytaj. Po drugie, to prawda, że ​​GCC nie jest w pełni domyślnie zgodny ze standardami, chyba że wyraźnie określisz standard, jeśli nie, będzie miał również włączone rozszerzenia GNU, ale wydaje się to dziwnym powodem, aby zamiast tego używać Clanga, ponieważ oni także wdrażają najczęściej używane rozszerzenia GNU, ponieważ dążą do tego, aby Clang był użyteczny jako kropla zastępująca GCC.
kyrias

1
@Giorgio: Nie. Zobacz przykład gcc.gnu.org/c99status.html - a to tylko C99 (który sam ma teraz 14 lat). Również gcc.gnu.org/onlinedocs/libstdc++/manual/status.html - clang ma lepsze wsparcie dla obu (myślę, że jest pełne - a jeśli nie, to zdecydowanie przynajmniej lepsze).
Tim Čas

4
@Demizey Nie bronię Phoronix, ale jeśli zamierzasz coś odrzucić, powinieneś przynajmniej podać ważny powód.
Mario,

38

Jedną z rzeczy, które warto wziąć pod uwagę, jest to, że FreeBSD obecnie korzysta z GCC 4.2.1, jak zauważono w odpowiedzi ire_and_curses, dlatego porównania wydajności nie wynoszą 4,5, a nawet 4,6 nie są tak naprawdę odpowiednie dla projektu. Dlatego pytania, które powinieneś zadać to:

  1. Jakie są przyrosty wydajności nowego Clanga w porównaniu ze starszym GCC, którego używa projekt?

  2. Jak te same pliki binarne skompilowane w GCC 4.2.1 różnią się od nowego Clanga?

Z powodu przejścia GCC na GPL v3, FreeBSD zostało zmuszone do pozostania przy użyciu GCC 4.2.1 (GPL v2), które zostało wydane w 2007 roku i jest obecnie znacznie przestarzałe.

Jeśli Clang pozostaje w tyle za obecnym GCC, ale wciąż jest o lata świetlne przed wdrożonym GCC w projekcie, ich decyzja o ewolucji jest dobrze uzasadniona i prawdziwie zainspirowana.


19

Mimo że GCC to GPLv3, wynikowe pliki binarne tworzone przez GCC nigdy nie miały żadnych ograniczeń licencyjnych. Oczywiste jest, że możesz używać GCC do tworzenia oprogramowania objętego odpowiednią licencją. Nawet biblioteka C dostarczana z GCC i zawarta w pliku binarnym jest wolna od licencji. http://www.gnu.org/licenses/gcc-exception-faq.html

Sekcja 2 GNU GPLv3:

Masz uprawnienia do propagowania pracy kodu docelowego utworzonego przez połączenie biblioteki wykonawczej z niezależnymi modułami, nawet jeśli takie rozpowszechnianie naruszałoby warunki GPLv3, pod warunkiem, że cały kod docelowy został wygenerowany przez kwalifikujące się procesy kompilacji. Następnie możesz przekazać taką kombinację na warunkach wybranych przez ciebie , zgodnie z licencjonowaniem niezależnych modułów.

„Kwalifikujący się” oznacza, że ​​kompilacja nie obejmuje zarówno oprogramowania GCC, jak i oprogramowania niezgodnego z GPL. To nie jest ograniczenie: oprogramowania licencjonowanego BSD można używać w procesie kompilacji z udziałem GNU GCC.

Jak widać, w przeciwieństwie do tego, co powiedziano powyżej, nie ma PRAWDZIWEGO powodu do odejścia od GCC, ponieważ nie ma niezgodności z używaniem GCC w FreeBSD.

Prawdziwy powód tej zmiany jest polityczny i oportunistyczny:

  • BSD ma własną licencję, która filozoficznie konkuruje z licencją publiczną GNU (jak wyjaśniono powyżej * ire_and_curses *),
  • CLANG to nowy kompilator inny niż GPL zainicjowany przez sponsora FreeBSD, który wydaje się technicznie równoważny licencjonowanemu GPL GCC (jak opisano powyżej w * ire_and_curses *).

Fakty te dają FreeBSD możliwość odejścia od GCC i pozbycia się go: w rzeczywistości nie są do tego prawnie zmuszone, ponieważ mogliby nadal używać GCC do tworzenia darmowego lub licencjonowanego oprogramowania BSD, ale chcą trzymać się filozofia „całego oprogramowania licencjonowanego BSD”.


5
Przepraszam, że musiałem to głosować. Niestety, Twoja nieznajomość BSD i niedociągnięć oprogramowania pokazuje. Dla przypomnienia, decyzja polityczna, a nie techniczna, skłoniła BSD do przejścia z tradycyjnego przenośnego kompilatora C (PCC) na GCC na początku lat dziewięćdziesiątych. Clang to projekt Apple! Jako ktoś, kto używa GCC na co dzień do życia na OpenBSD i próbuje wrócić do PCC, po prostu się mylisz na wszystkich kontach.
Predrag Punosevac

5
Nie chodzi o wynikowe pliki binarne, chodzi o fakt, że gcc jest częścią FreeBSD - dlatego ograniczenia licencji mają znaczenie.
sstn

3
Jeśli religia projektu mówi „No GPLv3”, wówczas aspekty techniczne zanikają - wyobraź sobie, że używali na przykład kompilatora Microsoft.
Thorbjørn Ravn Andersen

3
To jedyna odpowiedź, która poprawnie to wskazuje license of compiler != license of end product. Skargi dotyczące licencji kompilatora nie mogą być istotne, chyba że użytkownik nie zrozumie licencji.
Brandin

6
Nie chodzi o to, czy tworzone pliki binarne podlegają GPLv3, chodzi o to, czy zmiany w samym kompilatorze wymagają zgodności z GPLv3. Dostawcy sprzętu często modyfikują kompilator podstawowy, aby lepiej współpracował ze swoim sprzętem lub korzystał ze sprzętu w zastrzeżony sposób. Usunięcie ryzyka, że ​​zmiany niestandardowe muszą być zgodne z GPLv3 lub ryzykować podjęcie działań prawnych, jest dużą sprawą dla takich organizacji. Tak naprawdę liczy się licencja kompilatora.
David Harks

7

Nie jestem ekspertem, ale rozumiem, że Clang / LLVM zużywa mniej zasobów niż GCC i jest szybszy.

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

Jeśli prowadzisz środowisko, w którym musisz budować wiele rzeczy, wiele razy taka wydajność może przełożyć się na rzeczywistą oszczędność kosztów energii i czasu. Jeśli to prawda.


Drobne ... i są narzędzia do dalszego skrócenia powtarzalnych czasów kompilacji - ccache.samba.org Nieważne oczywiste możliwości kompilacji równoległej (patrz distcc), czasy linkowania są trudniejsze do rozwiązania w dużych projektach
Rob11311

Tak, bardzo dobrze, ale wynikowy kod binarny jest wolniejszy; p
rustyx

1
@rustyx w porównaniu do gcc 4.2!
Miles Rout
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.