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

اقترح ميغيل أوجيدا، مؤلف مشروع Rust-for-Linux، إصدار مكونات v8 لتطوير برامج تشغيل الأجهزة بلغة Rust لينظر فيها مطورو Linux kernel. هذه هي النسخة المنقحة من التصحيحات، مع مراعاة الإصدار الأول، المنشور بدون رقم إصدار. يعتبر دعم الصدأ تجريبيًا، ولكنه مدرج بالفعل في فرع Linux التالي، ويدعي أنه تم دمجه في إصدار الخريف 5.20/6.0، وهو ناضج بما يكفي لبدء العمل على إنشاء طبقات تجريد على أنظمة kernel الفرعية، بالإضافة إلى كتابة برامج التشغيل والوحدات. يتم تمويل التطوير من قبل Google وISRG (مجموعة أبحاث أمن الإنترنت)، وهي مؤسس مشروع Let's Encrypt وتروج لـ HTTPS وتطوير التقنيات لتحسين أمان الإنترنت.

новой версии:

  • تم تحديث مجموعة الأدوات ومتغير مكتبة التخصيص، الخالية من الإنشاء المحتمل لحالة "الذعر" عند حدوث أخطاء، لإصدار Rust 1.62. بالمقارنة مع الإصدار المستخدم سابقًا، قامت مجموعة أدوات Rust بتثبيت دعم وظيفة const_fn_trait_bound المستخدمة في تصحيحات kernel.
  • يتم فصل كود الربط في حزمة منفصلة تسمى "الربطات"، مما يبسط عملية إعادة البناء إذا تم إجراء التغييرات على الحزمة الرئيسية "النواة" فقط.
  • تنفيذ الماكرو "concat_idents!" تمت إعادة كتابته في شكل ماكرو إجرائي غير مرتبط بوظيفة concat_idents ويسمح باستخدام المراجع للمتغيرات المحلية.
  • تمت إعادة كتابة الماكرو "static_assert!"، مما يسمح باستخدام "core::assert!()" في أي سياق بدلاً من الثوابت.
  • ماكرو "build_error!" تم تكييفه للعمل عند ضبط وضع "RUST_BUILD_ASSERT_{WARN,ALLOW}" للوحدات النمطية.
  • تمت إضافة ملف منفصل بالإعدادات "kernel/configs/rust.config".
  • تمت إعادة تسمية الملفات "*.i" التي تمت معالجتها في بدائل الماكرو إلى "*.rsi".
  • تم إيقاف دعم بناء مكونات Rust بمستويات تحسين مختلفة عن تلك المستخدمة في كود C.
  • تمت إضافة وحدة FS، والتي توفر روابط للعمل مع أنظمة الملفات. يتم توفير مثال لنظام ملفات بسيط مكتوب بلغة Rust.
  • تمت إضافة وحدة قائمة انتظار العمل للعمل مع قوائم انتظار النظام (توفر روابط عبر هياكل نواة Work_struct وworkqueue_struct).
  • استمر تطوير وحدة kasync مع تنفيذ أساليب البرمجة غير المتزامنة (async). تمت إضافة مثال لخادم TCP على المستوى الأساسي مكتوب بلغة Rust.
  • تمت إضافة القدرة على التعامل مع المقاطعات في لغة Rust باستخدام أنواع المعالجات [Threaded] وأنواع التسجيل [Threaded].
  • تمت إضافة الماكرو الإجرائي "#[vtable]" لتسهيل العمل مع جداول مؤشرات الوظائف، مثل بنية file_operations.
  • تمت إضافة تنفيذ القوائم المرتبطة ثنائية الاتجاه "unsafe_list::List".
  • تمت إضافة دعم أولي لـ RCU (تحديث القراءة والنسخ) ونوع Guard للتحقق مما إذا كان قفل القراءة مرتبطًا بالسلسلة الحالية.
  • تمت إضافة وظيفة Task::spawn() لإنشاء سلاسل عمليات kernel وبدء تشغيلها تلقائيًا. تمت إضافة طريقة Task::wake_up() أيضًا.
  • تمت إضافة وحدة تأخير تسمح لك باستخدام التأخيرات (مجمع فوق msleep()).

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

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

المصدر: opennet.ru

إضافة تعليق