آبل قامت للتو ببناء نظام WSL للماك (أجهزة الحاويات)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

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الأسفل، ولا تنسَ الاشتراك، وكما دائماً، أراكم في المرة القادمة.

Key Takeaway

توفر أداة Container Machines من أبل بديلاً خفيف الوزن لـ Docker على أجهزة Apple Silicon، حيث تستخدم آلات افتراضية معزولة لتقديم أداء عالٍ في معالجة المهام، رغم افتقارها حالياً لإدارة الذاكرة الديناميكية.

Highlights

  • تُعد أداة (Container Machines) بيئة لينكس خفيفة الوزن ومستمرة تعمل على نظام macOS، وهي مبنية على إطار عمل أبل للتحكم في الحاويات.

  • تسمح هذه الأداة بمشاركة ملفات المستخدم والمجلد الرئيسي بين نظام الماك وبيئة لينكس بشكل تلقائي للقراءة والكتابة.

  • تخصص الأداة افتراضياً نصف ذاكرة الوصول العشوائي (RAM) للنظام الخاص بك، ولا يتم إعادتها إلى الماك حتى إعادة تشغيل الحاوية.

  • تستخدم كل حاوية آلة افتراضية مستقلة بدلاً من تشغيل جميع الحاويات داخل آلة واحدة كبيرة، مما يعزز العزل الأمني والخصوصية.

  • تظهر اختبارات الأداء تفوق أداة أبل في إنتاجية الذاكرة (Memory Throughput) مقارنة بـ Docker Desktop وOrbStack، رغم تفوق OrbStack في أوقات بدء التشغيل وإدارة الموارد الديناميكية.

Timeline

إعداد واستخدام Container Machines

  • تعتمد الأداة على ملفات Dockerfile وتتوافق مع معظم صور OCI.
  • يتم إدارة الحاويات عبر أوامر برمجية بسيطة مثل الإنشاء، القائمة، والتشغيل.
  • تشارك الحاويات مجلد المستخدم الخاص بالماك تلقائياً لسهولة التطوير والاختبار.

تُبنى آلات الحاويات باستخدام أوامر سطر الأوامر التي تسمح بتعريف اسم الآلة، وتحديد الصورة، وتخصيص الموارد. توفر الأداة بيئة تفاعلية تسمح بالتبديل بين بيئات توزيعات لينكس المختلفة، مثل أوبونتو أو ألبين، على نفس الجهاز. تسهل مشاركة نظام الملفات تطوير البرمجيات على الماك واختبارها مباشرة في بيئة لينكس دون الحاجة لنقل الملفات يدوياً.

الهيكل التقني والمقارنة بالأدوات الأخرى

  • تعتمد أبل على إطار عمل الافتراضية الخاص بها بدلاً من نموذج الآلة المشتركة التقليدي.
  • يوفر نهج أبل عزلاً أكبر لكل حاوية كآلة افتراضية كاملة.
  • تتفوّق الأداة في المهام أحادية الخيط وإنتاجية الذاكرة وفقاً لمعايير أداء RepoFlow.

على عكس Docker Desktop الذي يشغل حاويات متعددة داخل آلة افتراضية واحدة، تخصص أداة أبل آلة افتراضية خفيفة لكل حاوية. هذا التصميم يهدف إلى تحسين الأمان عبر عزل الحاويات وخصوصية البيانات. تُظهر المقارنات أن الأداء العام مشابه للأدوات الأخرى، مع تفوق أبل في التعامل مع الذاكرة وتفوق OrbStack في زمن بدء التشغيل للمهام البسيطة.

القيود والملاحظات التشغيلية

  • تستهلك الأداة نصف ذاكرة الجهاز المخصصة بشكل ثابت دون إعادة التدوير الديناميكي.
  • يوجد حالياً نقص في دعم كرت الشاشة (GPU) وتوصيلات USB.
  • تسمح المشاركة التلقائية للقراءة والكتابة بالوصول إلى بيانات المستخدم الحساسة من داخل بيئة لينكس.

تتطلب الأداة وعياً ببعض القيود التقنية مثل عدم وجود ذاكرة ديناميكية، وهو ما يميز OrbStack عن غيرها. تمثل إعدادات الوصول التلقائي للملفات مخاطرة أمنية لأنها تمنح الحاويات وصولاً كاملاً لمفاتيح SSH وبيانات الاعتماد. يُنصح باللجوء إلى بدائل أخرى مثل OrbStack أو Lima للمشاريع التي تتطلب ميزات متقدمة أو إدارة موارد أكثر كفاءة.

Community Posts

View all posts