Apple ने Mac के लिए WSL जैसा टूल बनाया (Container Machines)
BBetter Stack
Computing/SoftwareInternet Technology
Transcript
00:00:00इस साल WWDC में Apple Intelligence की तमाम चीज़ों के पीछे,
00:00:03Apple ने चुपचाप Linux के लिए अपने Windows सबसिस्टम का अपना वर्शन जारी किया जिसे Container
00:00:06Machines कहते हैं। ये आपको आपके Mac पर एक हल्का और निरंतर Linux वातावरण देते हैं जो बहुत
00:00:10इस्तेमाल करने में आसान है, और ये वास्तव में Apple के कंटेनर प्रोजेक्ट के ऊपर बनाए गए हैं जिसे उन्होंने
00:00:14पिछले साल जारी किया था, जो एक Docker विकल्प है, और ये सब Apple Silicon के लिए ऑप्टिमाइज़ किया गया है।
00:00:18तो चलिए देखते हैं कि कंटेनर मशीनें क्या हैं, वे कैसे काम करती हैं,
00:00:21और उन सभी लोगों के लिए Apple कंटेनर्स का एक त्वरित रीकैप भी करते हैं जिन्होंने उन्हें मिस कर दिया।
00:00:29तो मैं एक कंटेनर मशीन सेटअप करके शुरुआत करने जा रहा हूँ, और फिर मैं बताऊंगा कि ये सब
00:00:32कैसे काम कर रहा है। लेकिन मुझे जो चाहिए वह एक Ubuntu Linux वातावरण होगा। तो मैं बस
00:00:37यहाँ Ubuntu इमेज के साथ एक Docker फ़ाइल रख रहा हूँ, और कुछ सामान्य टूल्स इंस्टॉल करने के लिए इसमें कुछ चीजें डाल रहा हूँ।
00:00:41यह किसी भी OCI संगत इमेज के साथ काम करेगा, तो लगभग वे सभी जो आप
00:00:46Docker के साथ इस्तेमाल कर रहे हैं। VM होने के लिए इसमें केवल सिस्टम इनिशियलाइज़ेशन
00:00:50प्रोग्राम शामिल होना चाहिए। एक बार जब हमारे पास वह Docker फ़ाइल इमेज हो जाती है जिसका हम अपने VM के लिए उपयोग करना चाहते हैं, तो हमें बस
00:00:54Apple के कंटेनर टूल का उपयोग करके इसे बनाना होगा। तो आप देख सकते हैं कि यह वह कमांड है जिसका मैं अपने लिए उपयोग कर रहा हूँ,
00:00:58चूंकि मेरे पास इस फ़ोल्डर में Docker फ़ाइल है, और मैं इसे बस local
00:01:01Ubuntu machine के रूप में टैग करने जा रहा हूँ, और हम आगे बढ़ सकते हैं और इसे बनाने के लिए एंटर दबा सकते हैं। कंटेनर टूल,
00:01:05वैसे, macOS 26 और उसके बाद के वर्शन पर काम करता है, और आप इसे बस रिपॉजिटरी में जाकर,
00:01:09रिलीज़ में जाकर, और नवीनतम पैकेज डाउनलोड करके GitHub से इंस्टॉल कर सकते हैं। ऐसा लग रहा है कि मेरी इमेज का बिल्ड
00:01:13यहाँ हो गया है, और आप देख सकते हैं कि यह Docker के बहुत समान है। यह बस एक OCI इमेज बना रहा है।
00:01:17कंटेनर मशीन के लिए हमें बस इतना ही चाहिए, तो अब हम बस container machine create,
00:01:21जो इमेज हम अपनी कंटेनर मशीन के लिए चाहते हैं उसे बताएं, इसे एक फ्रेंडली नाम दें,
00:01:24और मैं इसे डिफ़ॉल्ट के रूप में भी सेट करने जा रहा हूँ, ताकि मैं जो भी कमांड चलाऊं वह मान ले कि
00:01:27मैं इस कंटेनर मशीन पर हूँ, और मुझे इसे नाम से निर्दिष्ट करने की आवश्यकता नहीं है। इसके साथ हम एंटर दबा सकते हैं,
00:01:31और सचमुच सेकंडों में यह सब सेटअप हो जाता है। हम उस
00:01:35कंटेनर मशीन के बारे में थोड़ी जानकारी देख सकते हैं जिसे मैंने अभी container machine list चलाकर बनाया है। यहाँ आप देख सकते हैं कि इसमें
00:01:38Ubuntu वाली है जिसे मैंने अभी बनाया है, IP एड्रेस, 7 CPUs, और 18 GB मेमोरी है। CPU और मेमोरी
00:01:44वैसे कॉन्फ़िगर करने योग्य हैं, लेकिन डिफ़ॉल्ट रूप से यह आपके Mac की आधी मेमोरी का उपयोग करेगा। अपनी कंटेनर मशीन का उपयोग
00:01:48शुरू करने के लिए, आपको बस container machine run करना है,
00:01:51और यदि आप इंटरैक्टिव टर्मिनल में प्रवेश करना चाहते हैं तो आप इसे खाली छोड़ सकते हैं, या आप वास्तव में बस
00:01:54उसके बाद एक कमांड जोड़ सकते हैं यदि आप उसे अपनी Linux मशीन पर चलाना चाहते हैं। इस मामले में आप देख सकते हैं कि मैंने
00:01:58अभी एंटर दबाया है, और अब मैं अपने Linux वातावरण के इंटरैक्टिव टर्मिनल पर हूँ। हम uname-a जैसा
00:02:02कुछ करके इसकी पुष्टि कर सकते हैं, और आप देख सकते हैं कि यह प्रिंट कर रहा है कि यह Linux Ubuntu है,
00:02:06इसके विपरीत जब मैं इसे अपने Mac पर चलाता हूँ और हमें Darwin मिलता है। अब कंटेनर मशीनों के बारे में अच्छी चीजों में से एक
00:02:10यह है कि इसमें स्वचालित यूज़र शेयरिंग है, इसलिए मेरा यूज़र पहले ही मेरे Mac से
00:02:14मेरे Linux वातावरण में कॉपी कर दिया गया है, और यही बात आपकी होम डायरेक्टरी के लिए भी सच है। यह आपकी
00:02:18पूरी होम डायरेक्टरी को रीड-राइट के रूप में माउंट करेगा, इसलिए मेरे पास इस Linux वातावरण में उन सभी फाइलों का एक्सेस है जो
00:02:23मेरे Mac पर हैं। आप देख सकते हैं कि जहाँ मैंने वास्तव में container run चलाया, इसने मुझे सीधे उस फाइल में
00:02:27Linux वातावरण में डाल दिया है, और हमारे पास पहले से ही वे फाइलें हैं। इसका अपना वॉल्यूम भी है
00:02:31हालाँकि, इसलिए यदि हम इस Ubuntu मशीन की होम डायरेक्टरी में नेविगेट करते हैं, तो आप देख सकते हैं कि वर्तमान में
00:02:35वहाँ कुछ भी नहीं है, भले ही मेरे Mac पर है, और ऐसा इसलिए है क्योंकि यह Linux
00:02:39वातावरण है, और यह वह जगह है जहाँ आप अपनी .files रखते हैं जो Linux के लिए विशिष्ट हैं। फ़ोल्डर शेयरिंग
00:02:43इसे अपने Mac पर अपने सामान्य टूल्स का उपयोग करके कुछ विकसित करना बहुत आसान बनाता है, और शायद कुछ
00:02:48ऐसे भी जो केवल macOS के साथ संगत हैं, और फिर जब आपको कुछ टेस्ट करने की आवश्यकता हो तो बस Linux पर स्विच करें।
00:02:52उदाहरण के लिए, मेरे पास यहाँ एक बहुत ही सरल BUN एप्लिकेशन है, और मैं इसे एक एकल
00:02:56एक्जीक्यूटेबल में कंपाइल करना चाहता हूँ जो Linux पर काम करेगा, लेकिन मैं वास्तव में अपने macOS पर Linux टेस्ट नहीं कर सकता, तो इसे चलाना,
00:03:01मुझे नहीं पता कि यह काम कर रहा है या नहीं। यदि हम कंटेनर मशीन पर स्विच करते हैं,
00:03:04तो आप देख सकते हैं कि मैं बस तुरंत कमांड चला सकता हूँ। मुझे फाइलें ट्रांसफर करने की ज़रूरत नहीं है या कुछ भी नहीं,
00:03:08इस तथ्य के लिए धन्यवाद कि यह समान फाइल सिस्टम साझा करता है। यदि मैं यहाँ एंटर दबाता हूँ, तो यह अच्छी तरह से काम करता है।
00:03:12यह एप्लिकेशन यहाँ इस वेब पेज के साथ एक बहुत ही सरल वेब सर्वर था, जो प्रिंट करता है कि यह किस पर
00:03:16चल रहा है, इसलिए यह वर्तमान में Ubuntu 24 पर चल रहा है। आप यह भी देख सकते हैं कि सब्सक्राइब करने के लिए एक
00:03:20लिंक है, कुछ ऐसा जो आपको निश्चित रूप से करना चाहिए। अब मैं सिर्फ Linux वातावरण पर BUN
00:03:23डेवलपमेंट सर्वर चलाने का परीक्षण कर रहा था, और यह सब काम करता है, जिसे हम यहाँ देख सकते हैं,
00:03:27यह BUN dev पर चल रहा है, और यह कंपाइल नहीं हुआ है। लेकिन अगर मैं अपने Mac से सोर्स फाइलों में से एक को बदलूं
00:03:31यहाँ, शायद सब्सक्राइब के बजाय हैलो कहें, तो मैं देख रहा हूँ कि हॉट रिलोडिंग इस व्यवहार को
00:03:35पिक नहीं कर रही है, और बदलावों को लागू करने के लिए मुझे BUN डेवलपमेंट सर्वर को रीस्टार्ट करना होगा।
00:03:39वहाँ हम गए, अब यह हैलो कहता है। मुझे लगता है कि हॉट रिलोडिंग उसी तरह काम करेगी जैसे ब्रेकपॉइंट्स
00:03:43करते हैं, जहाँ वे वास्तव में काम नहीं करते हैं यदि आप अपने macOS कोड वर्शन पर हैं, लेकिन आप जो कर सकते हैं वह है अपने
00:03:47एडिटर को SSH के माध्यम से कंटेनर मशीन से कनेक्ट करने के लिए कहें, और फिर उस तरह फाइलों को एडिट करें, और उस
00:03:52तरह ब्रेकपॉइंट्स और हॉट रिलोडिंग संभवतः काम करेंगे। उनके पास वास्तव में ऐसा करने के तरीके के लिए एक ट्यूटोरियल है
00:03:55उनके डॉक्यूमेंटेशन में। कंटेनर मशीन का उपयोग करने की बात आने पर आपको दिखाने के लिए मूल रूप से इतना ही है।
00:03:59मेरा मतलब है, यह अब बस एक Ubuntu वातावरण है, और ईमानदारी से पूरा अनुभव
00:04:03काफी सहज है। यह बताना भी उचित है कि आप केवल एक मशीन तक सीमित नहीं हैं। आपके पास
00:04:08एक Alpine मशीन, एक Ubuntu वाली, और एक Debian वाली साथ-साथ हो सकती हैं, ताकि आपके पास एक डिस्ट्रो
00:04:12प्रति टारगेट हो, और ईमानदारी से यह बहुत अच्छा है यदि आप क्रॉस-टारगेट काम कर रहे हैं। इसके अलावा, क्योंकि ये मशीनें
00:04:17वास्तव में एक वास्तविक SystemD चला सकती हैं, तो आप उसमें एक उचित सर्विस स्टैक का परीक्षण कर सकते हैं, जैसे Postgres
00:04:22को अपने ऐप के बगल में एक वास्तविक सर्विस के रूप में चल रहे हों, और पूरी चीज़ उस Linux सर्वर की तरह व्यवहार करेगी जिसे आप
00:04:26डिप्लॉय करने जा रहे हैं। सादगी उन मुख्य डिज़ाइन सिद्धांतों में से एक है जिसे
00:04:30Apple कंटेनर मशीनों को विकसित करते समय जोर दे रहा था। वे तेज़, हल्के VM चाहते थे जो
00:04:34आपके मौजूदा वर्कफ़्लो में एकीकृत हों और ज़रूरत पड़ने पर उन्हें स्पिन अप करना बहुत आसान हो, साथ ही समय के साथ बने रहें
00:04:39ताकि आप एक पूरा देव वातावरण VM सेटअप कर सकें जिसमें वे सभी टूल्स हों जिनकी
00:04:42आपको आमतौर पर आवश्यकता होती है जब आपको उनकी ज़रूरत हो। फिर से, यह विंडोज़ सबसिस्टम के समान है
00:04:47Linux के लिए जो हासिल करने की कोशिश कर रहा था। जहाँ तक इस बात की बात है कि यह सब कैसे बनाया गया है और यह Docker और
00:04:51OrbStack से कैसे तुलना करता है, हमें पहले उस कंटेनर टूल को समझने की आवश्यकता है जिसे पिछले साल जारी किया गया था। यह Swift में
00:04:55लिखा गया है और इसका मतलब एक Docker विकल्प होना है जो कंटेनर चला सकता है, और यह किसी भी मानक
00:04:59OCI इमेज को चलाता है, इसलिए कुछ भी जो आप Docker Hub से पुल कर सकते हैं वह अभी भी काम करेगा। Apple के
00:05:04दृष्टिकोण के बारे में अनूठी बात यह है कि प्रत्येक कंटेनर को उनके
00:05:08वर्चुअलाइज़ेशन फ्रेमवर्क के माध्यम से अपनी हल्की वर्चुअल मशीन मिली, न कि बहुत सारे कंटेनर एक बड़े Linux VM को साझा कर रहे हैं, जो
00:05:13Docker Desktop करता है। उस दृष्टिकोण के कुछ लाभ सुरक्षा हो सकते हैं, क्योंकि प्रत्येक कंटेनर में
00:05:17पूर्ण VM के अलगाव गुण होते हैं। फिर गोपनीयता भी है, क्योंकि आप केवल प्रत्येक VM में आवश्यक
00:05:22डेटा माउंट कर रहे हैं, जबकि जब आपके पास एक साझा VM होता है, तो आप वास्तव में उस
00:05:27साझा VM में सारा डेटा माउंट करते हैं, इसलिए इसे व्यक्तिगत कंटेनरों में चुनिंदा रूप से माउंट किया जा सकता है। अंत में, एक
00:05:31प्रदर्शन लाभ भी हो सकता है, क्योंकि Apple कंटेनर का उपयोग करके बनाए गए कंटेनरों को पूर्ण VM की तुलना में कम मेमोरी की आवश्यकता होती है,
00:05:36और बूट समय Docker और अन्य टूल्स के समान है। यदि हम वास्तव में कुछ
00:05:41मानकों (benchmarks) को देखते हैं जो RepoFlow ने यहाँ किए हैं, Apple कंटेनर्स की तुलना OrbStack और Docker Desktop से करते हुए, तो हम देख सकते हैं कि
00:05:46परिणाम वास्तव में इतने खराब नहीं हैं। यहाँ बताना मुश्किल है, लेकिन Apple कंटेनर्स वास्तव में
00:05:50सबसे अधिक सिंगल-थ्रेडेड CPU इवेंट प्राप्त करता है, लेकिन OrbStack काफी करीब था, इसमें अंश हैं, और यह
00:05:55वही कहानी जारी रहती है जब हम मल्टी-थ्रेडेड पर भी जाते हैं, वे सभी बहुत अच्छा प्रदर्शन करते हैं। जहाँ Apple
00:06:00थोड़ी बढ़त लेता हुआ दिखाई देता है, वह मेमोरी थ्रूपुट में है, OrbStack दूसरे स्थान पर और Docker
00:06:04Desktop अंतिम स्थान पर है, लेकिन जब एक छोटे कंटेनर के लिए स्टार्टअप समय की बात आती है, तो ऐसा लगता है कि Apple के पास यहाँ कुछ
00:06:09काम बाकी है, लेकिन यह अभी भी सब-सेकंड है, बस Docker Desktop और OrbStack इसे एक चौथाई सेकंड से कम में
00:06:14कर देते हैं। यहाँ और भी बहुत सारे बेंचमार्क हैं, इसलिए मैं इसका एक लिंक छोड़ दूँगा,
00:06:17लेकिन मूल रूप से उनमें से बाकी दिखाते हैं कि OrbStack में असाधारण फाइल सिस्टम और छोटे फाइल प्रदर्शन हैं,
00:06:22लेकिन वे यह भी दिखाते हैं कि Apple कंटेनर्स Docker Desktop के बराबर, यदि बेहतर नहीं है तो।
00:06:27कुछ कैच (catch) हैं जिन्हें आप कंटेनर मशीनों का उपयोग करने से पहले जानना चाहेंगे,
00:06:30और पहला मेमोरी है। जैसा कि मैंने पहले उल्लेख किया है, मशीन डिफ़ॉल्ट रूप से आपके सिस्टम RAM के आधे पर सेट होती है,
00:06:35तो यह जानना उचित है कि यह वास्तव में इसे कभी वापस नहीं देता है। इसलिए यदि आपके पास
00:06:39कंटेनर में एक मेमोरी-गहन वर्कलोड है, शायद एक बड़े बिल्ड के दौरान, वह मेमोरी वास्तव में तब तक आयोजित की जाती है जब तक आप
00:06:43मशीन को रीस्टार्ट नहीं करते हैं। यह वास्तव में OrbStack के अनूठे लाभों में से एक है, जिसमें गतिशील
00:06:47मेमोरी है, जो उस अप्रयुक्त मेमोरी को वापस macOS में जारी करके मेमोरी उपयोग को कम करती है। जहाँ तक मैं जानता हूँ,
00:06:53कुछ और ऐसा नहीं करता है। दूसरा, GPU और USB पास-थ्रू भी नहीं है। मैंने उस GitHub पर
00:06:57दोनों के लिए खुले मुद्दे देखे हैं, तो शायद यह भविष्य में समर्थित हो जाएगा। तीसरा, ऐसा भी
00:07:02लगता है कि GUI ऐप्स चलाने के लिए थोड़ा जटिल है, जैसे शायद अगर आप Linux वर्शन का उपयोग करना चाहते हैं
00:07:06VS Code या अन्य केवल-Linux ऐप्स। यह निश्चित रूप से एक सहज अनुभव नहीं है, मैं शायद इसके लिए कुछ और उपयोग करूँगा।
00:07:11अंत में, एक सुरक्षा ट्रेड-ऑफ़ भी है क्योंकि, जैसा कि मैंने पहले बताया, वह होम डायरेक्टरी
00:07:15माउंट जो सब कुछ इतना सुविधाजनक बनाता है, डिफ़ॉल्ट रूप से रीड-राइट है, जिसका अर्थ है कि आप जो कुछ भी चलाते हैं
00:07:20उस Linux मशीन के अंदर वह आपकी SSH कुंजियों, आपके क्लाउड क्रेडेंशियल्स, और आपके Mac पर सब कुछ को छू सकता है।
00:07:25ऐसा लगता है कि आप वास्तव में माउंट को केवल रीड-ओनली पर सेट कर सकते हैं या इसे पूरी तरह बंद कर सकते हैं। कोई
00:07:29क्षमता नहीं है कि केवल एक विशिष्ट फ़ोल्डर को माउंट किया जा सके। कुल मिलाकर, Apple
00:07:33कंटेनर मशीनों को आज़माने के बाद, मैं शायद OrbStack के साथ रहूँगा क्योंकि यह बेहतर संसाधन प्रबंधन और अधिक सुविधाओं के साथ
00:07:37आज अधिक पॉलिश विकल्प जैसा लगता है, लेकिन मुझे पता है कि कुछ लोग पसंद नहीं करते हैं कि
00:07:40OrbStack का भुगतान करना पड़ता है यदि आप व्यावसायिक उपयोग चाहते हैं, तो OrbStack के बिना, मैं शायद
00:07:45Apple कंटेनर्स को Docker Desktop से चुनूंगा, और Klima भी है, जो एक और बेहतरीन
00:07:49विकल्प है। आप क्या उपयोग करते हैं? क्या यह OrbStack, Docker Desktop, या Lima है? मुझे नीचे कमेंट्स में
00:07:53बताएं, और जब आप वहाँ हों तो सब्सक्राइब करें, और हमेशा की तरह, अगले वीडियो में मिलते हैं।