क्या मेरा लिनक्स बाइनरी सभी डिस्ट्रोस पर काम करेगा?


24

मुझे डेल्फी के लिए एक अच्छा प्रतिस्थापन आईडीई मिला जिसे लाजर कहा जाता है। लेकिन मेरे पास प्रोग्रामर के लिए कोई सवाल नहीं है।

क्या सभी लिनक्स वितरण पर सांख्यिकीय रूप से जुड़ा हुआ लिनक्स बाइनरी काम करेगा? यानी यह मायने नहीं रखता है कि लिनक्स डिस्ट्रो मैंने इसे बनाया था और यह डेबियन / आर्कलिनक्स / उबंटू / ओपनसुइट / ... पर काम करेगा?

मेरे निष्कर्षों के परिणामस्वरूप, वास्तव में केवल 32 बिट बनाम 64 बिट का मामला है? मैं प्रकाशित होने से पहले सुनिश्चित होना चाहता हूं।



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

जवाबों:


29

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


ऐसी किसी भी चीज़ के लिए जो एक सांख्यिकीय रूप से जुड़ी हैलो दुनिया से अधिक जटिल है, इसका उत्तर शायद नहीं है
वितरण एक्स पर परीक्षण के बिना, मान जवाब है एक्स के लिए कोई

यदि आप अपने सॉफ़्टवेयर को बाइनरी रूप में शिप करना चाहते हैं, तो अपने आप को प्रतिबंधित करें

  • आपके सॉफ़्टवेयर के उपयोग के क्षेत्र के लिए कुछ लोकप्रिय वितरण (डेस्कटॉप, सर्वर, एम्बेडेड, ...)

  • प्रत्येक का नवीनतम एक या दो संस्करण

अन्यथा आप सभी आकारों, संस्करणों और उम्र के वितरण के हाउंड्रेड्स के साथ समाप्त होते हैं (दस साल पुराना वितरण अभी भी उपयोग और समर्थित है)।

उन के लिए परीक्षण करें। अन्यथा क्या हो सकता है (और होगा) पर केवल कुछ सूचक

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

  • आपको जिन पुस्तकालयों की आवश्यकता है वे बहुत नए या बहुत पुराने (गलत संस्करण) हैं। सिर्फ इसलिए न मानें क्योंकि आपका प्रोग्राम लिंक कर सकता है, यह सही लाइब्रेरी के साथ लिंक करता है।

  • एक ही पुस्तकालय (डिस्क पर फ़ाइल) को अलग-अलग वितरणों पर अलग-अलग नाम दिया गया है, जिससे लिंकिंग असंभव है

  • 64 बिट पर 32 बिट: 32 बिट वातावरण स्थापित नहीं किया जा सकता है या कुछ गैर-आवश्यक 32 बिट लाइब्रेरी को 32on64 पर्यावरण के अलावा एक अतिरिक्त पैकेज में स्थानांतरित किया जाता है, इसलिए आपके पास इस मामले के लिए अतिरिक्त निर्भरता है।

  • शैल: बैश के अपने संस्करण को न मानें। बैश भी मत मानो।

  • उपकरण: कुछ गैर POSIX कमांड लाइन उपकरण कहीं भी मौजूद नहीं है।

  • उपकरण: यह मत समझो कि उपकरण केवल एक विकल्प को पहचानता है क्योंकि आपके डिस्ट्रो का GNU संस्करण करता है।

  • कर्नेल इंटरफेस: फ़ाइलों के अस्तित्व या संरचना को /procकेवल इसलिए नहीं मानें क्योंकि वे आपके मशीन पर मौजूद हैं / संरचना हैं

  • जावा: क्या आप वास्तव में यह सुनिश्चित करते हैं कि आपका कार्यक्रम आईबीएम के जेआरई पर चलता है क्योंकि इसे परीक्षण किए बिना SLES के साथ भेज दिया गया है?

बोनस:

  • निर्देश सेट: आपकी मशीन पर संकलित बाइनरी पुराने हार्डवेयर पर नहीं चलती है।

क्या सांख्यिकीय रूप से लिंक करना (या: आपके सॉफ़्टवेयर के लिए आवश्यक सभी लाइब्रेरीज़ को बंडल करना) एक समाधान है? यहां तक ​​कि अगर यह तकनीकी रूप से काम करता है, तो भी संबंधित लागत अधिक हो सकती है। इसलिए दुर्भाग्य से, इसका जवाब शायद नहीं है।

  • सुरक्षा: आप अपने सॉफ़्टवेयर के उपयोगकर्ता से पुस्तकालयों को अपडेट करने की ज़िम्मेदारी अपने आप में बदल लेते हैं।

  • आकार और जटिलता: केवल मज़े के लिए एक सांख्यिकीय रूप से लिंक किए गए GUI प्रोग्राम बनाने का प्रयास करें।

  • इंटरऑपरेबिलिटी: यदि आपका सॉफ़्टवेयर किसी भी प्रकार का "प्लगइन" है, तो आप उस सॉफ़्टवेयर पर निर्भर करते हैं जो आपको कॉल करता है।

  • लाइब्रेरी डिज़ाइन: यदि आप अपने प्रोग्राम को सांख्यिकीय रूप से GNU libc से लिंक करते हैं और नाम सेवाओं ( getpwnam()आदि) का उपयोग करते हैं , तो आप libc के NSS (नाम सेवा स्विच) के विरुद्ध गतिशील रूप से जुड़े हुए हैं।

  • लाइब्रेरी डिज़ाइन: लाइब्रेरी जिसे आप अपने प्रोग्राम को डेटा फ़ाइलों या अन्य संसाधनों (जैसे टाइमज़ोन या स्थान) का उपयोग करके सांख्यिकीय रूप से लिंक करते हैं।


