फ्रीबीएसडी क्लेंग / एलएलवीएम के पक्ष में जीसीसी को अपदस्थ क्यों कर रहा है?


241

इसलिए मैं नेट पर सर्फिंग कर रहा था और इस लेख पर ठोकर खाई । यह मूल रूप से कहता है कि FreeBSD , संस्करण 10 से शुरू होकर ऊपर Clang / LLVM के पक्ष में GCC को अपदस्थ करेगा

मैंने अब तक नेट के आसपास जो देखा है, उससे क्लैंग / एलएलवीएम एक काफी महत्वाकांक्षी परियोजना है, लेकिन विश्वसनीयता के मामले में यह जीसीसी से मेल नहीं खा सकती है ।

क्या कोई तकनीकी कारण हैं कि FreeBSD LLVM को अपने संकलक बुनियादी ढांचे के रूप में चुन रहा है, या क्या पूरा मामला शाश्वत GNU / GPL बनाम BSD लाइसेंस के लिए उबालता है?

इस प्रश्न में (किसी तरह) FreeBSD में GCC के उपयोग के बारे में प्रासंगिक जानकारी है

जवाबों:


361

सारांश: जीसीसी से क्लैंग में स्विच करने का प्राथमिक कारण फ्रीबीएसडी परियोजना के लक्ष्यों के साथ जीसीसी के जीपीएल वी 3 लाइसेंस की असंगति है । कॉर्पोरेट निवेश, साथ ही उपयोगकर्ता आधार आवश्यकताओं के साथ करने के लिए राजनीतिक मुद्दे भी हैं। अंत में, मानकों के अनुपालन और डिबगिंग में आसानी के साथ तकनीकी लाभ होने की उम्मीद है। संकलन और निष्पादन में वास्तविक विश्व प्रदर्शन में सुधार कोड-विशिष्ट और बहस योग्य हैं; दोनों संकलक के लिए मामले बनाए जा सकते हैं।

FreeBSD और GPL: FreeBSD का GPL के साथ एक असहज रिश्ता है। बीएसडी-लाइसेंस अधिवक्ताओं का मानना ​​है कि वास्तव में मुफ्त सॉफ्टवेयर का कोई उपयोग प्रतिबंध नहीं है । जीपीएल के अधिवक्ताओं का मानना ​​है कि सॉफ्टवेयर स्वतंत्रता की रक्षा के लिए प्रतिबंध आवश्यक हैं , और विशेष रूप से यह कि फ्री सॉफ्टवेयर से गैर-मुक्त सॉफ्टवेयर बनाने की क्षमता स्वतंत्रता के बजाय शक्ति का एक अन्यायपूर्ण रूप है । फ्रीबीएसडी परियोजना, जहां संभव हो, जीपीएल के उपयोग से बचने की कोशिश करती है :

अतिरिक्त जटिलताओं के कारण जो जीपीएल सॉफ्टवेयर के व्यावसायिक उपयोग में विकसित हो सकते हैं, हम, हालांकि, जब भी संभव हो, ऐसे सॉफ्टवेयर को अधिक आराम से फ्रीबीएसडी लाइसेंस के तहत प्रस्तुत करने का प्रयास करते हैं।

FreeBSD और जीपीएल v3: जीपीएल v3 स्पष्ट रूप से तथाकथित मनाही Tivoisation कोड की, में उपाय बता GPL v2 जो हार्डवेयर प्रतिबंध सक्षम उपयोगकर्ता द्वारा अन्यथा कानूनी सॉफ्टवेयर संशोधनों अस्वीकृत करने के लिए। इस खामियों को बंद करना फ्रीबीएसडी समुदाय में कई के लिए अस्वीकार्य कदम था :

यदि विशेष रूप से GPLv2 के तहत लाइसेंस प्राप्त सॉफ़्टवेयर का बड़ा निकाय आज नए लाइसेंस पर स्थानांतरित हो जाता है, तो विशेष रूप से उपकरण विक्रेताओं के पास खोने के लिए सबसे अधिक है। अब उन्हें GPLv3 सॉफ़्टवेयर का उपयोग करने और अपने हार्डवेयर पर स्थापित सॉफ़्टवेयर के संशोधन को प्रतिबंधित करने की स्वतंत्रता नहीं होगी ... संक्षेप में, OpenSource उपभोक्ताओं का एक बड़ा आधार है जो अचानक GPL लाइसेंस प्राप्त सॉफ़्टवेयर के विकल्पों को समझने में बहुत रुचि रखते हैं।

