إطار عمل لكتابة برامج تشغيل آمنة لنواة Linux في Rust

جوش تريبليت، الذي يعمل في شركة Intel وعضو في اللجنة المشرفة على تطوير Crates.io، يتحدث في قمة التكنولوجيا مفتوحة المصدر المقدمة مجموعة عمل تهدف إلى جعل لغة Rust تتكافئ مع لغة C في مجال برمجة الأنظمة.

في مجموعة عمل قيد الإنشاء، سيقوم مطورو Rust، جنبًا إلى جنب مع مهندسين من شركة Intel، بإعداد مواصفات تحدد الوظائف التي يجب تنفيذها في Rust لبرمجة الأنظمة. غالبًا ما تتطلب برمجة النظام معالجة منخفضة المستوى، مثل تنفيذ تعليمات المعالج المميزة والحصول على معلومات مفصلة حول حالة المعالج. من بين الميزات المماثلة التي تم تطويرها بالفعل لـ Rust، تمت الإشارة إلى دعم الهياكل غير المسماة والاتحادات وإدراج لغة التجميع (الماكرو "asm!") وتنسيق رقم النقطة العائمة BFLOAT16.

يعتقد جوش أن مستقبل برمجة النظام ينتمي إلى Rust، وأن لغة C في الواقع الحديث تطالب بالمكان الذي احتلته الجمعية في السنوات الماضية. الصدأ
لا يخفف المطورين من المشاكل الكامنة في لغة C التي تنشأ بسبب العمل على مستوى منخفض مع الذاكرة فحسب، بل يوفر أيضًا الفرصة لاستخدامها في تطوير نماذج البرمجة الحديثة.

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

أبدى جريج كرواه-هارتمان، المسؤول عن الحفاظ على الفرع المستقر لنواة Linux، استعداده لإضافة إطار عمل لتطوير برامج التشغيل بلغة Rust إلى النواة إذا كانت تتمتع بمزايا حقيقية مقارنة بـ C، على سبيل المثال، ستوفر الأمان الارتباطات عبر Kernel API. بالإضافة إلى ذلك، يعتبر جريج إطار العمل هذا كخيار فقط، وغير نشط افتراضيًا، حتى لا يتم تضمين Rust كاعتمادية بناء على النواة.

اتضح أن عدة فرق تعمل بالفعل في هذا الاتجاه. على سبيل المثال، مطورو شركة "Fish in a Barrel" معد مجموعة أدوات لكتابة وحدات قابلة للتحميل لنواة Linux بلغة Rust، باستخدام مجموعة من الطبقات المجردة فوق الواجهات وهياكل النواة لزيادة الأمان. يتم إنشاء الطبقات تلقائيًا استنادًا إلى ملفات رأس kernel الموجودة باستخدام الأداة المساعدة bindgen. يستخدم Clang لبناء الطبقات. بالإضافة إلى الطبقات البينية، تستخدم الوحدات المجمعة الحزمة staticlib.

موازي هذا تطوير ويركز مشروع آخر على تطوير برامج التشغيل للأنظمة المدمجة وأجهزة إنترنت الأشياء، والذي يستخدم أيضًا bindgen لإنشاء طبقات بناءً على ملفات رأس kernel. يتيح لك إطار العمل تحسين أمان برنامج التشغيل دون إجراء تغييرات على النواة - فبدلاً من إنشاء مستويات عزل إضافية لبرامج التشغيل في النواة، يُقترح حظر المشكلات في مرحلة التجميع، باستخدام لغة Rust الأكثر أمانًا. من المفترض أن مثل هذا النهج قد يكون مطلوبًا من قبل الشركات المصنعة للمعدات التي تقوم بتطوير برامج تشغيل خاصة على عجل دون إجراء تدقيق مناسب.

لم يتم تنفيذ جميع الوظائف المقصودة بعد، ولكن إطار العمل مناسب تمامًا للعمل بالفعل وتم استخدامه لكتابة برنامج تشغيل عامل لوحدة تحكم LAN9512 USB Ethernet المتوفرة في لوحة Raspberry Pi 3. برنامج تشغيل smsc95xx الحالي، المكتوب بواسطة لغة سي. تجدر الإشارة إلى أن حجم الوحدة والحمل الزائد من مكونات وقت التشغيل عند تطوير برنامج تشغيل في Rust يكون غير مهم، مما يسمح باستخدام إطار العمل للأجهزة ذات الموارد المحدودة.

المصدر: opennet.ru

إضافة تعليق