أصدرت Microsoft تعليمات برمجية على Github تمكن المطورين من كتابة برامج تشغيل Windows في Rust، وهي خطوة أساسية نحو تمكين البرمجة الآمنة للذاكرة لنظام التشغيل. نشر Azure CTO Mark Russinovich الرابط على X مع التعليق: "نعمل بجد لتطوير برامج تشغيل Windows في Rust."
يعود هذا العمل إلى سنوات عديدة. في يوليو 2019، نشرت Microsoft Research أنها تريد "القضاء على فئة كاملة من الثغرات الأمنية قبل حدوثها"، ودافعت عن لغة آمنة للذاكرة، وقالت إن "واحدة من أحدث لغات برمجة الأنظمة الواعدة التي تلبي هذه المتطلبات هي لغة برمجة Rust التي اخترعتها Mozilla في الأصل".
تروج الشركة لـ Rust ليس فقط من أجل سلامة الذاكرة، ولكن أيضًا من أجل سلامة سباق البيانات - مما يضمن "عدم تمكن خيطين أو أكثر من الوصول إلى جزء من الذاكرة بشكل غير متزامن".
في عام 2022، أعلن روسينوفيتش: "لقد حان الوقت للتوقف عن بدء أي مشاريع جديدة في C/C++ واستخدام Rust عندما تحتاج إلى استخدام لغة غير لغة GC. ومن أجل السلامة والموثوقية، يجب على الصناعة أن تعلن أن هذه اللغات عفا عليها الزمن." تعد لغات GC أو اللغات المجمعة مثل C# وJava مناسبة للتطبيقات التجارية، ولكنها ليست مناسبة لرمز النظام الأساسي.
على الرغم من أن Windows مكتوب بشكل أساسي بلغة C وC++. "نظرًا لأسباب فنية وتاريخية مختلفة، تتم الآن كتابة معظم تعليمات وضع المستخدم بلغة C++، ولكن معظم تعليمات kernel لا تزال مكتوبة بلغة C." في عام 2018، قال ريموند تشين، مهندس برمجيات مايكروسوفت الذي شارك في تطوير البرمجيات لفترة طويلة، إنه على الرغم من ظهور Windows 11 منذ ذلك الحين، إلا أنه لم تتم إعادة كتابة نظام التشغيل عند تطوير الإصدارات الجديدة. لا تزال مجموعة أدوات برنامج تشغيل Windows التي يستخدمها مصنعو الأجهزة لتشغيل أجهزتهم في Windows عبارة عن مجموعة أدوات C/C++.
وفقًا لملاحظات الإصدار الخاصة بمجموعة أدوات برنامج التشغيل الجديدة المستندة إلى Rust، فإنها تهدف إلى دعم كل من برامج تشغيل WDM (طراز برنامج تشغيل Windows) وWDF (إطار تشغيل Windows). تعد برامج تشغيل WDM ذات مستوى أدنى ومرتبطة بإحكام بنظام التشغيل، بينما تتفاعل برامج تشغيل WDF مع النظام من خلال مكتبات إطار العمل. يركز المستودع الأولي على WDK.
ويضيف الوصف: "لا يزال المشروع في المراحل الأولى من التطوير ولم يُنصح بعد باستخدامه تجاريًا. تشجع Microsoft التجريب والتعليقات، مع ملاحظة أنه يمكن للمطورين طلب التعليقات في منتدى مناقشة GitHub في المستودع."
السؤال المبكر هو كيفية التعامل مع الاستثناءات. قال أحد المطورين: "تعد معالجة الاستثناءات المنظمة جزءًا لا يتجزأ من تطوير Windows لنواة Windows (ونظام التشغيل ككل)، وهي عقبة حقيقية أمام جعل Rust حقيقة واقعة لتطوير Windows kernel. ليس لدى Rust أي استثناءات، فهو يفضل استخدام متغيرات النتائج للإبلاغ عن الأخطاء القابلة للاسترداد، وفي الأخطاء غير القابلة للاسترداد يتم الخروج مع فشل التعطل. في كود kernel، مثل هذا التعطل غير مرغوب فيه لأنه سيؤدي إلى تعطل النظام ككل."
يقتبس المطور جوني شو LinuxTorvalds في Linux kernel (الذي يستخدم أيضًا Rust): "لأن كود kernel يختلف عن أدوات نظام مساحة المستخدم العشوائية. يجب ألا يتسبب استنفاد الذاكرة في إحباطها. بل يحتاج فقط إلى التسبب في إرجاع خطأ." يرى تورفالدس أن هذه "مشكلة أساسية".
تتضمن التعليمات البرمجية المبكرة في مستودع Microsoft الجديد التعليقات التالية:
// FIXME: هل يجب أن يتم التحقق من هذا الخلل عبر KeBugCheckEx؟
توضح هذه المشكلة أن إدخال Rust في تعليمات Windows البرمجية الأساسية ليس بنفس سهولة إضافة روابط لغة Rust إلى WDKAPI. ومع ذلك، كانت الاستجابة الأولية إيجابية بشكل عام. تمثل مشكلات سلامة الذاكرة نسبة كبيرة من مشكلات الأمان والاستقرار في Windows، لذا يعد اعتماد Rust حلاً قابلاً للتطبيق.