میگوئل اوجدا، نویسنده پروژه Rust-for-Linux، نسخه به روز شده کامپوننت ها را برای توسعه درایورهای دستگاه به زبان Rust برای بررسی توسط توسعه دهندگان هسته لینوکس پیشنهاد کرد. پشتیبانی Rust آزمایشی در نظر گرفته میشود، اما قبلاً برای گنجاندن در شاخه بعدی لینوکس توافق شده است. نسخه جدید نظراتی را که در هنگام بحث در مورد نسخه اول وصله ها ایجاد شده بود حذف می کند. لینوس توروالدز قبلاً به بحث ملحق شده و تغییر منطق برای پردازش برخی عملیات بیت را پیشنهاد کرده است.
به یاد بیاورید که تغییرات پیشنهادی استفاده از Rust را به عنوان زبان دوم برای توسعه درایورها و ماژولهای هسته ممکن میسازد. پشتیبانی Rust بهعنوان گزینهای ارائه میشود که بهطور پیشفرض فعال نیست و باعث نمیشود که Rust بهعنوان یک وابستگی ساخت مورد نیاز برای هسته گنجانده شود. استفاده از Rust برای توسعه درایور به شما این امکان را میدهد که با کمترین تلاش، درایورهای ایمنتر و بهتری ایجاد کنید، بدون مشکلاتی مانند دسترسی به حافظه پس از آزادسازی، عدم ارجاع اشارهگر تهی، و بیش از حد بافر.
ایمنی حافظه در Rust در زمان کامپایل از طریق بررسی مرجع، پیگیری مالکیت شی و طول عمر شی (محدوده)، و همچنین از طریق ارزیابی صحت دسترسی به حافظه در طول اجرای کد ارائه می شود. Rust همچنین محافظت در برابر سرریز اعداد صحیح را فراهم می کند، نیاز به مقداردهی اولیه اجباری مقادیر متغیر قبل از استفاده دارد، خطاها را در کتابخانه استاندارد بهتر مدیریت می کند، مفهوم مراجع و متغیرهای غیرقابل تغییر را به طور پیش فرض اعمال می کند، تایپ استاتیک قوی برای به حداقل رساندن خطاهای منطقی ارائه می دهد.
قابل توجه ترین تغییرات در نسخه جدید پچ ها:
- کد تخصیص حافظه از امکان ایجاد حالت "هراس" در هنگام بروز خطاهایی مانند کمبود حافظه جلوگیری می کند. گونهای از کتابخانه Rust alloc گنجانده شده است که کد را دوباره کار میکند تا خرابیها را مدیریت کند، اما هدف نهایی انتقال تمام ویژگیهای مورد نیاز برای هسته به نسخه اصلی alloc است (تغییرات قبلاً آماده شده و به استاندارد منتقل شدهاند. کتابخانه Rust).
- به جای ساخت های شبانه، اکنون می توانید از نسخه های بتا و نسخه های پایدار کامپایلر rustc برای کامپایل یک هسته با پشتیبانی Rust استفاده کنید. در حال حاضر، rustc 1.54-beta1 به عنوان کامپایلر مرجع استفاده می شود، اما پس از انتشار نسخه 1.54 در پایان ماه، به عنوان کامپایلر مرجع پشتیبانی می شود.
- پشتیبانی برای نوشتن تست ها با استفاده از ویژگی استاندارد "#[test]" برای Rust و توانایی استفاده از doctests برای مستندسازی تست ها اضافه شده است.
- اضافه شدن پشتیبانی از معماری های ARM32 و RISCV علاوه بر x86_64 و ARM64 که قبلاً پشتیبانی می شد.
- اجرای بهبود یافته GCC Rust (GCC frontend for Rust) و rustc_codegen_gcc (rustc backend برای GCC) که اکنون تمام آزمایشات اولیه را پشت سر گذاشته است.
- سطح جدیدی از انتزاع برای استفاده در برنامههای Rust از مکانیسمهای هسته نوشته شده در C، مانند درختان قرمز-سیاه، اشیاء شمارش مرجع، ایجاد توصیفگر فایل، وظایف، فایلها و بردارهای ورودی/خروجی پیشنهاد شده است.
- اجزای توسعه درایور پشتیبانی از ماژول file_operations، ماکرو ماژول، ثبت ماکرو و درایورهای ابتدایی (کاوش و حذف) را بهبود بخشیده اند.
- Binder اکنون از ارسال توصیفگرهای فایل و قلاب LSM پشتیبانی می کند.
- یک مثال کاربردی تر از درایور Rust پیشنهاد شده است - bcm2835-rng برای مولد اعداد تصادفی سخت افزاری بردهای Raspberry Pi.
علاوه بر این، برخی از پروژه های شرکت های مرتبط با استفاده از Rust در هسته ذکر شده است:
- مایکروسافت برای مشارکت در کار برای ادغام پشتیبانی Rust در هسته لینوکس ابراز علاقه کرده است و آماده است تا در ماه های آینده پیاده سازی های درایور Hyper-V را در Rust ارائه دهد.
- ARM در حال تلاش برای بهبود پشتیبانی Rust برای سیستم های مبتنی بر ARM است. پروژه Rust قبلاً تغییراتی را پیشنهاد کرده است که سیستمهای ARM 64 بیتی را به پلتفرم Tier 1 تبدیل میکند.
- گوگل به طور مستقیم از پروژه Rust برای لینوکس پشتیبانی می کند، در حال توسعه یک پیاده سازی جدید از مکانیسم ارتباطی بین پردازشی Binder در Rust است، و در حال بررسی امکان کار مجدد درایورهای مختلف در Rust است. گوگل از طریق ISRG (گروه تحقیقاتی امنیت اینترنت)، بودجه ای را برای کار برای ادغام پشتیبانی Rust در هسته لینوکس فراهم کرد.
- IBM پشتیبانی هسته ای را برای Rust برای سیستم های PowerPC پیاده سازی کرده است.
- آزمایشگاه LSE (Systems Research Laboratory) یک درایور SPI در Rust ایجاد کرده است.
منبع: opennet.ru