Mengapa FreeBSD mencela GCC untuk Clang / LLVM?

241

Jadi saya menjelajahi internet dan menemukan artikel ini . Pada dasarnya menyatakan bahwa FreeBSD , mulai dari Versi 10 dan di atas akan mencela GCC yang mendukung Dentang / LLVM .

Dari apa yang saya lihat di internet sejauh ini, Dentang / LLVM adalah proyek yang cukup ambisius, tetapi dalam hal keandalan tidak dapat menyamai GCC .

Apakah ada alasan teknis FreeBSD memilih LLVM sebagai infrastruktur penyusunnya, atau apakah seluruh masalah bermuara pada lisensi GNU / GPL vs BSD yang abadi?

Pertanyaan ini memiliki (entah bagaimana) informasi yang relevan tentang penggunaan GCC di FreeBSD

NlightNFotis
sumber

Jawaban:

361

Ringkasan: Alasan utama untuk beralih dari GCC ke Dentang adalah ketidakcocokan lisensi GPL v3 GCC dengan tujuan proyek FreeBSD . Ada juga masalah politik yang berkaitan dengan investasi perusahaan, serta persyaratan basis pengguna. Akhirnya, ada keuntungan teknis yang diharapkan berkaitan dengan kepatuhan standar dan kemudahan debugging. Peningkatan kinerja dunia nyata dalam kompilasi dan eksekusi bersifat spesifik kode dan dapat diperdebatkan; case dapat dibuat untuk kedua kompiler.

FreeBSD dan GPL: FreeBSD memiliki hubungan yang tidak mudah dengan GPL. Pendukung lisensi BSD percaya bahwa perangkat lunak yang benar-benar gratis tidak memiliki batasan penggunaan . Pendukung GPL percaya bahwa pembatasan diperlukan untuk melindungi kebebasan perangkat lunak, dan khususnya bahwa kemampuan untuk membuat perangkat lunak tidak bebas dari perangkat lunak bebas adalah bentuk kekuatan yang tidak adil daripada kebebasan. Proyek FreeBSD, jika memungkinkan, mencoba menghindari penggunaan GPL :

Karena kompleksitas tambahan yang dapat berkembang dalam penggunaan komersial perangkat lunak GPL, kami berupaya untuk mengganti perangkat lunak tersebut dengan pengiriman di bawah lisensi FreeBSD yang lebih santai bila memungkinkan.

FreeBSD dan GPL v3: The GPL v3 secara eksplisit melarang apa yang disebut Tivoisation kode, celah di v2 GPL yang memungkinkan pembatasan hardware untuk melarang modifikasi software dinyatakan legal oleh pengguna. Menutup celah ini adalah langkah yang tidak dapat diterima bagi banyak orang di komunitas FreeBSD:

Vendor peralatan khususnya memiliki kerugian terbesar jika sejumlah besar perangkat lunak yang saat ini dilisensikan di bawah GPLv2 hari ini bermigrasi ke lisensi baru. Mereka tidak lagi memiliki kebebasan untuk menggunakan perangkat lunak GPLv3 dan membatasi modifikasi perangkat lunak yang diinstal pada perangkat keras mereka ... Singkatnya, ada basis besar konsumen OpenSource yang tiba-tiba sangat tertarik untuk memahami alternatif untuk perangkat lunak berlisensi GPL.

Karena kepindahan GCC ke GPL v3, FreeBSD terpaksa tetap menggunakan GCC 4.2.1 (GPL v2), yang dirilis pada 2007 , dan sekarang sudah ketinggalan zaman. Fakta bahwa FreeBSD tidak bergerak untuk menggunakan versi GCC yang lebih modern, bahkan dengan sakit kepala pemeliharaan tambahan untuk menjalankan kompiler lama dan perbaikan backporting, memberikan beberapa gagasan tentang kekuatan persyaratan untuk menghindari GPL v3. Kompiler C adalah komponen utama basis FreeBSD, dan " salah satu tujuan (sementara) untuk FreeBSD 10 adalah sistem basis bebas GPL ".