जीपीएल v3 के लिए जीसीसी के कदम के कारण, FreeBSD को GCC 4.2.1 (GPL v2) का उपयोग करने के लिए मजबूर रहना पड़ा, जिसे 2007 में वापस जारी किया गया था , और अब यह काफी पुराना है। यह तथ्य कि फ्रीबीएसडी ने जीसीसी के अधिक आधुनिक संस्करणों का उपयोग करने के लिए कदम नहीं उठाया, यहां तक ​​कि एक पुराने संकलक और बैकपोर्टिंग फिक्स के अतिरिक्त रखरखाव सिरदर्द के साथ, जीपीएल v3 से बचने के लिए आवश्यकता की ताकत का कुछ विचार देता है। सी कंपाइलर फ्रीबीएसडी बेस का एक प्रमुख घटक है, और " फ्रीबीएसडी 10 के लिए (अस्थायी) लक्ष्यों में से एक जीपीएल-फ्री बेस सिस्टम है "।

कॉर्पोरेट निवेश: कई प्रमुख ओपन सोर्स प्रोजेक्ट्स की तरह, FreeBSD को निगमों से फंडिंग और विकास कार्य प्राप्त होते हैं। यद्यपि ऐप्पल द्वारा फ्रीबीएसडी को वित्त पोषित या दिया गया विकास आसानी से खोजा नहीं जा सकता है, लेकिन इसमें बहुत अधिक ओवरलैप है क्योंकि ऐप्पल का डार्विन ओएस पर्याप्त बीएसडी मूल कर्नेल कोड का उपयोग करता है । इसके अतिरिक्त, क्लैंग स्वयं मूल रूप से एक इन-हाउस ऐप्पल प्रोजेक्ट था, 2007 में खुले-खट्टे होने से पहले । चूंकि कॉर्पोरेट संसाधन FreeBSD परियोजना के एक प्रमुख प्रवर्तक हैं, इसलिए प्रायोजक की जरूरतों को पूरा करना एक महत्वपूर्ण वास्तविक दुनिया चालक है

Userbase: FreeBSD कई कंपनियों के लिए एक आकर्षक ओपन सोर्स विकल्प है, क्योंकि लाइसेंसिंग सरल, अप्रतिबंधित है और मुकदमों के लिए नेतृत्व करने की संभावना नहीं है। जीपीएल v3 और नए एंटी-टिवोइजेशन प्रावधानों के आगमन के साथ , यह सुझाव दिया गया है कि अधिक अनुज्ञेय लाइसेंसों के लिए एक त्वरित, विक्रेता-संचालित प्रवृत्ति है । चूंकि FreeBSD का वाणिज्यिक संस्थाओं को कथित लाभ अपने अनुज्ञेय लाइसेंस में निहित है, इसलिए कॉर्पोरेट उपयोगकर्ता आधार से GCC से दूर जाने के लिए दबाव बढ़ रहा है, और सामान्य रूप से GPL।

जीसीसी के साथ मुद्दे: लाइसेंस के अलावा, जीसीसी का उपयोग करने के कुछ कथित मुद्दे हैं । जीसीसी पूरी तरह से मानकों के अनुरूप नहीं है, और कई मानक आईएसओ मानक सी में नहीं मिले हैं । कोड की 3 मिलियन से अधिक लाइनों पर, यह " सबसे जटिल और मुक्त / खुला स्रोत सॉफ़्टवेयर परियोजनाओं में से एक " भी है। यह जटिलता दूर-स्तर के कोड संशोधन को एक चुनौतीपूर्ण कार्य बनाती है।

तकनीकी फायदे: जीसीसी की तुलना में क्लैंग के कुछ तकनीकी फायदे हैं । अधिकांश उल्लेखनीय अधिक सूचनात्मक त्रुटि संदेश और आईडीई, रिफैक्टिंग और स्रोत कोड विश्लेषण टूल के लिए स्पष्ट रूप से डिज़ाइन किए गए एपीआई हैं । हालांकि क्लैंग वेबसाइट बहुत अधिक कुशल संकलन और स्मृति उपयोग का संकेत देने वाले भूखंड प्रस्तुत करती है , वास्तविक दुनिया के परिणाम काफी परिवर्तनशील हैं , और मोटे तौर पर जीसीसी प्रदर्शन के अनुरूप हैं। सामान्य तौर पर, क्लैंग-निर्मित बायनेरीज़ जीसीसी बायनेरिज़ की तुलना में अधिक धीमी गति से चलते हैं:

