FreeBSD neden GCC'yi Clang / LLVM lehine kaldırıyor?


241

Böylece internette dolaşıyordum ve bu yazıya rastladım . Temel olarak , Sürüm 10 ve sonrasında başlayan FreeBSD’nin CCC / LLVM lehine GCC’nin kullanımdan kaldırılacağını belirtir .

Şu ana kadar gördüğüm kadarıyla, Clang / LLVM oldukça iddialı bir proje, ancak güvenilirlik açısından GCC ile eşleşemiyor .

FreeBSD'nin derleyici altyapısı olarak LLVM'yi seçmesinin teknik sebepleri var mı , yoksa bütün mesele sonsuz GNU / GPL'ye karşı BSD lisanslarına mı düşüyor?

Bu soru kullanımıyla ilgili (her nasılsa) İlgili bilgiler GCC içinde FreeBSD

Yanıtlar:


361

Özet: geçiş için birincil nedeni GCC için Clang GCC en uyumsuzluğudur GPL v3 ile lisans FreeBSD projesinin hedefleri . Kullanıcı yatırımı gerekliliklerinin yanı sıra kurumsal yatırımlarla ilgili politik konular da vardır. Son olarak, standartlara uyum ve hata ayıklama kolaylığı ile ilgili yapılması beklenen teknik avantajlar vardır. Derleme ve uygulamadaki gerçek dünya performansındaki gelişmeler kodlara özel ve tartışılabilir; her iki derleyici için de durumlar yapılabilir.

FreeBSD ve GPL: FreeBSD'nin GPL ile tedirgin bir ilişkisi var. BSD lisans savunucuları, gerçekten özgür yazılımın kullanım kısıtlaması bulunmadığını düşünüyor . GPL savunucuları , yazılım özgürlüğünü korumak için kısıtlamaların gerekli olduğuna ve özellikle de özgür olmayan yazılımın özgür yazılımdan yaratılmasının bir özgürlük değil , haksız bir güç biçimi olduğuna inanmaktadır . FreeBSD projesi, mümkün olduğunda GPL'nin kullanılmasından kaçınmaya çalışır :

Bununla birlikte, GPL yazılımının ticari kullanımında gelişebilecek ek karmaşıklıklar nedeniyle, mümkün olduğunda, daha rahat bir FreeBSD lisansı altında bu tür yazılımları daha rahat bir FreeBSD lisansı altında sunulan gönderilerle değiştirmeye çalışıyoruz.

FreeBSD ve GPL v3: GPL v3 açıkça sözde yasaklamaktadır Tivoisation kod, bir kaçamak GPL v2 kullanıcılar tarafından aksi yasal yazılım değişiklikleri izin vermemek için donanım kısıtlamaları sağladı. Bu boşluğu kapatmak , FreeBSD topluluğundaki birçok kişi için kabul edilemez bir adımdı :

Özellikle cihaz satıcıları, günümüzde GPLv2 kapsamında lisanslanmış olan büyük yazılım kitlesinin bugün yeni lisansa geçmesi durumunda kaybedecek en fazla şeye sahiptir. Artık GPLv3 yazılımını kullanma özgürlüğüne sahip olmayacaklar ve donanımlarına yüklenen yazılımın değiştirilmesini kısıtlayacaklar… Kısacası, GPL lisanslı yazılımın alternatiflerini anlamakla aniden ilgilenen çok sayıda OpenSource tüketicisi var.

GCC’nin GPL v3’e taşınması nedeniyle, FreeBSD, 2007’de geri bırakılan ve şu anda önemli ölçüde eski olan GCC 4.2.1 (GPL v2) kullanarak kalmaya zorlandı . FreeBSD'nin GCC'nin daha modern versiyonlarını kullanmak için harekete geçmemiş olması, eski bir derleyici çalıştırma ve destekleyici düzeltmelerin ek bakım baş ağrılarıyla bile olsa, GPL v3'ten kaçınma gerekliliği hakkında bir fikir vermektedir. C derleyicisi FreeBSD tabanının önemli bir bileşenidir ve " FreeBSD 10 için (geçici) hedeflerden biri GPL içermeyen bir temel sistemdir ".