Investasi perusahaan: Seperti banyak proyek open source besar lainnya, FreeBSD menerima pendanaan dan pekerjaan pengembangan dari perusahaan. Meskipun sejauh mana FreeBSD didanai atau diberikan pengembangan oleh Apple tidak mudah ditemukan, ada banyak tumpang tindih karena OS Darwin dari Apple menggunakan kode kernel yang berasal dari BSD . Selain itu, Clang sendiri awalnya merupakan proyek Apple in-house, sebelum menjadi open-source pada tahun 2007 . Karena sumber daya perusahaan adalah pendukung utama proyek FreeBSD, memenuhi kebutuhan sponsor mungkin merupakan pendorong dunia nyata yang signifikan .

Userbase: FreeBSD adalah pilihan open source yang menarik bagi banyak perusahaan, karena perizinannya sederhana, tidak membatasi dan tidak mungkin mengarah pada tuntutan hukum. Dengan kedatangan GPL v3 dan ketentuan anti-Tivoisation baru , telah disarankan bahwa ada tren percepatan, didorong oleh vendor menuju lisensi yang lebih permisif . Karena keuntungan yang dirasakan FreeBSD untuk entitas komersial terletak pada lisensi permisifnya, ada tekanan yang meningkat dari basis pengguna korporat untuk menjauh dari GCC, dan GPL pada umumnya.

Masalah dengan GCC: Selain dari lisensi, menggunakan GCC memiliki beberapa masalah yang dirasakan . GCC tidak sesuai sepenuhnya-standar, dan memiliki banyak ekstensi tidak ditemukan dalam ISO standar C . Dengan lebih dari 3 juta baris kode, ini juga merupakan " salah satu proyek perangkat lunak sumber paling bebas dan terbuka ". Kompleksitas ini membuat modifikasi kode tingkat distro menjadi tugas yang menantang.

Keunggulan teknis: Dentang memang memiliki beberapa keunggulan teknis dibandingkan dengan GCC . Yang paling menonjol adalah pesan kesalahan yang jauh lebih informatif dan API yang dirancang secara eksplisit untuk IDE, refactoring, dan alat analisis kode sumber. Meskipun situs web Clang menyajikan plot yang menunjukkan kompilasi dan penggunaan memori yang jauh lebih efisien, hasil dunia nyata sangat bervariasi , dan secara luas sejalan dengan kinerja GCC. Secara umum, binari Clang yang diproduksi berjalan lebih lambat dari binari GCC yang setara:

Saat menggunakan LLVM lebih cepat dalam membangun kode daripada GCC ... dalam banyak kasus, biner yang dibangun GCC 4,5 memiliki kinerja yang lebih baik daripada LLVM-GCC atau Dentang ... dalam tes lainnya kinerjanya dekat dengan GCC atau dengan baik dibelakang. Dalam beberapa tes, kinerja biner Dentang dihasilkan sangat mengerikan.

Kesimpulan: Sangat tidak mungkin bahwa efisiensi kompilasi akan menjadi motivator yang signifikan untuk mengambil risiko besar memindahkan proyek besar seperti FreeBSD ke toolchain kompilator yang sama sekali baru, terutama ketika kinerja biner kurang. Namun, situasinya tidak dapat dipertahankan. Diberikan pilihan antara 1) menjalankan GCC yang kedaluwarsa, 2) Pindah ke GCC modern dan dipaksa untuk menggunakan lisensi yang tidak sesuai dengan tujuan proyek atau 3) pindah ke kompiler BSD yang stabil, keputusan mungkin tak terhindarkan. Ingatlah bahwa ini hanya berlaku untuk sistem basis, dan dukungan dari distribusi; tidak ada yang mencegah pengguna menginstal dan menggunakan GCC modern pada kotak FreeBSD mereka sendiri.

