जाहिर है, उन्होंने विंडोज में चलने के लिए लिनक्स अनुप्रयोगों के लिए एक लिनक्स वातावरण बनाया। परंतु,
- इसके लिए किस तरह की तकनीकों का इस्तेमाल किया जाता है?
- क्या कोई विशेष तंत्र का पालन किया जाता है?
जाहिर है, उन्होंने विंडोज में चलने के लिए लिनक्स अनुप्रयोगों के लिए एक लिनक्स वातावरण बनाया। परंतु,
जवाबों:
लिनक्स एमुलेटर जैसी कोई चीज नहीं है
यदि आप Cygwin के बारे में बात कर रहे हैं, तो वे विशेष रूप से उपयोगकर्ता नाम DLL फ़ाइल में Windows API कॉल के संदर्भ में सभी यूनिक्स प्रणाली कॉल को फिर से लागू करते हैं। Cygwin पर्यावरण के लिए संकलित कार्यक्रम इसलिए विंडोज में स्वतंत्र रूप से नहीं चल सकते
Cygwin में दो भाग होते हैं: एक डायनेमिक-लिंक लाइब्रेरी (DLL) जो कि C मानक लाइब्रेरी के रूप में API संगतता परत के रूप में है, जो POSIX API कार्यक्षमता का एक बड़ा हिस्सा प्रदान करता है, और सॉफ्टवेयर टूल्स और एप्लिकेशन का एक व्यापक संग्रह जो एक यूनिक्स प्रदान करता है। -देखना और महसूस करना।
...
साइगविन में एक पुस्तकालय शामिल है जो Win32 सिस्टम कॉल, एक GNU डेवलपमेंट टूलचैन (GCC और GDB सहित) के संदर्भ में पॉसिक्स सिस्टम कॉल एपीआई को लागू करता है, सॉफ्टवेयर डेवलपमेंट की अनुमति देता है, और यूनिक्स सिस्टम पर उन लोगों के बराबर बड़ी संख्या में एप्लिकेशन प्रोग्राम चला रहा है।
यदि आप MSYS / MSYS2 या MinGW के बारे में बात कर रहे हैं तो वे किसी भी मायने में एक सिम्युलेटर नहीं हैं। कार्यक्रम Microsoft C लाइब्रेरी का उपयोग करके देशी विंडोज बायनेरिज़ में संकलित किए जाते हैं और वे बिना किसी विशेष वातावरण के चल सकते हैं
हालाँकि, Cygwin और MinGW दोनों का उपयोग Windows में Unix सॉफ़्टवेयर को पोर्ट करने के लिए किया जा सकता है, लेकिन उनके पास अलग-अलग दृष्टिकोण हैं: Cygwin का उद्देश्य पूर्ण POSIX परत प्रदान करना है जिसमें सभी प्रमुख Unix सिस्टम कॉल और लाइब्रेरीज़ का पूर्ण कार्यान्वयन शामिल है। प्रदर्शन की तुलना में संगतता को उच्च प्राथमिकता माना जाता है। दूसरी ओर, MinGW की प्राथमिकताएं सादगी और प्रदर्शन हैं। जैसे, यह कुछ POSIX API प्रदान नहीं करता है, जिसे Windows API, जैसे
fork()
,mmap()
और का उपयोग करके आसानी से लागू नहीं किया जा सकता हैioctl()
। क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी का उपयोग करके लिखे गए एप्लिकेशन जो कि खुद SDG, wxWidgets, Qt, या GTK + जैसे MinGW में पोर्ट किए गए हैं, आमतौर पर MinGW में आसानी से संकलन करेंगे जैसे कि वे Cygwin में होंगे।
विंडोज 10 में MS ने विंडोज़-सबसिस्टम-फॉर- लिनेक्स पेश किया जो वास्तव में एक लिनक्स सिम्युलेटर है और एमुलेटर नहीं, ठीक उसी तरह जैसे वाइन एमुलेटर नहीं है । उनके पास लिनक्स सिस्टम कॉल को हैंडल करने के लिए एक विशेष कर्नेल घटक है और उन्हें पुन: लिंक किए बिना देशी लिनक्स ईएलएफ बायनेरिज़ को चलाने के लिए विंडोज संस्करण में परिवर्तित करना है।
डब्लूएसएल उन घटकों का एक संग्रह है जो मूल लिनक्स ईएलएफ 64 बायनेरिज़ को विंडोज पर चलने में सक्षम बनाता है। इसमें उपयोगकर्ता मोड और कर्नेल मोड दोनों घटक शामिल हैं। यह मुख्य रूप से शामिल है:
- उपयोगकर्ता मोड सत्र प्रबंधक सेवा जो लिनक्स उदाहरण जीवन चक्र को संभालती है
- पिको प्रदाता ड्राइवर (lxss.sys, lxcore.sys) जो Linux के syscalls का अनुवाद करके लिनक्स कर्नेल का अनुकरण करते हैं
- पिको प्रक्रियाएं जो अनमॉडिफाइड यूजर मोड लिनक्स को होस्ट करती हैं (जैसे / बिन / बैश)
डब्लूएसएल विंडोज एनटी कर्नेल के शीर्ष पर लिनक्स कर्नेल इंटरफ़ेस को वर्चुअलाइज करके WSL अनमॉडिफाइड लिनक्स ELF64 बायनेरिज़ को निष्पादित करता है। कर्नेल इंटरफ़ेस जो इसे उजागर करता है उनमें से एक सिस्टम कॉल (syscalls) है। एक syscall कर्नेल द्वारा प्रदान की जाने वाली एक सेवा है जिसे उपयोगकर्ता मोड से कॉल किया जा सकता है। दोनों लिनक्स कर्नेल और विंडोज NT कर्नेल उपयोगकर्ता मोड में कई सौ syscalls को उजागर करते हैं, लेकिन उनके अलग-अलग शब्दार्थ हैं और आमतौर पर सीधे संगत नहीं होते हैं। उदाहरण के लिए, लिनक्स कर्नेल जैसी चीज़ें शामिल हैं
fork
,open
औरkill
Windows NT कर्नेल है, जबकि तुलनीयNtCreateProcess
,NtOpenFile
औरNtTerminateProcess
।https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/
अतीत में UNIX के लिए Microsoft POSIX सबसिस्टम और Windows सेवाएँ भी थीं, लेकिन वे लिनक्स चलाने के लिए नहीं थीं । अधिक जानकारी के लिए विंडोज में POSIX और UNIX सपोर्ट पढ़ें