एलएलवीएम का उपयोग करते समय जीसीसी की तुलना में कोड बनाने में तेज है ... ज्यादातर उदाहरणों में जीसीसी 4.5 निर्मित बायनेरिज़ ने एलएलवीएम-जीसीसी या क्लैंग से बेहतर प्रदर्शन किया था ... बाकी परीक्षणों में प्रदर्शन या तो जीसीसी के करीब था या अच्छी तरह से पीछे। कुछ परीक्षणों में, क्लेंग उत्पन्न बायनेरिज़ का प्रदर्शन बस भयानक था।

निष्कर्ष: यह अत्यधिक संभावना नहीं है कि संकलन दक्षता एक बड़ी प्रेरक होगी, जिसमें FreeBSD जैसी बड़ी परियोजना को पूरी तरह से नए संकलक टूलचैन में ले जाने का पर्याप्त जोखिम होगा, खासकर जब बाइनरी प्रदर्शन की कमी हो। हालाँकि, स्थिति वास्तव में दुरूह नहीं थी। 1 के बीच चुनाव को देखते हुए) एक आउट-ऑफ-डेट GCC चल रहा है, 2) एक आधुनिक GCC के लिए आगे बढ़ रहा है और एक परियोजना के लक्ष्यों के साथ असंगत लाइसेंस का उपयोग करने के लिए मजबूर किया जा रहा है या 3) एक स्थिर BSD- लाइसेंस संकलक के पास जा रहा है, निर्णय शायद अपरिहार्य था। ध्यान रखें कि यह केवल आधार प्रणाली पर लागू होता है, और वितरण से समर्थन करता है; कुछ भी उपयोगकर्ता को अपने FreeBSD बॉक्स पर एक आधुनिक GCC को स्थापित करने और उपयोग करने से रोकता है।


4
आपके द्वारा उद्धृत बेंचमार्क क्लैंग के पुराने संस्करण से है। हाल के संस्करणों के बेंचमार्क प्रतीत होते हैं कि हाल के संस्करण करीब हैं। साधारण कार्यक्रमों के लिए मेरे स्वयं के शोध ने क्लैंग 3.0 को जीसीसी 4.6 की तुलना में कुछ प्रतिशत तेजी से डाला, लेकिन थ्रेडेड संस्करण पर जीसीसी 20% तेज था। phoronix.com/scan.php?page=news_item&px=MTA5Nzc एक नया Phoronix बेंचमार्क है।
सीन

6
"जीसीसी पूरी तरह से मानकों के अनुरूप नहीं है": क्या किसी दिए गए मानक के अनुपालन को लागू करने के लिए संकलक स्विच का उपयोग करना संभव नहीं है?
जियोर्जियो

4
सबसे पहले Phoronix बेंचमार्क में बहुत ज्यादा नहीं पढ़ते हैं, या उन्हें बिल्कुल भी नहीं पढ़ते हैं। दूसरा, यह सच है कि जीसीसी डिफ़ॉल्ट रूप से पूरी तरह से मानकों का अनुपालन नहीं करता है जब तक कि आप स्पष्ट रूप से एक मानक निर्दिष्ट नहीं करते हैं, यदि आपके पास यह नहीं है कि आपके पास जीएनयू एक्सटेंशन भी सक्षम होगा, लेकिन यह एक अजीब कारण की तरह प्रतीत होगा, बजाय इसके कि क्लेंग का उपयोग करें। वे भी सबसे अधिक इस्तेमाल किए जाने वाले GNU एक्सटेंशन को लागू कर रहे हैं क्योंकि वे GCC के प्रतिस्थापन में गिरावट के रूप में क्लैंग के उपयोग के लिए प्रयास करते हैं।
क्रिया

1
@Giorgio: नहीं। उदाहरण के लिए gcc.gnu.org/c99status.html देखें - और यह सिर्फ C99 है (जो अभी 14 वर्ष का है)। इसके अलावा gcc.gnu.org/oniltocs/libstdc++/manual/status.html - clang को दोनों के लिए बेहतर समर्थन है (मुझे लगता है कि यह पूर्ण है - और यदि नहीं, तो यह निश्चित रूप से कम से कम बेहतर है)।
टिम Timस