Kurumsal yatırım: Birçok büyük açık kaynaklı proje gibi FreeBSD, kuruluşlardan finansman ve geliştirme çalışmaları almaktadır. FreeBSD'nin Apple tarafından finanse edilmesinin veya geliştirilmesinin ne kadar kolay olduğu keşfedilemese de, Apple'ın Darwin işletim sistemi BSD kaynaklı çekirdek kodunu kullandığı için önemli miktarda örtüşme var . Ek olarak, Clang'ın kendisi, 2007'de açık kaynaklı hale getirilmeden önce başlangıçta bir Apple projesi idi . Kurumsal kaynaklar FreeBSD projesinin kilit bir aracı olduğundan, sponsorun ihtiyaçlarını karşılamak muhtemelen önemli bir gerçek dünya sürücüsüdür .

Userbase: FreeBSD birçok şirket için cazip bir açık kaynak seçeneğidir, çünkü lisanslama basit, sınırlayıcı değildir ve davalara yol açma olasılığı düşüktür. GPL v3'ün ve yeni Tivayet Önleme hükümlerinin gelmesiyle , daha fazla izin verilen lisanslara yönelik hızlandırıcı, satıcı odaklı bir eğilim olduğu öne sürüldü . FreeBSD'nin ticari varlıklara karşı algılanan avantajı, izin verilen lisansında yattığı için, kurumsal kullanıcı tabanından GCC'den ve genel olarak GPL'den uzaklaşmak için artan bir baskı var.

GCC ile ilgili sorunlar: Lisans dışında GCC kullanımında bazı algılanan sorunlar vardır . GCC tam standartlara uygun değildir ve ISO standardı C'de bulunmayan birçok uzantıya sahiptir . 3 milyondan fazla kod satırında, aynı zamanda " en karmaşık ve ücretsiz / açık kaynaklı yazılım projelerinden biridir ". Bu karmaşıklık, dağıtım düzeyinde kod değişikliğini zorlu bir görev haline getirir.

Teknik avantajlar: Clang, GCC'ye kıyasla bazı teknik avantajlara sahiptir . En dikkat çekici olanı, çok daha bilgilendirici hata mesajları ve IDE'ler, yeniden düzenleme ve kaynak kod analizi araçları için açıkça tasarlanmış bir API'dir . Clang web sitesi çok daha verimli derleme ve bellek kullanımı gösteren grafikler sunsa da , gerçek dünya sonuçları oldukça değişkendir ve geniş bir şekilde GCC performansıyla uyumludur. Genel olarak, Clang tarafından üretilen ikili dosyalar eşdeğer GCC ikili değerlerinden daha yavaş çalışır :

LLVM kullanımı bina kodunda GCC'den daha hızlı olmasına rağmen, çoğu durumda GCC 4.5 inşa edilmiş ikilileri testlerin geri kalanında LLVM-GCC veya Clang'dan daha iyi performans gösterdi. arkasında. Bazı testlerde, Clang tarafından üretilen ikili dosyaların performansı çok kötüydü.

Sonuç: Derleme verimliliğinin, FreeBSD gibi büyük bir projeyi, özellikle ikili performansın eksik olduğu durumlarda, tamamen yeni bir derleyici araç zincirine geçirme riskini almak için önemli bir motivasyon olması muhtemel değildir. Bununla birlikte, durum gerçekten uygulanabilir değildi. 1) eski bir GCC’yi yürütmek, 2) Modern bir GCC’ye geçmek ve projenin hedefleriyle uyumlu bir lisans kullanmak zorunda kalmak veya 3) istikrarlı bir BSD lisanslı derleyiciye geçmek için bir seçim yapılması durumunda, Muhtemelen kaçınılmazdı. Bunun yalnızca temel sistem için geçerli olduğunu ve dağıtımdan destek aldığını unutmayın; hiçbir şey bir kullanıcının FreeBSD kutusuna kendi başına modern bir GCC kurmasını ve kullanmasını engelleyemez.


