मुझे पता है कि OSX और Linux के बीच कई अंतर हैं, लेकिन क्या उन्हें इतना अलग बनाता है, जो उन्हें मौलिक रूप से असंगत बना देता है?
मुझे पता है कि OSX और Linux के बीच कई अंतर हैं, लेकिन क्या उन्हें इतना अलग बनाता है, जो उन्हें मौलिक रूप से असंगत बना देता है?
जवाबों:
पूरे ABI अलग है, न कि केवल द्विआधारी प्रारूप (Mach-O बनाम ELF) जैसा कि sepp2k उल्लेख किया गया है।
उदाहरण के लिए, जबकि लिनक्स और डार्विन / एक्सएनयू (ओएस एक्स के कर्नेल) दोनों ही sc
पावरपीसी और int 0x80
/ sysenter
/ syscall
पर x86 पर syscall प्रविष्टि के लिए उपयोग करते हैं , वहां से बहुत अधिक नहीं है।
डार्विन ने मैक माइक्रोकाइनल में नकारात्मक syscall संख्या और BSD अखंड कर्नेल पर सकारात्मक syscall संख्याओं को निर्देशित किया - xnu / osfmk / mach / syscall_sw.h और xnu / bsd / kern / syscalls.master देखें । Linux के syscall नंबर आर्किटेक्चर से भिन्न होते हैं - linux / arch / powerpc / see / asm / unistd.h , linux / arch / x86 / / / asm / unistd_32.h , और linux / arch-x86 / / / asm / unistd_64.hh शामिल करें। - लेकिन सभी nonnegative हैं। तो स्पष्ट रूप से syscall नंबर, syscall तर्क और यहां तक कि जो syscall मौजूद हैं वे अलग हैं।
मानक सी रनटाइम लाइब्रेरी भी अलग हैं; डार्विन ज्यादातर फ्रीबीएसडी के परिवाद को विरासत में लेते हैं, जबकि लिनक्स आमतौर पर ग्लिबक का उपयोग करता है (लेकिन एग्लिबेक और डाइटलिब और यूक्लिब और बायोनिक जैसे विकल्प हैं)।
यह उल्लेख करने के लिए नहीं कि पूरे ग्राफिक्स स्टैक अलग हैं; पूरे कोको ऑब्जेक्टिव-सी लाइब्रेरी को अनदेखा करते हुए, OS X पर GUI प्रोग्राम मैक पोर्ट्स पर WindowServer से बात करते हैं, जबकि Linux पर, GUI प्रोग्राम आमतौर पर X11 प्रोटोकॉल का उपयोग करके UNIX डोमेन सॉकेट्स पर X सर्वर से बात करते हैं। बेशक, वहां अपवाद हैं; आप डार्विन पर एक्स चला सकते हैं, और आप लिनक्स पर एक्स को बायपास कर सकते हैं, लेकिन ओएस एक्स एप्लिकेशन निश्चित रूप से एक्स से बात नहीं करते हैं।
शराब की तरह, अगर किसी ने काम में डाल दिया
तब लिनक्स पर "मूल रूप से" एक ओएस एक्स प्रोग्राम चलाना संभव हो सकता है। कई साल पहले, काइल मोफ़ेट ने लिनक्स के लिए एक प्रोटोटाइप binfmt_mach-o का निर्माण करते हुए पहले आइटम पर कुछ काम किया था , लेकिन यह कभी पूरा नहीं हुआ था, और मुझे कोई अन्य समान परियोजनाओं का पता नहीं है।
(सिद्धांत रूप में यह बहुत संभव है, और इसी तरह के प्रयास कई बार किए गए हैं; वाइन के अलावा, लिनक्स के पास अन्य यूनिक्स जैसे एचपी-यूएक्स और ट्रू 64 से चलने वाले बायनेरिज़ के लिए समर्थन है, और ग्लेंडिक्स परियोजना का लक्ष्य 9 9 संगतता लाने का लक्ष्य है लिनक्स।)
किसी ने लिनक्स के लिए माच-ओ बाइनरी लोडर और एपीआई अनुवादक को लागू करने के प्रयास में लगा दिया है!
shinh / maloader - GitHub , बाइनरी को लोड करने और यूजर्स कॉल में लाइब्रेरी की सभी कॉल को ट्रैप / ट्रांसलेट करने के लिए वाइन जैसा दृष्टिकोण लेता है। यह पूरी तरह से syscalls और सभी ग्राफिकल से संबंधित पुस्तकालयों की अनदेखी करता है, लेकिन कई कंसोल कार्यक्रमों को काम करने के लिए पर्याप्त है।
डार्लिंग मैलोडर पर बनाता है, पुस्तकालयों और अन्य सहायक रनटाइम बिट्स को जोड़ता है।
OSX एप्लिकेशन लिनक्स पर मूल रूप से क्यों नहीं चलेंगे:
सबसे पहले ओएसएक्स लिनक्स की तुलना में एक अलग बाइनरी प्रारूप का उपयोग करता है, इसलिए लिनक्स ओएसएक्स के लिए संकलित बायनेरिज़ को निष्पादित नहीं कर सकता है (उसी तरह यह विंडोज या बीएसडी के लिए संकलित बायनेरिज़ को निष्पादित नहीं कर सकता है)।
यदि आप GUI अनुप्रयोगों के बारे में बात कर रहे हैं, तो दूसरा, Apple का GUI टूलकिट a) केवल OSX के लिए उपलब्ध है और b) X11 के शीर्ष पर नहीं चलता है।
OSX अनुप्रयोगों के लिए वाइन के बराबर क्यों नहीं है:
शराब बनाने से पहले भी बहुत काम करना पड़ता था, यहाँ तक कि आधे रास्ते का इस्तेमाल करना भी मुश्किल था। चूँकि OSX समतुल्य की उतनी माँग नहीं है, फिर भी किसी ने इस परियोजना में उतने ही प्रयास का निवेश नहीं किया है।
सबसे महत्वपूर्ण कारण है कि OS X ऐप लिनक्स पर नहीं चलेगा क्योंकि उन OSes ने अलग-अलग syscalls का उपयोग किया था।
कुछ पिछले जवाबों ने पुस्तकालयों का उल्लेख किया है, लेकिन यह आमतौर पर ऐसा नहीं है - कोर फाउंडेशन मुख्य रूप से Apple द्वारा किसी भी प्लेटफ़ॉर्म के लिए CFLite और आसानी से पोर्टेबल नाम से खुला है (iTunes का विंडोज संस्करण वास्तव में कोर फाउंडेशन के एक विंडोज पोर्ट के ऊपर बैठता है, और साथ कुछ संकलक ट्विक्स, आप सीधे लिनक्स वितरण पर क्लैंग का उपयोग करके सीफ़लाइट बना सकते हैं) और उद्देश्य-सी पर्यावरण को पोर्ट करने के लिए खुले-खट्टे प्रयास भी हैं, मुख्य रूप से लिनक्स के लिए फाउंडेशन और ऐपिट, सबसे विशेष रूप से जीएनयूस्टेप, ओपनस्टेप का एक जीएनयू कार्यान्वयन। Apple के कोको से पहले (तब शुरू हुआ जब अभी भी कंपनी नेक्सटी कंप्यूटर था।)
यदि कोई निर्धारित किया जाता है, तो वे एक लोडर को डिज़ाइन कर सकते हैं जो प्रत्येक मच-ओ syscall को कैप्चर करेगा और इसे संबंधित लिनक्स syscall में अनुवाद करेगा, साथ ही उन खुले स्रोत लाइब्रेरी "समकक्षों" को बाइनरी के साथ उपयुक्त ABB अनुवाद के साथ जोड़ देगा।
और आपकी जानकारी के लिए, यदि आप Mach-O एप्लिकेशन का स्रोत कोड प्राप्त कर सकते हैं, तो आप इसे पोर्ट मान सकते हैं और यह बहुत सरल हो सकता है। एक उदाहरण के रूप में, OS X 10.6 के साथ बंडल किए गए TextEdit ऐप को सीधे (गैर-महत्वपूर्ण) CF कोड की कुछ पंक्तियों को हटाने के बाद GNUstep से लिंक करके पुन: कनेक्ट किया जा सकता है और इस प्रकार तुरंत लिनक्स के अंतर्गत उपलब्ध होता है (GNUstep के साथ भेजे गए TextDdit का उल्लेख नहीं करना वास्तव में एक था NeXTSTEP से TextEdit ऐप का डायरेक्ट रिजेक्टाइल, OS X के अग्रदूत के रूप में भी, इसके "© 1995 NeXT" लेबल को बरकरार रखना। TextEdit BSD लाइसेंस के तहत है।
8 दिसंबर 2012 को नई परियोजना शुरू की गई है - डार्लिंग।