4
@Demizey मैं Phoronix का बचाव नहीं कर रहा हूँ, लेकिन यदि आप कुछ खारिज करने जा रहे हैं, तो आपको कम से कम एक वैध कारण प्रदान करना चाहिए।
मारियो

38

विचार करने लायक एक बात यह है कि FreeBSD वर्तमान में GCC 4.2.1 का उपयोग कर रहा है जैसा कि ire_and_curses उत्तर में बताया गया है कि प्रदर्शन तुलना 4.5 की नहीं है या 4.6 भी परियोजना के लिए सही मायने में प्रासंगिक नहीं है। इसलिए, आपके द्वारा पूछे जाने वाले प्रश्न इस प्रकार हैं:

  1. नए Gang बनाम पुराने GCC के प्रदर्शन लाभ क्या हैं जो परियोजना का उपयोग करता है?

  2. जीसीसी 4.2.1 में संकलित समान बायनेरिज़ नए क्लैंग की तुलना कैसे करते हैं?

जीपीएल v3 के लिए जीसीसी के कदम के कारण, FreeBSD को GCC 4.2.1 (GPL v2) का उपयोग करने के लिए मजबूर रहना पड़ा, जिसे 2007 में वापस जारी किया गया था, और अब यह काफी पुराना है।

यदि क्लैंग वर्तमान जीसीसी से पीछे है, लेकिन अभी भी परियोजना में कार्यान्वित जीसीसी से आगे प्रकाश वर्ष है, तो विकसित करने का उनका निर्णय अच्छी तरह से वारंट है और वास्तव में प्रेरित है।


19

भले ही जीसीसी जीपीएलवी 3 है, लेकिन जीसीसी द्वारा उत्पादित बायनेरिज़ के पास कभी कोई लाइसेंस बाधा नहीं थी। स्पष्ट रूप से आप उस सॉफ़्टवेयर का निर्माण करने के लिए जीसीसी का उपयोग कर सकते हैं जो आपके इच्छित लाइसेंस के अंतर्गत आता है। यहां तक ​​कि सी लाइब्रेरी जो जीसीसी के साथ आती है और जो बाइनरी में शामिल है, लाइसेंस-मुक्त है। http://www.gnu.org/licenses/gcc-exception-faq.html

GNU GPLv3 की धारा 2:

आपके पास स्वतंत्र मॉड्यूल के साथ रनटाइम लाइब्रेरी के संयोजन द्वारा गठित लक्ष्य कोड के एक कार्य को प्रचारित करने की अनुमति है, भले ही ऐसा प्रचार अन्यथा GPLv3 की शर्तों का उल्लंघन करेगा, बशर्ते कि सभी लक्ष्य कोड योग्य संकलनकर्ताओं द्वारा उत्पन्न किए गए थे। फिर आप अपनी पसंद की शर्तों के तहत इस तरह के संयोजन को स्वतंत्र मॉड्यूल के लाइसेंस के अनुरूप कर सकते हैं।

"योग्य" का अर्थ है कि संकलन में GCC और GPL- असंगत सॉफ़्टवेयर दोनों शामिल नहीं हैं। यह प्रतिबंध नहीं है: जीएनयू जीसीसी से जुड़ी निर्माण प्रक्रिया में बीएसडी-लाइसेंस प्राप्त सॉफ्टवेयर का उपयोग किया जा सकता है।

जैसा कि आप देख सकते हैं, जो ऊपर कहा गया है, उसके विपरीत, जीसीसी से दूर जाने के लिए कोई वास्तविक लाइसेंस से संबंधित कारण नहीं है क्योंकि फ्रीबीएसडी के अंदर जीसीसी का उपयोग करने में कोई असंगति नहीं है।

इस परिवर्तन के पीछे का असली कारण राजनीतिक और अवसरवादी है:

  • BSD की अपनी लाइसेंसिंग है जो दार्शनिक रूप से GNU पब्लिक लाइसेंस के साथ प्रतिस्पर्धा करती है (जैसा कि * ire_and_curses * समझाया गया है),
  • CLANG एक नया नॉन-जीपीएल कंपाइलर है जो FreeBSD के एक प्रायोजक द्वारा शुरू किया गया है जो तकनीकी रूप से GPL-लाइसेंस प्राप्त GCC (जैसा कि * ire_and_curses * द्वारा ऊपर वर्णित है) के बराबर प्रतीत होता है।

