शराब और मोनो के बीच अंतर


31

जहां तक ​​मुझे पता है, उबंटू के तहत विंडोज एप्लिकेशन चलाने के लिए वाइन और मोनो दोनों का उपयोग किया जाता है।

तो मैं सोच रहा था

  1. उनके मतभेद क्या हैं? क्या वे दोनों वर्चुअल मशीन हैं? या प्रत्येक किसी अन्य श्रेणी से संबंधित है?
  2. यह बेहतर है कि कब किस तरह के विंडोज अनुप्रयोगों के लिए उपयोग किया जाए? उदाहरण के लिए, उन अनुप्रयोगों के लिए .net फ्रेमवर्क की आवश्यकता हो सकती है या नहीं भी हो सकती है।
  3. क्या वे एक-दूसरे पर निर्भर हैं? क्या उन्हें एक साथ स्थापित करना आवश्यक है? या प्रत्येक स्वतंत्र रूप से दूसरे के अस्तित्व के बिना काम करता है?

धन्यवाद एवं शुभकामनाएँ!

जवाबों:


34

किसी प्रोग्राम को सफलतापूर्वक चलाने के लिए तीन चीजों का मिलान आवश्यक है:

  • सीपीयू अनुदेश सेट ( आपके पीसी में एएम। 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 के तहत)।


22

संक्षिप्त उत्तर:

.NET जावा के लिए Microsoft का उत्तर है, और मोनो इसका एक खुला स्रोत कार्यान्वयन है। शराब देशी विदेशी के लिए है और इसका मोनो से कोई लेना-देना नहीं है, सिवाय इसके कि आप इसके साथ .NET रनटाइम चला सकते हैं, किसी भी अन्य विंडोज सॉफ्टवेयर की तरह।


लंबे उत्तर:

वाइन और मोनो (और .NET) के बीच अंतर को समझने के लिए आपको मूल मशीन कोड निष्पादन योग्य और "सामान्य भाषा रनटाइम" उर्फ ​​"वर्चुअल मशीन" निष्पादन योग्य के बीच अंतर समझना चाहिए:

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

"सीएलआर" या "वीएम" निष्पादनयोग्य एक प्रोसेसर के लिए विशिष्ट नहीं हैं: प्रोसेसर को चलाने के लिए उन्हें सक्षम करने के लिए सॉफ्टवेयर के एक अतिरिक्त टुकड़े की आवश्यकता होती है। मोनो / .NET इस तरह की प्रणाली का एक ऐसा उदाहरण है। .NET प्रोग्राम को Windows पर चलाने पर भी .NET रनटाइम इंस्टॉल होता है। जावा उसी तरह काम करता है।

इसलिए:

1) वाइन और मोनो के बीच का अंतर: वाइन विंडोज के लिए बनाए गए देशी मशीन कोड एक्ज़ीक्यूटेबल्स को चलाने के लिए है, और मोनो मोनो / .NET निष्पादन योग्य को चलाने के लिए है, जो किसी भी विशिष्ट प्लेटफ़ॉर्म के लिए आवश्यक नहीं हैं। लिनक्स पर मोनो स्थापित करना विंडोज पर .NET रनटाइम स्थापित करने के बराबर है।

2) यदि आप जिस प्रोग्राम को चलाना चाहते हैं, वह .NET का उपयोग बिल्कुल नहीं करता है, तो आपको वाइन का उपयोग करना चाहिए। मोनो यहाँ आपकी बिल्कुल मदद नहीं करेगा।

हालाँकि, यदि प्रोग्राम .NET का उपयोग करता है तो आपके पास दो विकल्प हैं, जिनमें से कोई भी काम कर सकता है या नहीं:

  • आप मोनो का उपयोग करके इसे चलाने का प्रयास कर सकते हैं। यह विफल हो जाएगा यदि .NET प्रोग्राम भी win32 एपीआई से मूल कार्यों का उपयोग करता है, जो कि विंडोज के लिए किए गए कई (लेकिन सभी नहीं) .NET अनुप्रयोग हैं।

  • वैकल्पिक रूप से, आप वाइन के अंदर विंडोज़ के लिए Microsoft .NET रनटाइम स्थापित कर सकते हैं , और फिर इसके माध्यम से .NET एप्लिकेशन चला सकते हैं। आप इस मामले में मोनो का उपयोग नहीं करेंगे।

3) वाइन और मोनो एक दूसरे पर बिल्कुल भी निर्भर नहीं करते हैं, लेकिन जैसा कि ऊपर कहा गया है, आप मोनो / .NET एप्लिकेशन को चलाने के लिए वाइन में Microsoft .NET रनटाइम का उपयोग कर सकते हैं।


धन्यवाद! (1) इसलिए यदि कोई अनुप्रयोग .NET और win32 दोनों पर निर्भर करता है, तो इसका एकमात्र तरीका .NET को वाइन पर इंस्टॉल करना है और फिर वाइन पर एप्लिकेशन इंस्टॉल करना है? (2) कैसे पता चलेगा कि कोई एप्लिकेशन .NET और / या win32 पर निर्भर है?
टिम

1
टाइपिंग file *.exeसीपीयू अनुदेश सेट और फ़ाइल प्रकार के बारे में जानकारी दिखाएगा। यदि यह एक CLI / CLR (".Net" / मोनो) एप्लिकेशन है जो देशी Win32 API कॉल का भी उपयोग करता है, तो आपको इसे चलाने की आवश्यकता होगी, या किसी भी file *.dllफाइल की तलाश करें जो कि मूल x86 + Win32 के रूप में दिखाई दे।
स्लैडेन

आप वाइन में विंडोज के लिए मोनो भी इंस्टॉल कर सकते हैं लेकिन वाइन एफएक्यू के अनुसार यह .NET रनटाइम की तुलना में काम करने की संभावना कम है। यह जानने का कोई सरल तरीका नहीं है कि क्या कोई .NET प्रोग्राम देशी win32 कॉल का उपयोग करता है क्योंकि विभिन्न तरीकों का एक गुच्छा है जो वे कर सकते हैं। सबसे अच्छी बात यह है कि पहले मोनो की कोशिश करें, अगर यह काम नहीं करता है, तो वाइन + .NET आज़माएं।
एलिस्टेयर बुक्सटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.