آبل قامت للتو ببناء نظام WSL للماك (أجهزة الحاويات)
BBetter Stack
Computing/SoftwareInternet Technology
Transcript
00:00:00بعيداً عن كل ضجيج ذكاء أبل في مؤتمر WWDC لهذا العام،
00:00:03أطلقت أبل بهدوء نسختها الخاصة من نظام ويندوز الفرعي للينكس تحت اسم Container
00:00:06Machines. تمنحك هذه الأداة بيئة لينكس خفيفة الوزن ومستمرة على جهاز الماك الخاص بك بطريقة
00:00:10سهلة الاستخدام للغاية، وهي مبنية فعلياً فوق مشروع الحاويات الخاص بأبل الذي
00:00:14أطلقته العام الماضي كبديل لـ Docker، وكلها بالطبع مُحسّنة للعمل على شرائح Apple
00:00:18Silicon. لذا دعونا نلقي نظرة على ماهية Container Machines وكيف تعمل،
00:00:21وكذلك تقديم ملخص سريع لحاويات أبل لمن فاتهم الأمر.
00:00:29سأبدأ بإعداد “آلة حاوية” (Container Machine)، ثم سأشرح كيف
00:00:32يعمل كل هذا بعد قليل. الجهاز الذي أريده سيكون بيئة أوبونتو لينكس. لذا أنا ببساطة
00:00:37لدي ملف Dockerfile يحتوي على صورة أوبونتو، وبعض الإعدادات هنا لتثبيت بعض الأدوات
00:00:41الشائعة. سيعمل هذا مع أي صورة متوافقة مع OCI، لذا فمعظم الصور التي
00:00:46تستخدمها مع Docker ستعمل هنا. الشيء الوحيد الذي يجب أن تتضمنه لتكون آلة افتراضية هو برنامج
00:00:50تهيئة النظام (system initialization). بمجرد حصولنا على ملف Dockerfile الذي نريد استخدامه للآلة الافتراضية، كل ما علينا فعله هو
00:00:54بناؤه باستخدام أداة الحاويات من أبل. يمكنك رؤية الأمر الذي أستخدمه هنا،
00:00:58بما أن ملف Dockerfile موجود في هذا المجلد، سأقوم ببساطة بتسميته (tag) كآلة
00:01:01أوبونتو محلية، ويمكننا الضغط على Enter والبدء في البناء. أداة الحاويات،
00:01:05بالمناسبة، تعمل على نظام macOS 26 فما فوق، ويمكنك تثبيتها من GitHub ببساطة عبر الانتقال إلى
00:01:09المستودع، ثم قسم الإصدارات (releases)، وتنزيل أحدث حزمة. يبدو أن بناء صورتي
00:01:13قد اكتمل هنا، ويمكنك ملاحظة أنها مشابهة جداً لـ Docker. إنها مجرد بناء صورة OCI.
00:01:17هذا كل ما نحتاجه لآلة الحاوية، لذا يمكننا ببساطة تشغيل الأمر container machine create،
00:01:21ونحدد الصورة التي نريدها للآلة، ونعطيها اسماً مألوفاً،
00:01:24وسأقوم أيضاً بتعيينها كافتراضية، بحيث يفترض أي أمر أقوم بتشغيله أنني
00:01:27أستخدم آلة الحاوية هذه، ولا أضطر لتحديدها بالاسم. بعد ذلك نضغط على
00:01:31Enter، وخلال ثوانٍ معدودة تصبح جاهزة. يمكننا رؤية القليل من المعلومات حول
00:01:35آلة الحاوية التي أنشأتها للتو عبر تنفيذ container machine list. هنا يمكنك رؤية
00:01:38آلة أوبونتو التي أنشأتها، وعنوان IP، و7 وحدات معالجة مركزية، و18 جيجابايت من الذاكرة. الذاكرة ووحدة المعالجة
00:01:44قابلتان للتعديل بالطبع، ولكن افتراضياً ستستخدم نصف ذاكرة جهاز الماك الخاص بك. للبدء فعلياً
00:01:48في استخدام آلة الحاوية، كل ما عليك فعله هو تنفيذ container machine run،
00:01:51ويمكنك ترك هذا فارغاً إذا كنت تريد الدخول إلى الطرفية التفاعلية، أو يمكنك ببساطة
00:01:54إضافة أمر بعده إذا كنت تريد تشغيله على جهاز لينكس. في هذه الحالة، يمكنك رؤية أنني
00:01:58ضغطت على Enter، والآن أنا في طرفية تفاعلية داخل بيئة لينكس. يمكننا التأكد
00:02:02من ذلك عبر تنفيذ أمر مثل uname -a، وسترى أنه يطبع Linux Ubuntu،
00:02:06على عكس ما يحدث عند تشغيله على الماك حيث نحصل على Darwin. أحد الأشياء الرائعة حول
00:02:10آلات الحاويات هو أنها تحتوي على مشاركة مستخدم تلقائية، فمستخدمي تم نسخه بالفعل من الماك
00:02:14إلى بيئة لينكس، وينطبق الشيء نفسه على مجلد المستخدم (home directory). سيتم تثبيت
00:02:18مجلد المستخدم بالكامل للقراءة والكتابة، لذا لدي وصول داخل بيئة لينكس إلى جميع الملفات التي
00:02:23أمتلكها على الماك. يمكنك رؤية المكان الذي شغلت فيه container run، لقد نقلني مباشرة إلى هذا الملف
00:02:27في بيئة لينكس، ولدينا بالفعل تلك الملفات هناك. كما أن لها وحدة تخزين (volume) خاصة بها
00:02:31أيضاً، لذا إذا انتقلنا إلى المجلد الرئيسي (home directory) لآلة أوبونتو هذه، يمكنك رؤية أنه لا يوجد حالياً
00:02:35شيء هناك، على الرغم من وجود ملفات على الماك، وذلك لأن هذه هي بيئة
00:02:39لينكس، وهذا هو المكان الذي تضع فيه ملفات الإعداد الخاصة بك (dotfiles) التي تخص لينكس. مشاركة المجلدات
00:02:43تجعل من السهل جداً تطوير شيء ما على الماك باستخدام أدواتك المعتادة، وربما حتى بعض
00:02:48الأدوات المتوافقة فقط مع macOS، ثم التبديل ببساطة إلى لينكس عندما تحتاج إلى اختبار شيء ما.
00:02:52على سبيل المثال، لدي تطبيق BUN بسيط هنا، وأريد تجميعه في ملف
00:02:56تنفيذي يعمل على لينكس، لكن لا يمكنني اختبار لينكس على macOS، لذا عند تشغيل هذا،
00:03:01لا أعرف ما إذا كان قد نجح أم لا. إذا انتقلنا إلى آلة الحاوية،
00:03:04سترى أنه يمكنني ببساطة تشغيل الأمر فوراً. لست مضطراً لنقل ملفات أو أي شيء،
00:03:08بفضل مشاركة نظام الملفات نفسه. إذا ضغطت على Enter هنا، يعمل الأمر بشكل جيد.
00:03:12كان هذا التطبيق مجرد خادم ويب بسيط مع صفحة الويب هذه، التي تطبع النظام الذي
00:03:16تعمل عليه، فهي تعمل حالياً على أوبونتو 24. يمكنك أيضاً رؤية اشتراك (subscribe) يظهر
00:03:20حولي، وهو شيء يجب أن تفعله بالتأكيد. الآن كنت أجرب تشغيل خادم تطوير BUN
00:03:23على بيئة لينكس، وكل شيء يعمل، وهو ما يمكننا رؤيته هنا،
00:03:27إنه يعمل على BUN dev، وهو غير مجمّع. لكن إذا قمت بتعديل أحد ملفات المصدر من الماك
00:03:31هنا، لنقل مثلاً “hello” بدلاً من “subscribe”، ألاحظ أن خاصية إعادة التحميل السريع (hot reloading) لا
00:03:35تبدو أنها تلتقط هذا السلوك، وأضطر لإعادة تشغيل خادم تطوير BUN لتطبيق التغييرات.
00:03:39ها قد نجح الأمر، الآن مكتوب “hello”. أعتقد أن إعادة التحميل السريع ستعمل بنفس طريقة نقاط التوقف
00:03:43(breakpoints)، حيث لا تعمل في الواقع إذا كنت تستخدم نسخة الكود على macOS، لكن ما يمكنك فعله هو جعل
00:03:47محرر الأكواد الخاص بك يتصل بآلة الحاوية عبر SSH، ثم تحرير الملفات بتلك الطريقة، وبذلك
00:03:52ستعمل نقاط التوقف وإعادة التحميل السريع على الأرجح. لديهم بالفعل دليل تعليمي حول كيفية القيام بذلك
00:03:55في وثائقهم. هذا كل ما هناك لعرضه عندما يتعلق الأمر باستخدام
00:03:59آلة الحاوية. أعني، إنها مجرد بيئة أوبونتو الآن، وبصراحة التجربة الكاملة
00:04:03سلسة جداً. تجدر الإشارة أيضاً إلى أنك لست مقيداً بآلة واحدة فقط. يمكنك
00:04:08امتلاك آلة Alpine، وآلة أوبونتو، وآلة دبيان جنباً إلى جنب، بحيث يكون لديك توزيعة واحدة
00:04:12لكل هدف، وبصراحة هذا أمر رائع جداً إذا كنت تقوم بعمل يستهدف منصات متعددة. بالإضافة إلى ذلك، لأن هذه الآلات
00:04:17يمكنها بالفعل تشغيل SystemD حقيقي، يمكنك اختبار مكدس خدمة مناسب، مثل تشغيل Postgres
00:04:22كخدمة فعلية مع تطبيقك بجانبه، وسيتصرف النظام بالكامل مثل خادم لينكس الذي
00:04:26ستقوم بالنشر عليه. البساطة هي أحد مبادئ التصميم الأساسية التي
00:04:30كانت أبل تروج لها عند تطوير آلات الحاويات. أرادوا آلات افتراضية سريعة وخفيفة الوزن
00:04:34تتكامل مع سير عملك الحالي وسهلة جداً في التشغيل عند الحاجة، بالإضافة إلى كونها مستمرة
00:04:39مع مرور الوقت بحيث يمكنك إعداد بيئة تطوير كاملة تحتوي على جميع الأدوات التي
00:04:42تحتاجها عادةً وتكون جاهزة عند حاجتك إليها. مرة أخرى، الأمر مشابه جداً لما كان نظام ويندوز الفرعي
00:04:47للينكس يحاول تحقيقه. أما بالنسبة لكيفية بناء كل هذا وكيفية مقارنته بـ Docker و
00:04:51OrbStack، فنحن بحاجة أولاً لفهم أداة الحاويات التي تم إطلاقها العام الماضي. هذه الأداة مكتوبة
00:04:55بـ Swift وتهدف لتكون بديلاً لـ Docker يمكنه تشغيل الحاويات، وهي تشغل أي صورة
00:04:59OCI قياسية، لذا أي شيء يمكنك سحبه من Docker Hub سيستمر في العمل. الشيء الفريد في
00:05:04نهج أبل هو أن كل حاوية تحصل على آلة افتراضية خفيفة الوزن خاصة بها من خلال إطار
00:05:08العمل الخاص بالافتراضية (virtualization framework)، بدلاً من مجموعة حاويات تتشارك في آلة لينكس واحدة كبيرة، وهو ما
00:05:13يفعله Docker Desktop. بعض فوائد هذا النهج يمكن أن تكون الأمان، لأن كل حاوية تمتلك
00:05:17خصائص العزل الخاصة بآلة افتراضية كاملة. ثم هناك أيضاً الخصوصية، لأنك تقوم فقط بتثبيت البيانات
00:05:22الضرورية في كل آلة افتراضية، بينما عندما يكون لديك آلة افتراضية مشتركة، فأنت في الواقع تقوم بتثبيت جميع البيانات في
00:05:27تلك الآلة المشتركة، لذا يمكن تثبيتها بشكل انتقائي في الحاويات الفردية. أخيراً، يمكن أيضاً أن يكون هناك
00:05:31فائدة في الأداء، حيث أن الحاويات التي تم إنشاؤها باستخدام حاويات أبل تتطلب ذاكرة أقل من
00:05:36آلة افتراضية كاملة، وأوقات الإقلاع متشابهة جداً مع Docker وأدوات أخرى. إذا نظرنا فعلياً إلى بعض
00:05:41المعايير التي أجراها RepoFlow هنا، مقارنة حاويات أبل مع OrbStack و Docker Desktop، يمكننا رؤية
00:05:46أن النتائج ليست سيئة في الواقع. من الصعب معرفة ذلك هنا، لكن حاويات أبل تحقق بالفعل
00:05:50أفضل أداء في معالجة المهام أحادية الخيط، لكن OrbStack كانت قريبة جداً، هناك فروق بسيطة، وتلك
00:05:55القصة نفسها تستمر عندما ننتقل إلى المهام متعددة الخيوط أيضاً، فكلها تعمل بشكل جيد جداً. حيث تبدو أبل
00:06:00وكأنها تتفوق قليلاً هو في إنتاجية الذاكرة (memory throughput)، مع احتلال OrbStack المركز الثاني و Docker
00:06:04Desktop المركز الأخير، ولكن عندما يتعلق الأمر بأوقات بدء التشغيل لحاوية صغيرة، يبدو أن أبل لا تزال تملك بعض
00:06:09العمل للقيام به هنا، ولكنها لا تزال أقل من ثانية، هي فقط أن Docker Desktop و OrbStack تفعلان ذلك في
00:06:14أقل من ربع ثانية. هناك المزيد من المعايير هنا، لذا سأترك رابطاً لهذا،
00:06:17ولكن في الأساس تظهر البقية أن OrbStack تمتلك أداءً استثنائياً لنظام الملفات والملفات الصغيرة،
00:06:22لكنها تظهر أيضاً أن حاويات أبل في نفس المستوى تقريباً، إن لم تكن أفضل من Docker Desktop.
00:06:27هناك بضع ملاحظات يجب أن تكون على دراية بها قبل استخدام آلات الحاويات،
00:06:30والأولى هي الذاكرة. كما ذكرت سابقاً، الآلة تخصص افتراضياً نصف ذاكرة الوصول العشوائي للنظام،
00:06:35لذا يجدر بك معرفة أنها لا تعيدها أبداً. فإذا كان لديك عبء عمل كثيف الذاكرة
00:06:39داخل الحاوية، ربما أثناء عملية بناء كبيرة، يتم الاحتفاظ بتلك الذاكرة حتى
00:06:43تعيد تشغيل الآلة. هذه في الواقع إحدى الميزات الفريدة لـ OrbStack، حيث تمتلك
00:06:47ذاكرة ديناميكية، والتي تقلل من استخدام الذاكرة عن طريق إعادة الذاكرة غير المستخدمة إلى macOS. على حد علمي،
00:06:53لا يوجد شيء آخر يفعل ذلك. ثانياً، لا يوجد دعم لتمرير كرت الشاشة (GPU) و USB.
00:06:57لقد رأيت مشكلات مفتوحة لكليهما في GitHub، لذا ربما سيتم دعمهما في المستقبل. ثالثاً، يبدو أيضاً
00:07:02أن الحصول على تطبيقات واجهة المستخدم الرسومية (GUI) للعمل أمر معقد قليلاً، مثل إذا أردت تشغيل نسخة لينكس من
00:07:06VS Code أو تطبيقات لينكس فقط. إنها بالتأكيد ليست تجربة سلسة، ربما كنت سأستخدم شيئاً آخر
00:07:11لهذا الغرض. أخيراً، هناك مقايضة أمنية لأنه، كما ذكرت سابقاً، تثبيت المجلد الرئيسي
00:07:15الذي يجعل كل شيء مريحاً للغاية هو للقراءة والكتابة بشكل افتراضي، مما يعني أن أي شيء تشغله
00:07:20داخل آلة لينكس هذه يمكنه الوصول إلى مفاتيح SSH، وبيانات اعتمادك السحابية، وكل شيء على
00:07:25جهاز الماك الخاص بك. يبدو أنه يمكنك فقط ضبط التثبيت على القراءة فقط أو إيقافه تماماً. لا توجد
00:07:29إمكانية لتثبيت مجلد معين فقط. بشكل عام، بعد تجربة آلات حاويات أبل،
00:07:33ربما سألتزم بـ OrbStack لأنها تبدو الخيار الأكثر صقلاً
00:07:37اليوم مع إدارة أفضل للموارد وميزات أكثر، لكني أعلم أن البعض لا يحب
00:07:40أن OrbStack مدفوعة إذا كنت تريد الاستخدام التجاري والمهني، لذا بدون OrbStack، ربما
00:07:45سأختار حاويات أبل على Docker Desktop، وهناك أيضاً Klima، وهي بديل رائع
00:07:49آخر. ماذا تستخدم أنت؟ هل هو OrbStack، أم Docker Desktop، أم Lima؟ أخبرني في التعليقات في
00:07:53الأسفل، ولا تنسَ الاشتراك، وكما دائماً، أراكم في المرة القادمة.