الإصدار الثاني من التصحيحات لنواة Linux مع دعم لغة Rust

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

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

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

أبرز التغييرات الملحوظة في الإصدار الجديد من التصحيحات:

  • يتم تحرير رمز تخصيص الذاكرة من احتمالية إنشاء حالة "ذعر" عند حدوث أخطاء مثل نفاد الذاكرة. تم تضمين متغير من مكتبة Rust alloc، والذي يعيد صياغة التعليمات البرمجية للتعامل مع حالات الفشل، ولكن الهدف النهائي هو نقل جميع الميزات اللازمة للنواة إلى الإصدار الرئيسي من alloc (تم بالفعل إعداد التغييرات ونقلها إلى الإصدار القياسي مكتبة الصدأ).
  • بدلاً من الإصدارات الليلية، يمكنك الآن استخدام الإصدارات التجريبية والإصدارات المستقرة من مترجم Rustc لتجميع نواة بدعم Rust. حاليًا، يتم استخدام Rustc 1.54-beta1 كمترجم مرجعي، ولكن بعد إصدار الإصدار 1.54 في نهاية الشهر، سيتم دعمه كمترجم مرجعي.
  • تمت إضافة دعم لكتابة الاختبارات باستخدام السمة القياسية "#[test]" لـ Rust والقدرة على استخدام doctests لتوثيق الاختبارات.
  • تمت إضافة دعم لبنيتي ARM32 وRISCV بالإضافة إلى x86_64 وARM64 المدعومة مسبقًا.
  • تطبيقات محسنة لـGC Rust (الواجهة الأمامية لـGCC لـRust) وrustc_codegen_gcc (الواجهة الخلفية لـrustc لـGCC)، والتي تجتاز الآن جميع الاختبارات الأساسية.
  • يُقترح مستوى جديد من التجريد للاستخدام في برامج Rust الخاصة بآليات kernel المكتوبة بلغة C، مثل الأشجار ذات اللون الأحمر والأسود والكائنات المُعدة مرجعيًا وإنشاء واصف الملف والمهام والملفات ومتجهات الإدخال/الإخراج.
  • قامت مكونات تطوير برامج التشغيل بتحسين الدعم لوحدة file_operations، والوحدة النمطية! الماكرو، وتسجيل الماكرو، وبرامج التشغيل البدائية (التحقيق والإزالة).
  • يدعم Binder الآن تمرير واصفات الملفات وخطافات LSM.
  • يُقترح مثال أكثر وظيفية لبرنامج تشغيل Rust - bcm2835-rng لمولد الأرقام العشوائية للأجهزة في لوحات Raspberry Pi.

بالإضافة إلى ذلك، نذكر بعض مشاريع الشركات المتعلقة باستخدام Rust في النواة:

  • أعربت Microsoft عن اهتمامها بالمشاركة في العمل على دمج دعم Rust في Linux kernel وهي مستعدة لتوفير تطبيقات برنامج التشغيل لـ Hyper-V على Rust في الأشهر المقبلة.
  • تعمل ARM على تحسين دعم Rust للأنظمة المستندة إلى ARM. لقد اقترح مشروع Rust بالفعل تغييرات من شأنها أن تجعل أنظمة ARM 64 بت بمثابة منصة من المستوى الأول.
  • تقدم Google الدعم مباشرة لمشروع Rust لنظام التشغيل Linux، وتقوم بتطوير تطبيق جديد لآلية الاتصال بين العمليات Binder في Rust، وتدرس إمكانية إعادة صياغة برامج التشغيل المختلفة في Rust. من خلال ISRG (مجموعة أبحاث أمن الإنترنت)، قدمت Google التمويل للعمل على دمج دعم Rust في نواة Linux.
  • قامت شركة IBM بتنفيذ دعم kernel لأنظمة Rust لأنظمة PowerPC.
  • قام مختبر LSE (مختبر أبحاث الأنظمة) بتطوير برنامج تشغيل SPI في Rust.

المصدر: opennet.ru

إضافة تعليق