लिनक्स डेवलपर्स एक सार्वभौमिक पैकेजिंग प्रारूप क्यों नहीं बना सकते हैं?


14

विक्रेता द्विआधारी पैकेज प्रारूप चयन मर्फी के नियम के एक रूप द्वारा निर्धारित किए गए प्रतीत होते हैं: आपके द्वारा उपयोग किए जाने वाले सभी विकृतियों में पैकेज नहीं होते हैं। (कोरलरी: कोई वितरण मौजूद नहीं है जो आपके सॉफ़्टवेयर स्टैक के वितरण निर्भरता को संतुष्ट करता है)।

क्या यह राजनीति का विषय है, या कुछ और गहरा है, कि हमने "निर्माण एक बार, कहीं भी चलें" पैकेज प्रारूप के उद्भव को नहीं देखा है?


3
आपको केवल एक सतही समझ है जो एक दूसरे से वितरण को अलग करती है। पैकेज सिस्टम को एकजुट करने का मतलब यह नहीं होगा कि पैकेज वितरण के बीच विनिमेय हैं। इस प्रकार आपका प्रश्न निरर्थक है।

3
आशा है, आप ऐसा उत्तर क्यों नहीं लिखते हैं जो वितरण के बीच के अंतर का कम सतही विवरण देता है? सवाल भोलेपन से कहा गया है, लेकिन एक गहन तकनीकी जवाब दिया जा रहा है।
जूलुगर


विंडोज डेवलपर्स या तो एक सार्वभौमिक पैकेजिंग प्रारूप क्यों नहीं बना सकते हैं? विंडोज यहां जीत नहीं है, लेकिन वे सॉफ़्टवेयर स्थापित करने की बस के रूप में कई तरीके है, और लिनक्स की तरह कोई भी भंडार या तो है ... (यह एक शब्दाडंबरपूर्ण सवाल है, btw है)
मार्क हेंडरसन

जवाबों:


24

इस पर जोएल स्पोलस्की को उद्धृत करना उचित प्रतीत होता है :

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

(महत्व दिया)

आपके पास (कम से कम) लिनक्स के लिए दो पैकेजिंग सिस्टम हैं। यह वास्तव में एक अच्छी बात है। एक एकल प्रणाली बस एक तीसरी प्रणाली बनाएगी।


पुन: जब आप तीसरा विकल्प बनाकर दो विरोधी ताकतों को एकजुट करने का प्रयास करते हैं, तो आप केवल तीन विरोधी ताकतों को समाप्त करते हैं। इसे भी देखें : xkcd.com/927
JamesBarnett

20

इसके कई कारण हैं और चीजों को परिप्रेक्ष्य में रखने के लिए थोड़ा इतिहास है।

याद रखें कि जब हम "लिनक्स" के बारे में बात करते हैं तो हम आम तौर पर कई लिनक्स वितरणों में से एक है । "लिनक्स" वास्तव में सिर्फ एक ऑपरेटिंग सिस्टम कर्नेल है।

