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

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

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

  • تم تحديث مجموعة الأدوات ومتغير مكتبة التخصيص، التي تم تحريرها من الجيل المحتمل لحالة "الذعر" عند حدوث أخطاء، إلى إصدار Rust 1.60، الذي يعمل على استقرار الدعم لوضع "maybe_uninit_extra" المستخدم في تصحيحات kernel.
  • تمت إضافة القدرة على تشغيل الاختبارات من الوثائق (الاختبارات التي يتم استخدامها أيضًا كأمثلة في الوثائق)، من خلال تحويل وقت الترجمة للاختبارات المرتبطة بواجهة برمجة تطبيقات kernel إلى اختبارات KUnit التي يتم تنفيذها أثناء تحميل kernel.
  • لقد تم اعتماد متطلبات ألا تؤدي الاختبارات إلى تحذير Clippy linter، تمامًا مثل كود Rust kernel.
  • يُقترح التنفيذ الأولي لوحدة "الشبكة" مع وظائف الشبكة. كود الصدأ لديه حق الوصول إلى هياكل شبكة kernel مثل Namespace (استنادًا إلى بنية struct net kernel)، وSkBuff (struct sk_buff)، وTcpListener، وTcpStream (مقبس البنية)، وIpv4Addr (struct in_addr)، وSocketAddrV4 ( struct sockaddr_in) وما يعادلها من IPv6 .
  • يوجد دعم أولي لتقنيات البرمجة غير المتزامنة (async)، ويتم تنفيذها في شكل وحدة kasync. على سبيل المثال، يمكنك كتابة تعليمات برمجية غير متزامنة لمعالجة مآخذ توصيل TCP: async fn echo_server(stream: TcpStream) -> Result { Let mut buf = [0u8; 1024]؛ حلقة { Let n =stream.read(&mut buf).await?; إذا ن == 0 {return Ok(()); }stream.write_all(&buf[..n]).await?; } }
  • تمت إضافة وحدة net::filter لمعالجة عوامل تصفية حزم الشبكة. تمت إضافة مثالrust_netfilter.rs مع تطبيق عامل التصفية بلغة Rust.
  • تمت إضافة تطبيق كائن المزامنة البسيط smutex::Mutex، والذي لا يتطلب التثبيت.
  • تمت إضافة NoWaitLock، الذي لا ينتظر القفل أبدًا، وإذا كان مشغولاً بخيط آخر، فإنه يتسبب في الإبلاغ عن خطأ عند محاولة الحصول على القفل بدلاً من إيقاف المتصل.
  • تمت إضافة RawSpinLock، الذي تم تحديده بواسطة Raw_spinlock_t في النواة، لتطبيقه على الأقسام التي لا يمكن أن تكون خاملة.
  • تمت إضافة نوع ARef للمراجع إلى كائن يتم تطبيق آلية حساب المرجع عليه (يتم إعادة حسابه دائمًا).
  • الواجهة الخلفيةrustc_codegen_gcc، والتي تسمح لك باستخدام مكتبة libgccjit من مشروع مجلس التعاون الخليجي كمولد كود في Rustc لتزويد Rustc بدعم البنى والتحسينات المتاحة في مجلس التعاون الخليجي، نفذت القدرة على تشغيل مترجم Rustc. ترقية المترجم تعني القدرة على استخدام منشئ الأكواد المستندة إلى دول مجلس التعاون الخليجي في Rustc لبناء المترجم Rustc نفسه. بالإضافة إلى ذلك، يتضمن الإصدار الأخير من مجلس التعاون الخليجي 12.1 إصلاحات لـ libgccjit اللازمة لكي يعملrusc_codegen_gcc بشكل صحيح. الاستعدادات جارية لتوفير القدرة على تثبيت Rustc_codegen_gcc باستخدام الأداة المساعدة Rustup.
  • تمت الإشارة إلى التقدم المحرز في تطوير الواجهة الأمامية لدول مجلس التعاون الخليجي من خلال تنفيذ مترجم لغة Rust استنادًا إلى دول مجلس التعاون الخليجي. يوجد حاليًا مطوران بدوام كامل يعملان على gccrs.

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

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

المصدر: opennet.ru

إضافة تعليق