उपरोक्त सभी कारणों के लिए, परीक्षण आवश्यक है।

  • KVM या अन्य वर्चुअलाइजेशन तकनीकों से परिचित हों और आपके द्वारा समर्थित हर वितरण का एक VM है। प्रत्येक वीएम पर अपने सॉफ़्टवेयर का परीक्षण करें।

  • उन वितरणों की न्यूनतम स्थापना का उपयोग करें।

  • एक प्रतिबंधित निर्देश सेट (जैसे कोई एसएसई 4) के साथ एक वीएम बनाएं।

  • केवल lddसांख्यिकीय रूप से जुड़े या बंडल किए गए: अपने बायनेरिज़ को यह देखने के लिए जांचें कि क्या वे वास्तव में सांख्यिकीय रूप से जुड़े हुए हैं या केवल आपके बंडल किए गए पुस्तकालयों का उपयोग करते हैं।

  • केवल स्टैटिकली लिंक या बंडल किया गया: एक खाली निर्देशिका बनाएं और उसमें अपने सॉफ़्टवेयर की प्रतिलिपि बनाएँ। chrootउस निर्देशिका में और अपना सॉफ़्टवेयर चलाएं।


यह बहुत व्यापक उत्तर है +1
sirlark

2
शेल: विशेष रूप से, डेबियन बैश का उपयोग नहीं करता है , और चूंकि डेबियन सिस्टम पर शेलशॉक भेद्यता को बहुत कम करता है, मैं तत्काल भविष्य में इसे बदलने की कल्पना नहीं कर सकता।
केविन

1
इसके अलावा, यदि आप बायनेरिज़ शिप करना चाहते हैं, तो उन्हें स्टेटिक रूप से लिंक करें
user253751

"निर्देश सेट" को "बोनस" क्यों कहा जाता है? यदि आप द्विआधारी रूप में वितरित करते हैं, तो आपको वास्तव में यह विचार करने की आवश्यकता है कि आप किस आईएसए के लिए संकलन कर रहे हैं। आप m68k उपयोगकर्ताओं की परवाह नहीं कर सकते हैं, लेकिन कम से कम एआरएम, आईए 32 और एक्स 86_64 को अनदेखा करना मुश्किल है।
टोबी स्पाइट

@ SSB4 और इस तरह के। यदि आप असेंबलर का उपयोग करते हैं तो केवल आपको काट सकते हैं।
थॉमस एर्कर

9

जवाब है यह निर्भर करता है। , लेकिन ज्यादातर मामलों में, हां, जब तक आवश्यक लाइब्रेरी ओएस पर स्थापित नहीं हो जाती।

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


2

पहले गंदे जवाब: यह निर्भर करता है

यदि आप बायनेरिज़ जारी कर रहे हैं, तो "न" होने के उत्तर को मान लें जब तक कि आप उन सभी परिवादों को वितरित नहीं कर रहे हैं जो कभी भी इसके साथ शामिल होते हैं (जमीन से ऊपर तक, जो कि कष्टप्रद है जब तक कि आप वास्तव में बहुत बड़ी प्रणाली प्रदान नहीं कर रहे हैं जो अपने आप पर खड़ा होता है ) या स्टैटिक को बराबर से जोड़ रहे हैं।

... लेकिन जादूगरों और पैसे, और पैसे जादूगरों ...

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

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

परंतु...

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

पर्याप्त चिल्डप्ले, अपने आप को हाथ!

जब आप गंभीर हो रहे होते हैं, जैसे कि srsly srs, Linux की दुनिया के भीतर सुचारू रूप से फिट होने के बारे में, जो आप C स्रोतों को वितरित करते हैं या एक हैकिशली रमणीय भाषा के लिए पूरी तरह से प्रबंधित वातावरण में बदल जाते हैं जो पहले से ही निर्मित है। यदि आप उदाहरण के लिए पायथन कोड लिख रहे हैं, तो आप संस्करणों की जांच कर सकते हैं और जान सकते हैं कि सीपीथॉन संस्करण किसके साथ काम करता है, और आम तौर पर किसी दिए गए लिनक्स पर मौजूद कुछ संगत संस्करण की अपेक्षा करते हैं (और यह सी एफआईआर के व्यापक स्वीप की तुलना में जांचना बहुत आसान है। / आपके द्वारा उपयोग किए जा सकने वाले संस्करण)। एरलंग, गुइल, पायथन, पर्ल, सीएल, आदि सभी बहुत हैं इस तरह की तैनाती के लिए आसान लक्ष्य, और उनमें से कई के पास केंद्रीय भंडार जैसे सीपीएएन या पाइप (या जो कुछ भी है) जहां उपयोगकर्ता अपने हस्ताक्षरित स्रोत को खींचने के लिए एक कमांड चला सकते हैं जब वे इसे चाहते हैं, और जानते हैं कि चीजें आम तौर पर आपके इच्छित उद्देश्य के अनुसार काम करेंगी। ।

[परिशिष्ट: 1. यहां तक ​​कि हास्केल आमतौर पर इसे कैबाल के माध्यम से खींच सकते हैं - हालांकि मैं उत्पादन के माहौल में ऐसा करने के बारे में सतर्क रहूंगा। 2. Erlang के साथ पूरी तरह से अलग "रिलीज़" परिनियोजन रणनीतियाँ हैं जो आपके कोड की गारंटी देती हैं और इसके साथ एक पूरा वातावरण बनाती हैं। 3. पायथन वर्चुअल वातावरण के साथ एक कदम आगे जाता है; सभी रनटाइम्स आपकी मदद नहीं करते।]

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

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