लिनक्स का मूल लक्ष्य एक यूनिक्स-आधारित प्रणाली बनाना था जो पीसी (शुरुआत में 386) पर चलेगा। पहला कदम कर्नेल को खुद बनाना था। जबकि लिनस टॉर्वाल्ड्स कर्नेल पर काम कर रहे थे रिचर्ड स्टेलमैन जीएनयू (GNU's Not Unix) परियोजना के तहत अपने स्वयं के फ्री यूनिक्स सिस्टम पर काम कर रहे थे । एक लंबी कहानी को छोटा करने के लिए, दोनों ने कुछ हद तक रूपांतरण किया क्योंकि जीएनयू में संबंधित उपयोगिताओं (सी कंपाइलर / लाइब्रेरी / बिल्ड टूल्स, शेल, टेक्स्ट एडिटर आदि) थे, लेकिन इसे चलाने के लिए कोई कोर नहीं था, और लिनक्स के पास कोर था लेकिन कोई उपयोगिताओं के लिए नहीं जनता के लिए इसे उपयोगी बनाने के लिए इसके शीर्ष पर चलें।

इस अभिसरण को कुछ हद तक आधिकारिक तौर पर GNU / Linux के रूप में जाना जाता है। आप देखेंगे कि बहुत सारे डिस्ट्रो अभी भी खुद को जीएनयू / लिनक्स वितरण के रूप में संदर्भित करते हैं।

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

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

ऑटोपैकेज जैसी परियोजनाएं हैं , जो समस्या को हल करने का प्रयास कर रही हैं, लेकिन विभिन्न समर्थित पैकेज प्रबंधन प्रणाली के निरंतर विकास का मतलब है कि पालन करने के लिए कई चलती लक्ष्य हैं।

कुछ सॉफ़्टवेयर विक्रेता जो कर रहे हैं, वह विशिष्ट बायनेरिज़ और उन निर्भरता की प्रतियों को बंडल कर रहा है जिनकी उन्हें एक बड़े पैकेज में आवश्यकता होती है जो विशिष्ट सिस्टम पर काम करेंगे।


8
इसके अलावा भी बहुत कुछ है। भले ही पूरी दुनिया rpm पर एकीकृत हो, लेकिन आपके पास अभी भी एक बार पैकेज नहीं होगा, ओपी की परिकल्पना के अनुसार दुनिया में कहीं भी चलाएं। पैकेज उनके डिस्ट्रो के लिए सबसे अधिक भाग के लिए विशिष्ट हैं, क्योंकि वे अन्य सभी पैकेजों पर भरोसा करते हैं। "पैकेज एक बार, कहीं भी चलाएं" दुनिया का एकमात्र तरीका न केवल एक एकल पैकेजिंग सिस्टम होगा, बल्कि केवल एक ही डिस्ट्रो होगा।
Cian

9

एक ही पैकेज प्रारूप होने से वैसे भी मदद नहीं मिलेगी। आप अन्य वितरण में समान पैकेज का उपयोग नहीं कर सकते। आप अक्सर समान वितरण के भिन्न संस्करण में भी इसका उपयोग नहीं कर सकते। और यहां तक ​​कि पैकेज के निर्माण में भी समान समस्याएं हो सकती हैं।

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

यदि सभी निर्भरताएं समान होंगी, तो यह एक ही वितरण का एक अलग वितरण या अलग संस्करण नहीं होगा।


4
क्या पुस्तकालयों को संस्करणित करना और आपके द्वारा बताई गई समस्या को हल करने के लिए संस्करण निर्भरता का उपयोग करना संभव नहीं होगा?
जुगलगर

आप उल्लेख करते हैं कि आप एक संस्करण से दूसरे पर डेब का उपयोग नहीं कर सकते हैं। यह पूरी तरह सच नहीं है, उस नियम के अपवाद हैं। यदि पैकेज ज्यादातर अजगर है, या यदि सभी बिट्स जहां सांख्यिकीय रूप से संकलित किया गया है तो आप कर सकते हैं। यहां तक ​​कि एक जोड़े के विक्रेता भी हैं जो पैकेज के हिस्से के रूप में सभी निर्भरताओं को शामिल करते हैं, यह डिस्क स्थान को बर्बाद करता है, लेकिन एक क्रॉस-प्लेटफॉर्म पैकेज बनाता है।
Zoredache

यहां तक ​​कि अगर एक पैकेज आर्क है: सभी, या स्क्रिप्टिंग भाषाएं, python2.4 और python2.6 के बीच महत्वपूर्ण अंतरों को पूरा करती हैं, जो उस पैकेज का कारण बनेगी जो उस प्लेटफ़ॉर्म में काम करता है जो दूसरों के लिए बनाया गया था, और जो दूसरों पर विफल रहता है।
jldugger

हाँ, यह केवल पुस्तकालय निर्भरता के बारे में नहीं है।
iny

कुछ डेबियन अपडेट बदल गए हैं जहां फ़ाइलों को डाला जाना था, या पहले से मैन्युअल रूप से प्रबंधित की गई कॉन्फ़िगरेशन फ़ाइलों को अपडेट करने के लिए मानकीकृत सिस्टम प्रदान किया गया था .. इस तरह की चीज बहुत ही संस्करण / डिस्ट्रो विशिष्ट है।
pjc50

7

मुझे लगता है कि "इन्वेंटेड हियर सिंड्रोम" नहीं है। डेबियन की पैकेजिंग प्रणाली रेडहैट से पहले की है, और फिर भी यह कई मायनों में बेहतर है, लेकिन आप कभी भी रेडहैट को बदलते नहीं देखेंगे। इसके बजाय, आप "apt-rpm" का उपयोग करते हुए बहुत से लोग देखते हैं जो आपको rpm फ़ाइलों के साथ apt के कुछ लाभ देने का प्रयास करते हैं।


4
apt-rpm काफी समय से मृत है (1 has साल पहले अंतिम रिलीज) अब और ज्यादातर लोग यम का उपयोग करने के लिए चले गए हैं। यूम ही काफी अच्छे फीचर्स प्रदान करता है जो
एप्ट

1
मेरा मानना ​​है कि डेबियन की पैकेजिंग आज के रेडहैट से बेहतर है। यह हुआ करता था कि डेबियन के पास एक बेहतर अपडेट सिस्टम था, लेकिन यह अब तक सच नहीं लगता। यम ने बहुत अच्छी कमाई की है। स्मार्ट की तुलना में अभी भी धीमा है , लेकिन बहुत प्रबंधनीय है।
niXar

1
मुझे पता है कि पिछली बार जब मैं CentOS पर काम कर रहा था, तो हम पर निर्भरता नरक में जाने की संभावना अधिक थी, और apt-rpm पर स्विच करने से उनमें से अधिकांश समस्याएं ठीक हो गईं।
पॉल टॉम्बलिन

1
Redhat की RPM पैकेजिंग EDS (अत्यधिक निर्भरता सिंड्रोम) से ग्रस्त है। यह RPM पर टिप्पणी नहीं है, बल्कि Redhat है। यम apt-get plus apt-search की एक अच्छी कॉपी है, और RPM कमांड लाइन के आह्वान के पहले के रहस्यमय दुनिया के लिए प्रयोज्य लाता है।
21

3
वास्तव में, .deb और .rpm पैकेज प्रारूप तकनीकी रूप से भी हैं (लेकिन, IMO .deb के पास बेहतर निर्भरता से निपटने, esp। संस्करण निर्भरता, प्रदान करता है, टकराव और आभासी पैकेज हैं)। apt-get वही है जो तकनीकी स्तर पर चमकता है, लेकिन वास्तव में जो डेबियन के पैकेजों को खड़ा करता है, वह डेवलपर नीतियों का एक अच्छा परिभाषित सेट है जो उन मानकों को सेट करता है जिनका पैकेज अनुपालन करना चाहिए। ubuntu संकुल को काफी हद तक विरासत में मिला है, और ubuntu भी विरासत में मिला है जो कि इसके साथ जाने वाली डेवलपर संस्कृति को भी विरासत में मिला है।
कैस



2

मुझे लगता है कि cletus, Wayne, और iny ने इसका बहुत अच्छा जवाब दिया। मैं वास्तव में इसे जोड़ना चाहता हूं, यह बहुत बड़ी बात नहीं है। मैं एक मिश्रित वातावरण में काम करता हूँ जहाँ हमारे पास Gentoo (portage), SUSE (rpm / zypper), और OpenBSD (पैकेज और पोर्ट) हैं। उनमें से किसी एक पर पैकेज स्थापित करना मुश्किल नहीं है, और मैं वास्तव में परवाह नहीं करता कि वे किस प्रारूप का उपयोग कर रहे हैं।

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


1

खैर टार बॉल्स में हमेशा संकलित बायनेरिज़ होते हैं .... ;-)