4
Aldığın kriter Clang'ın eski bir versiyonundan. Son sürümlerin kıyaslamaları, son sürümlerin daha yakın olduğu görülüyor. Basit programlar için yaptığım araştırmaya göre Clang 3.0, GCC 4.6'dan yüzde iki daha hızlı, ancak GCC dişli versiyonda% 20 daha hızlı. phoronix.com/scan.php?page=news_item&px=MTA5Nzc daha yeni bir Phoronix kıyaslamasıdır.
Sean

6
"GCC tam standartlara uygun değil": verilen bir standarda uyumu sağlamak için derleyici anahtarları kullanmak mümkün değil mi?
Giorgio,

4
Her şeyden önce Phoronix testlerinde çok fazla okuma yapmaz, daha doğrusu onları okumaz. İkincisi, açıkça bir standart belirtmediğiniz sürece GCC'nin standartlara tam olarak uymadığı doğrudur, eğer GNU uzantılarını da etkin hale getirmezseniz, bunun nedeni Clang'ı kullanmak için garip bir neden gibi görünebilir. onlar da en yaygın kullanılan GNU uzantılarını uyguluyorlar çünkü Clang'ın GCC yerine bir damla olarak kullanılabiliyorlar.
kyrias

1
@Giorgio: Hayır. Örnek için gcc.gnu.org/c99status.html adresini ziyaret edin - bu sadece C99 (ki şu anda 14 yaşında). Ayrıca gcc.gnu.org/onlinedocs/libstdc++/manual/status.html - clang her ikisi için de daha iyi bir desteğe sahip (bence dolu - ve değilse, kesinlikle en azından daha iyi).
Tim,

4
@Demizey Phoronix'i savunmuyorum, ancak bir şeyi reddedecekseniz en azından geçerli bir sebep belirtmelisiniz.
Mario

38

Dikkate alınmaya değer bir şey, FreeBSD'nin şu anda ire_and_curses yanıtında belirtildiği gibi GCC 4.2.1 kullanıyor olması, bu nedenle performans karşılaştırmalarının 4.5 ya da 4.6 olması değil, proje ile gerçekten ilgili olmamasıdır. Bu nedenle sormanız gereken sorular:

  1. Projenin kullandığı eski GCC'ye karşı yeni Clang'ın performans kazancı nedir?

  2. Aynı ikili dosyalar GCC 4.2.1’de yeni Clang’la karşılaştırıldığında nasıl derlendi?

GCC’nin GPL v3’e taşınması nedeniyle, FreeBSD, 2007’de geri bırakılan ve şu anda önemli ölçüde eski olan GCC 4.2.1 (GPL v2) kullanarak kalmaya zorlandı.

Clang, mevcut GCC'nin gerisinde kalıyorsa, ancak projede uygulanan GCC'den hafif ışıklı bir yıl sonra, evrimleşme kararları iyi garantili ve gerçekten ilham alıyor.


19

GCC GPLv3 olmasına rağmen, GCC tarafından üretilen ikili dosyalar hiçbir zaman lisans sınırlaması getirmedi. Açıkçası, istediğiniz lisansın altına düşen yazılımı oluşturmak için GCC'yi kullanabilirsiniz. GCC ile birlikte gelen ve ikili dosyaya dahil olan C kütüphanesi bile lisanssızdır. http://www.gnu.org/licenses/gcc-exception-faq.html

GNU GPLv3'ün 2. Bölümü:

Tüm Hedef Kodun Uygun Derleme İşlemleri tarafından üretilmesi şartıyla, GPLv3'ün koşullarını ihlal etse bile, Çalışma Zamanı Kitaplığını Bağımsız Modüllerle birleştirerek oluşturulan Hedef Kod çalışmalarını yayma izniniz vardır. Ardından , Bağımsız Modüllerin lisansına uygun olarak, seçtiğiniz şartlar altında böyle bir kombinasyonu iletebilirsiniz .

“Uygun”, derlemenin hem GCC hem de GPL uyumlu olmayan yazılımı içermemesi anlamına gelir. Bu bir kısıtlama değil: BSD lisanslı yazılım, GNU GCC'yi içeren derleme işleminde kullanılabilir.

