किसी प्रोग्राम को सफलतापूर्वक चलाने के लिए तीन चीजों का मिलान आवश्यक है:
- सीपीयू अनुदेश सेट ( आपके पीसी में एएम। x86 , आपके मोबाइल फोन में एआरएम , कुछ ऐप्पल मैक में पावरपीसी , जावा ऐप्पल के लिए जावा बाइटकोड , "। नेट" / मोनो अनुप्रयोगों के लिए सीएलआई )।
- बाइनरी फ़ाइल प्रारूप (उदाहरण। PE / COFF ".exe" Microsoft विंडोज के लिए, जावा Applets के लिए .jar , PE32 ".exe", यूनिक्स / लिनक्स पर ELF )
- अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस ; (उदाहरण के लिए। POSIX लिनक्स / यूनिक्स, पर कोको मैक OSX, के लिए Win32 माइक्रोसॉफ्ट विंडोज, पर बेस कक्षा लाइब्रेरी "नेट" के लिए / मोनो अनुप्रयोग)।
आप एमुलेटर / दुभाषियों (अन्य सीपीयू निर्देश सेटों के लिए), अतिरिक्त फ़ाइल लोडर (विदेशी फ़ाइल-प्रारूपों के लिए), और अतिरिक्त एपीआई प्रदान करने वाले अतिरिक्त प्रोग्रामिंग लाइब्रेरी होने से, तीनों के मिलान की संभावना बढ़ा सकते हैं।
ध्यान दें, कि कुछ प्रोसेसर मूल रूप से एक से अधिक अनुदेश सेट को निष्पादित कर सकते हैं; एक पीसी में अक्सर x86 और amd64 निर्देश सेट होते हैं; एक ARM प्रोसेसर चार को निष्पादित कर सकता है: ARM32 / Thumb / Java bytecode / ThumbEE । कुछ ऑपरेटिंग सिस्टम मूल रूप से एक से अधिक एपीआई प्रदान कर सकते हैं (Microsoft विंडोज Win32 और POSIX प्रदान करता है )।
बाकी सभी चीज़ों के लिए आपको अतिरिक्त सॉफ़्टवेयर की आवश्यकता होती है। जावा प्रोग्राम चलाने के लिए आपको इसे काम करने के लिए ऊपर दिए गए तीन भागों की आवश्यकता है: एक जावा वर्चुअल मशीन प्रोग्राम जो बायटेकोड को चलाने के लिए है; कॉल करने के कार्यक्रमों के लिए जावा प्रोग्राम, और जावा क्लासलिफ्ट लॉन्च करने का एक तरीका। "जावा" मूल रूप से सूर्य द्वारा विकसित कई अलग-अलग तकनीकों के लिए एक ब्रांडनाम है, लेकिन एक उपयोगकर्ता के लिए उन्हें अक्सर एक के रूप में डाउनलोड किया जाता है।
वही "नेट" के लिए लागू होता है, जो मूल रूप से माइक्रोसॉफ्ट द्वारा विकसित कई अलग-अलग तकनीकों के लिए एक मार्केटिंग ब्रांडनाम है: कॉमन लैंग्वेज रन-टाइम / बेस क्लास लाइब्रेरी (सीएलआर) एपीआई हैं; वीईएस लोडर है और कॉमन लैंग्वेज इंटरफेस (सीएलआई) इंस्ट्रक्शन सेट है।
आपको उन तकनीकों को Microsoft से, सूर्य से या इंटेल से सिर्फ इसलिए डाउनलोड नहीं करना है क्योंकि उन्होंने मूल रूप से कुछ का आविष्कार किया है। एएमडी इंटेल के मानकों के अनुरूप प्रोसेसर बनाते हैं; दोनों अपाचे ("सद्भाव") और Google ("एंड्रॉइड डाल्विक") दोनों एक जावा जैसे सूट बनाते हैं; और मोनो एक सीएलआर / सीएलआई / वीईएस सुइट प्रदान करता है। महत्वपूर्ण बात यह है कि हर कोई समान मानकों का उपयोग करता है, उन्हें संगत बनाता है। एक डीवीडी डिस्क मानक को पूरा करने वाले किसी भी डीवीडी प्लेयर पर चलेगा, और HTML वेब पेज HTML मानकों को पूरा करने वाले किसी भी वेब ब्राउज़र में प्रदान करेगा।
- मोनो एक सीएलआर / सीएलआई / वीईएस सूट है जो मैक ओएसएक्स, एमएस विंडोज और लिनक्स पर चल सकता है।
- वाइन एक Win32 एपीआई कार्यान्वयन है जो मैक ओएसएक्स, एमएस विंडोज और लिनक्स पर चल सकता है।
- आप किसी भी ऑपरेटिंग सिस्टम के शीर्ष पर, वाइन के ऊपर मोनो चला सकते हैं ।
- आप किसी भी सीपीयू वास्तुकला के शीर्ष पर, क्यूमू के ऊपर वाइन चला सकते हैं ।
तो मोनो CLR .exe अनुप्रयोग चलाता है, और वाइन Win32 .exe अनुप्रयोग चलाता है। आम बात केवल यह है कि फ़ाइल नाम ".exe" में समाप्त होता है; सामग्री पूरी तरह से अलग और असंगत हैं, इसलिए आपको सही एक की आवश्यकता है।
जैसे पायथन दुभाषिया त्रुटि करेगा, जब पर्ल (और विज़ वर्सा) के साथ प्रस्तुत किया जाता है, तो एक CLR दुभाषिया तब त्रुटि करेगा जब x86 + Win32, या JVM + जावा बाइटकोड के साथ प्रस्तुत किया जाएगा। यदि आप उस विशेष कार्यक्रम के लिए एक लिंक पोस्ट कर सकते हैं जिसे आप चलाना चाहते हैं, तो आप या कोई और आपको सटीक निर्देश सेट, फ़ाइल प्रारूप और एपीआई बताने में सक्षम होना चाहिए जिसे इसके लिए डिज़ाइन किया गया था, और आपको लिनक्स पर स्थापित करने की आवश्यकता क्या है इसे चलाने के लिए। उम्मीद है की वो मदद करदे!
(कभी-कभी आपको दोनों की आवश्यकता भी हो सकती है। उदाहरण के लिए, Openbve ट्रेन सिम्युलेटर C # है और PE / COFF + CLI + CLR के लिए संकलित है, लेकिन वैकल्पिक रूप से PE / COFF + Win32 + x86 के लिए संकलित C बाइनरी प्लग इन का उपयोग कर सकते हैं। इस मामले में, आप। शराब के तहत मोनो के एक Win32 संस्करण की आवश्यकता है। यदि सीपीयू वास्तुकला भी अलग है, जो कि अनुकरण की आवश्यकता होगी; तो शराब के तहत मोनो Qemu के तहत)।