ये तथ्य फ्रीबीएसडी के लिए जीसीसी से दूर जाने और इससे छुटकारा पाने का एक अवसर पैदा करते हैं: वे वास्तव में कानूनी रूप से मजबूर नहीं हैं, क्योंकि वे अभी भी मुफ्त या बीएसडी-लाइसेंस प्राप्त सॉफ्टवेयर बनाने के लिए जीसीसी का उपयोग कर सकते हैं, लेकिन वे छड़ी करना चाहते हैं। "सभी बीएसडी लाइसेंस प्राप्त सॉफ्टवेयर" दर्शन।


5
क्षमा करें मुझे यह मतदान करना पड़ा। दुर्भाग्य से BSDs और सॉफ्टवेयर चढ़ाव के साथ आपकी अपरिचितता को दर्शाता है। सिर्फ रिकॉर्ड के लिए यह राजनीतिक नहीं तकनीकी निर्णय था जिसने बीएसडी को अपने पारंपरिक पोर्टेबल सी कम्पाइलर (पीसीसी) से नब्बे के दशक की शुरुआत में जीसीसी में बदलने का नेतृत्व किया। Clang Apple प्रोजेक्ट है! OpenBSD पर रहने के लिए दैनिक आधार पर GCC का उपयोग करने वाला कोई व्यक्ति जो PCC में वापस जाने की कोशिश कर रहा है, आप सभी खातों में गलत हैं।
प्राग्रैग पुंसोवैक

5
यह परिणामी बायनेरिज़ के बारे में नहीं है, यह इस तथ्य के बारे में है कि जीसीसी फ्रीबीएसडी का हिस्सा है - इसलिए लाइसेंस बाधाएं मायने रखती हैं।
sstn

3
यदि प्रोजेक्ट का धर्म "नो GPLv3" कहता है, तो तकनीकी पहलू दूर हो जाते हैं - बस कल्पना करें कि वे उदाहरण के लिए एक Microsoft कंपाइलर का उपयोग कर रहे थे।
थोरबजोरन रावन एंडरसन

3
यह एकमात्र उत्तर है जो सही ढंग से बताता है license of compiler != license of end product। कंपाइलर के लाइसेंस के बारे में शिकायतें संभवतः तब तक प्रासंगिक नहीं हो सकती जब तक कि उपयोगकर्ता लाइसेंस को नहीं समझता है।
ब्रैंडिन

6
यह इस बारे में नहीं है कि बायनेरिज़ GPLv3 के अंतर्गत आते हैं या नहीं, यह है कि क्या कंपाइलर में परिवर्तन से ही GPLv3 अनुपालन की आवश्यकता होती है। हार्डवेयर विक्रेता अक्सर अपने हार्डवेयर के साथ बेहतर तरीके से काम करने या मालिकाना तरीकों से हार्डवेयर का लाभ लेने के लिए स्टॉक कंपाइलर को संशोधित करते हैं। जोखिम को हटाना जो आपके कस्टम परिवर्तनों को GPLv3 का पालन करना चाहिए या ऐसे संगठनों के लिए कानूनी कार्रवाई जोखिम का एक बड़ा सौदा है। यह वास्तव में संकलक का लाइसेंस है जो यहां मायने रखता है।
डेविड हर्क

7

मैं कोई विशेषज्ञ नहीं हूं, लेकिन मेरी समझ क्लैंग / एलएलवीएम जीसीसी की तुलना में कम संसाधनों का उपयोग करती है और तेज है।

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

यदि आप एक ऐसा वातावरण चला रहे हैं, जहाँ आपको बहुत अधिक सामान बनाने की आवश्यकता होती है, तो कई बार, यह प्रदर्शन ऊर्जा लागत और समय में वास्तविक बचत में बदल सकता है। अगर यह असली है।


माइनर .. और आगे पुनरावृत्ति संकलन समय को कम करने के लिए उपकरण हैं - ccache.samba.org Parrallel संकलन के लिए स्पष्ट संभावनाओं को कभी ध्यान में न रखें (distcc देखें), बड़ी परियोजनाओं में हल करने के लिए लिंक समय कठिन होता है
Rob113x

हां, बहुत अच्छा है, लेकिन परिणामी बाइनरी कोड धीमा है; पी
रस्टीक्स

1
@rustyx की तुलना में नहीं है gcc 4.2!
माइल्स राउत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.