ire_and_curses
sumber
4
Patokan yang Anda kutip adalah dari versi lama Dentang. Benchmark untuk versi terbaru tampaknya versi terbaru lebih dekat. Penelitian saya sendiri untuk program-program sederhana menempatkan Clang 3.0 beberapa persen lebih cepat daripada GCC 4.6, tetapi GCC 20% lebih cepat pada versi berulir. phoronix.com/scan.php?page=news_item&px=MTA5Nzc adalah tolok ukur Phoronix yang lebih baru.
Sean
6
"GCC tidak sepenuhnya memenuhi standar": Apakah tidak mungkin menggunakan sakelar kompiler untuk menegakkan kepatuhan pada standar yang diberikan?
Giorgio
4
Pertama-tama jangan terlalu banyak membaca benchmark Phoronix, atau lebih tepatnya tidak membacanya sama sekali. Kedua, memang benar bahwa GCC tidak sepenuhnya sesuai standar secara default kecuali jika Anda secara eksplisit menentukan standar, jika Anda tidak akan mengaktifkan ekstensi GNU juga, tetapi ini akan menjadi alasan aneh untuk menggunakan Dentang sebagai gantinya, meskipun, karena mereka juga menerapkan ekstensi GNU yang paling umum digunakan karena mereka berusaha agar Dentang dapat digunakan sebagai pengganti GCC.
Kyrias
1
@Giorgio: Tidak. Lihat contoh gcc.gnu.org/c99status.html - dan itu baru C99 (yang umurnya 14 tahun sekarang). Juga gcc.gnu.org/onlinedocs/libstdc++/manual/status.html - dentang memiliki dukungan yang lebih baik untuk keduanya (saya pikir itu penuh - dan jika tidak, itu pasti setidaknya lebih baik).
Tim Čas
4
@ Demi Saya tidak membela Phoronix, tetapi jika Anda akan mengabaikan sesuatu, Anda setidaknya harus memberikan alasan yang sah.
Mario
38

Satu hal yang patut dipertimbangkan adalah bahwa FreeBSD saat ini menggunakan GCC 4.2.1 sebagaimana tercantum dalam jawaban ire_and_curses sehingga perbandingan kinerja bukan 4,5 atau bahkan 4,6 tidak benar-benar relevan dengan proyek. Karena itu, pertanyaan yang harus Anda tanyakan adalah:

  1. Apa keuntungan kinerja Dentang baru vs GCC lama yang digunakan proyek?

  2. Bagaimana binari yang sama dikompilasi dalam GCC 4.2.1 dibandingkan dengan Dentang baru?

Karena kepindahan GCC ke GPL v3, FreeBSD terpaksa tetap menggunakan GCC 4.2.1 (GPL v2), yang dirilis pada 2007, dan sekarang sudah ketinggalan zaman.

Jika Dentang tertinggal di belakang GCC saat ini tetapi masih beberapa tahun ke depan dari GCC yang diterapkan dalam proyek maka keputusan mereka untuk berkembang dijamin dan benar-benar terinspirasi.

Mikel King
sumber
19

Meskipun GCC adalah GPLv3, binari yang dihasilkan oleh GCC tidak pernah memiliki batasan lisensi. Secara jelas Anda dapat menggunakan GCC untuk membangun perangkat lunak yang berada di bawah lisensi yang Anda inginkan. Bahkan pustaka C yang disertai dengan GCC dan yang termasuk dalam biner adalah bebas lisensi. http://www.gnu.org/licenses/gcc-exception-faq.html

Bagian 2 dari GNU GPLv3:

Anda memiliki izin untuk menyebarkan karya Kode Target yang dibentuk dengan menggabungkan Perpustakaan Runtime dengan Modul Independen, bahkan jika propagasi tersebut akan melanggar ketentuan GPLv3, dengan ketentuan bahwa semua Kode Target dihasilkan oleh Proses Kompilasi yang Layak. Anda kemudian dapat menyampaikan kombinasi tersebut berdasarkan ketentuan pilihan Anda , konsisten dengan lisensi Modul Independen.

"Layak" berarti bahwa kompilasi tidak melibatkan perangkat lunak yang tidak kompatibel dengan GCC dan GPL. Itu bukan batasan: perangkat lunak berlisensi BSD dapat digunakan dalam proses pembuatan yang melibatkan GNU GCC.