1
AKA "स्लैकवेयर"।
पॉल टॉम्बलिन

दुर्भाग्यवश सांख्यिकीय रूप से संकलित बायनेरिज़ के साथ समस्याएं हैं जिन्हें रनटाइम (विशेषकर nsswitch) पर सिस्टम लाइब्रेरीज़ को लोड करने की आवश्यकता होती है।
pjc50

1

"लिनक्स" के लिए एक मानक बाइनरी इंटरफ़ेस की कोई परिभाषा नहीं है क्योंकि यह केवल कर्नेल है। ऑड्स में यह है कि आपके सॉफ़्टवेयर स्टैक को आपके कर्नेल से अधिक के साथ इंटरफ़ेस करने की आवश्यकता होगी, सैकड़ों असमान स्रोत पेड़ों के बीच एक मानक एबीआई बनाए रखने की एक विशेष चुनौती पेश करता है।

अच्छे पैकेजिंग टूल्स के विषय पर , मैं इसके लिए उत्कृष्ट बाइनरी पैकेजिंग प्रारूप के लिए डेबियन जीएनयू / लिनक्स पसंद करता हूं। यह मानक उपकरणों और अनुप्रयोगों के लिए मेरी जरूरतों का 90% सेवा कर चुका है। शेष 10% स्रोत से गैर-मुक्त घटकों या छोटी गाड़ी साझा पुस्तकालय निर्भरता के समावेश के कारण बनाया गया है। जब उन अनुप्रयोगों को तैनात करने की आवश्यकता होती है, तो मैं उत्पादन समूहों के लिए कस्टम बायनेरिज़ का निर्माण करता हूं।


