2008-08-28 15 views
7

मैं पाइथन में एक जीपीएल-लाइसेंसीकृत एप्लिकेशन विकसित कर रहा हूं और यह जानने की जरूरत है कि जीपीएल मेरे कार्यक्रम को मालिकाना प्लग-इन का उपयोग करने की अनुमति देता है या नहीं।जीपीएल कार्यक्रमों के लिए मालिकाना प्लग-इन: व्याख्या की गई भाषाओं के बारे में क्या?

एक कार्यक्रम GPL के अंतर्गत जारी प्लग इन, एक प्लग-इन के लाइसेंस के लिए आवश्यकताएँ हैं क्या उपयोग करता है: इस मुद्दे पर what the FSF has to say है?

यह इस बात पर निर्भर करता है कि प्रोग्राम अपने प्लग-इन को कैसे आमंत्रित करता है। यदि प्रोग्राम प्लग-इन का आह्वान करने के लिए कांटा और निष्पादन का उपयोग करता है, तो प्लग-इन अलग-अलग प्रोग्राम होते हैं, इसलिए मुख्य कार्यक्रम के लिए लाइसेंस उनके लिए कोई आवश्यकता नहीं करता है।

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

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

कांटा/कार्यकारी और गतिशील जोड़ने के बीच भेद, कृत्रिम की तरह होने के अलावा, अधिक व्याख्या की भाषा में नहीं ले जाया करता है?

(संपादित करें: मैं समझता हूं कि कांटा/निष्पादन और गतिशील लिंकिंग के बीच भेद क्यों है, लेकिन ऐसा लगता है कि जीपीएल का पालन करना चाहता था लेकिन "भावना" के खिलाफ जाना - मैं नहीं कर सकता - बस इसका उपयोग कर सकता था बहुत कुछ करने के लिए कांटा/निष्पादन और इंटरप्रोसेस संचार)।

सबसे अच्छा समाधान मालिकाना प्लगइन के उपयोग की स्पष्ट अनुमति देने के लिए मेरे लाइसेंस में अपवाद जोड़ना होगा, लेकिन मैं ऐसा करने में असमर्थ हूं क्योंकि मैं Qt/PyQt का उपयोग कर रहा हूं जो जीपीएल है।

+4

मैं इस प्रश्न को ऑफ-विषय के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह लाइसेंसिंग और कानूनी मुद्दों के बारे में है, प्रोग्रामिंग या सॉफ्टवेयर विकास नहीं। [यहां देखें] (http://meta.stackoverflow.com/a/274964/1402846) विवरण के लिए, और [सहायता/विषय] अधिक के लिए। – Pang

उत्तर

4

वह कांटा/कार्यकारी और गतिशील जोड़ने के बीच भेद, कृत्रिम की तरह होने के अलावा,

मैं अपनी कृत्रिम बिल्कुल नहीं लगता। असल में वे केवल एकीकरण के स्तर के आधार पर विभाजन कर रहे हैं। यदि कार्यक्रम में "प्लगइन्स" हैं जो अनिवार्य रूप से आग लगते हैं और कोई एपीआई स्तर एकीकरण के साथ भूल जाते हैं, तो परिणामस्वरूप काम को व्युत्पन्न कार्य माना जाने की संभावना नहीं है। आम तौर पर एक प्लगइन जो केवल फोर्क/निष्पादित किया जाता है, इस मानदंड को फिट करेगा, हालांकि ऐसे मामले हो सकते हैं जहां यह नहीं है।यह मामला विशेष रूप से तब लागू होता है जब "प्लगइन" कोड आपके कोड के स्वतंत्र रूप से भी काम करेगा।

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

तो इसे थोड़ा और स्पष्ट करने के लिए, वही सिद्धांत आपके व्याख्या किए गए कोड पर लागू हो सकते हैं। यदि व्याख्या कोड आपके एपीआई (या इसके विपरीत) पर भारी निर्भर करता है तो इसे व्युत्पन्न कार्य माना जाएगा। यदि यह केवल एक स्क्रिप्ट है जो अत्यंत कम एकीकरण के साथ अपने आप को निष्पादित करती है, तो यह नहीं हो सकती है।

क्या इससे अधिक समझदारी होती है?

1

@Daniel

कृत्रिम प्रकार होने के अलावा कांटा/निष्पादन और गतिशील लिंकिंग के बीच भेद, व्याख्या की गई भाषाओं को नहीं लेता है: एक पाइथन/पर्ल/रूबी प्लगइन के बारे में क्या, जो आयात या निष्पादन के माध्यम से लोड हो जाता है?

मुझे यकीन नहीं है कि भेद कृत्रिम है। गतिशील लोड के बाद प्लगइन कोड जीपीएल कोड के साथ निष्पादन संदर्भ साझा करता है। एक कांटा/निष्पादन के बाद यह नहीं करता है।

किसी भी मामले में मुझे लगता है कि import आईएनजी नए कोड को उसी निष्पादन संदर्भ में जीपीएलड बिट के रूप में चलाने का कारण बनता है, और आपको इसे डायनामिक लिंक केस की तरह व्यवहार करना चाहिए। नहीं?

1

प्लगइन्स और मुख्य कार्यक्रम के बीच आप कितनी जानकारी साझा कर रहे हैं? यदि आप उन्हें निष्पादित करने और परिणामों की प्रतीक्षा करने (प्रोग्राम के बीच कोई डेटा साझा करने और प्रक्रिया में प्लगइन साझा करने) की तुलना में कुछ भी नहीं कर रहे हैं, तो आप संभवतः उनके साथ स्वामित्व वाले हो सकते हैं, अन्यथा उन्हें शायद जीपीएल ' घ।

संबंधित मुद्दे