Seperti yang Anda lihat, bertentangan dengan apa yang telah dikatakan di atas, tidak ada alasan terkait lisensi NYATA untuk menjauh dari GCC karena tidak ada ketidakcocokan dengan menggunakan GCC di dalam FreeBSD.

Alasan sebenarnya di balik perubahan ini adalah politis dan oportunistik:

  • BSD memiliki lisensi sendiri yang secara filosofis bersaing dengan lisensi Publik GNU (seperti * ire_and_curses * dijelaskan di atas),
  • CLANG adalah kompiler non-GPL baru yang diprakarsai oleh sponsor FreeBSD yang tampaknya secara teknis setara dengan GCC berlisensi GPL (seperti dijelaskan di atas oleh * ire_and_curses *).

Fakta-fakta ini menciptakan peluang bagi FreeBSD untuk menjauh dari GCC dan menyingkirkannya: mereka sebenarnya tidak dipaksa secara hukum, karena mereka masih bisa menggunakan GCC untuk membangun perangkat lunak bebas atau berlisensi BSD, tetapi mereka ingin tetap berpegang pada filosofi "semua perangkat lunak berlisensi BSD".

Eric
sumber
5
Maaf saya harus memilih ini. Sayangnya ketidaktahuan Anda dengan BSD dan perangkat lunak menunjukkan rendah. Sebagai catatan, itu bukanlah keputusan politis dan teknis yang membuat BSD beralih dari Portable C Compiler (PCC) tradisional ke GCC pada awal tahun sembilan puluhan. Dentang adalah proyek Apple! Sebagai seseorang yang menggunakan GCC setiap hari untuk hidup di OpenBSD yang mencoba untuk kembali ke PCC Anda salah dalam semua akun.
Predrag Punosevac
5
Ini bukan tentang binari yang dihasilkan, ini tentang fakta bahwa gcc adalah bagian dari FreeBSD - oleh karena itu batasan lisensi memang penting.
sstn
3
Jika agama proyek mengatakan "No GPLv3" maka aspek teknis memudar - bayangkan saja mereka menggunakan misalnya kompiler Microsoft.
Thorbjørn Ravn Andersen
3
Ini adalah satu-satunya jawaban yang menunjukkan hal itu dengan benar license of compiler != license of end product. Keluhan tentang lisensi kompiler tidak mungkin relevan kecuali pengguna tidak memahami lisensi.
Brandin
6
Ini bukan tentang apakah binari yang dihasilkan berada di bawah GPLv3, melainkan apakah perubahan pada kompiler itu sendiri membutuhkan kepatuhan GPLv3. Vendor perangkat keras sering memodifikasi kompiler stok agar bekerja dengan perangkat keras mereka dengan lebih baik atau memanfaatkan perangkat keras dengan cara yang dipatenkan. Menghapus risiko yang harus diubah oleh perubahan kebiasaan Anda dengan GPLv3 atau tindakan hukum risiko adalah masalah besar bagi organisasi tersebut. Benar-benar lisensi dari kompiler yang penting di sini.
David Harks
7

Saya bukan ahli, tetapi pemahaman saya adalah Dentang / LLVM menggunakan sumber daya lebih sedikit daripada GCC dan lebih cepat.

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

Jika Anda menjalankan lingkungan di mana Anda perlu membangun banyak hal, sering kali, kinerja itu dapat berubah menjadi penghematan nyata dalam biaya dan waktu energi. Jika itu nyata.

EightBitTony
sumber
Kecil .. dan ada alat untuk mengurangi kompilasi berulang kali lebih jauh - ccache.samba.org Jangan pedulikan kemungkinan yang jelas untuk kompilasi paralel (lihat distcc), waktu tautan cenderung lebih sulit untuk dipecahkan dalam proyek besar
Rob11311
Ya, sangat bagus, tetapi kode biner yang dihasilkan lebih lambat; p
rustyx
1
@rustyx tidak dibandingkan dengan gcc 4.2!
Miles Rout