Gördüğünüz gibi yukarıda belirtilenlerin aksine, FreeBSD içinde GCC kullanmayla uyumsuzluk olmadığı için GCC'den uzaklaşmak için GERÇEK lisansı ile ilgili bir sebep yoktur.

Bu değişimin arkasındaki asıl sebep politik ve fırsatçı:

  • BSD, GNU Kamu lisansı ile felsefi olarak rekabet eden kendi lisansına sahiptir (yukarıda * ire_and_curses *),
  • CLANG, teknik olarak GPL lisanslı GCC'ye eşdeğer görünen FreeBSD sponsoru tarafından başlatılan GPL olmayan yeni bir derleyicidir (yukarıda * ire_and_curses * tarafından açıklandığı gibi).

Bu gerçekler FreeBSD'nin GCC'den uzaklaşması ve ondan kurtulması için bir fırsat yaratır: serbest veya BSD lisanslı bir yazılım oluşturmak için hala GCC'yi kullanabildiklerinden, aslında yasal olarak mecbur değillerdir, ancak "tüm BSD lisanslı yazılım" felsefesi.


5
Üzgünüm, bunu oy kullandım. Ne yazık ki BSD'ler ve yazılım düşüklüğü ile ilgili bilginiz düşük. Sadece kayıt için BSD'lerin doksanlı yılların başlarında geleneksel Taşınabilir Derleyici'den (PCC) GCC'ye geçmelerine neden olan siyasi değil karardı. Clang Apple projesidir! PCC'ye geri dönmeye çalışan OpenBSD'de yaşamak için günlük bazda GCC'yi kullanan biri olarak, tüm hesaplarda yanılıyorsunuz.
Predrag Punosevac

5
Ortaya çıkan ikili dosyalar ile ilgili değildir, bu, gcc'nin FreeBSD'nin bir parçası olduğu gerçeğidir - bu nedenle lisans kısıtlamaları önemlidir.
sstn

3
Projenin dininde "GPLv3 Yok" yazıyorsa, teknik yönler kayboluyor - örneğin bir Microsoft derleyici kullandıklarını hayal edin.
Thorbjørn Ravn Andersen 11:13

3
Doğru olduğunu gösteren tek cevap bu license of compiler != license of end product. Derleyicinin lisansı ile ilgili şikayetler, kullanıcı lisansı anlamadığı sürece muhtemelen ilgili olamaz.
Brandin

6
Üretilen ikili dosyaların GPLv3'e girip girmediği değil, derleyicinin kendisinde yapılan değişikliklerin GPLv3 uyumluluğu gerektirip gerektirmediği ile ilgili değildir. Donanım satıcıları genellikle stok derleyicisini donanımlarıyla daha iyi çalışacak veya donanımdan özel şekillerde yararlanacak şekilde değiştirir. Özel değişikliklerin GPLv3 veya risk yasal işlemlerine uyması riskini ortadan kaldırmak, bu tür organizasyonlar için çok önemlidir. Burada gerçekten önemli olan derleyicinin lisansı.
David Harks

7

Uzman değilim, ama benim anlayışım Clang / LLVM, GCC'den daha az kaynak kullanıyor ve daha hızlı.

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

Çok fazla şey inşa etmeniz gereken bir ortam kullanıyorsanız, bu performans enerji maliyetlerinde ve zamanında gerçek tasarruflara dönüşebilir. Eğer gerçekse.


Minör .. ve daha fazla tekrarlayan derleme sürelerini azaltmak için araçlar var - ccache.samba.org paralel olarak gelişen derleme için bariz olanaklarını Aldırma, bağlantı süreleri büyük projelerde çözülmesi daha güç olma eğilimindedir (distcc bakınız)
Rob11311

Evet, çok iyi, ancak sonuçta ortaya çıkan ikili kod daha yavaş; p
rustyx

1
@rustyx, gcc 4.2 ile karşılaştırıldığında değil!
Miles Rout
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.