1

बिल्ड-वन प्राप्त करने के लिए, सभी को समान वितरण का उपयोग करने के लिए मजबूर किए बिना कहीं भी पैकेज प्रारूप चलाएं, आपको कुछ महत्वपूर्ण विशेषताओं की आवश्यकता है:

  • विश्व स्तर पर अद्वितीय पैकेज का नामकरण, ताकि दो लोग / वितरण स्वतंत्र रूप से एक ही नाम के साथ अलग-अलग पैकेज न बना सकें।

  • जब पैकेज में परस्पर विरोधी आवश्यकताएं होती हैं, तो पुस्तकालयों के विभिन्न संस्करणों को समानांतर स्थापित करने की क्षमता। एक वितरण तय कर सकता है कि प्रत्येक लाइब्रेरी के किस संस्करण का उपयोग करना है, और उस संस्करण का उपयोग करने के लिए सभी पैकेजों को मजबूर करना है। वितरणों में काम करने वाली प्रणाली अधिक लचीली होनी चाहिए।

जीरो इंस्टाल ये दोनों सुविधाएँ प्रदान करता है:

  • नाम URI हैं (उदाहरण के लिए http://rox.sourceforge.net/2005/interfaces/ROX-Filer )। केवल एक डोमेन का मालिक डिफ़ॉल्ट रूप से उस नाम स्थान के भीतर पैकेज बना सकता है।

  • प्रत्येक पैकेज का प्रत्येक संस्करण अपनी स्वयं की निर्देशिका में जाता है। प्रत्येक एप्लिकेशन को केवल उन पुस्तकालयों की आवश्यकता होती है, जो संस्करणों के साथ संगत हैं।

उदाहरण के लिए, संपादित करें आवेदन इस तरह से पायथन <3 पर निर्भर करता है:

<command name="run" path="Edit/AppRun">
  <runner interface="http://repo.roscidus.com/python/python">
    <version before="3"/>
  </runner>
</command>

यह सभी देखें: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[नोट: मैं एक 0 स्थापना डेवलपर हूं]

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