هشتمین نسخه از وصله های هسته لینوکس با پشتیبانی از زبان Rust

Miguel Ojeda، نویسنده پروژه Rust-for-Linux، انتشار کامپوننت های v8 را برای توسعه درایورهای دستگاه به زبان Rust برای بررسی توسط توسعه دهندگان هسته لینوکس پیشنهاد کرد. این نسخه اصلاح شده وصله ها با در نظر گرفتن نسخه اول است که بدون شماره نسخه منتشر شده است. پشتیبانی Rust آزمایشی در نظر گرفته می شود، اما قبلاً در شاخه لینوکس-next گنجانده شده است، ادعا می کند که در نسخه پاییز 5.20/6.0 ادغام شده است و به اندازه کافی بالغ است تا کار ایجاد لایه های انتزاعی بر روی زیرسیستم های هسته و همچنین نوشتن درایورها را آغاز کند. و ماژول ها بودجه این توسعه توسط Google و ISRG (گروه تحقیقاتی امنیت اینترنت) که بنیانگذار پروژه Let's Encrypt است و HTTPS و توسعه فناوری‌هایی را برای بهبود امنیت اینترنت ترویج می‌کند، تامین می‌شود.

در نسخه های جدید:

  • جعبه ابزار و گونه‌ای از کتابخانه تخصیص، بدون ایجاد حالت "هراس" در هنگام بروز خطا، برای انتشار Rust 1.62 به روز شده است. در مقایسه با نسخه استفاده شده قبلی، جعبه ابزار Rust پشتیبانی از عملکرد const_fn_trait_bound مورد استفاده در وصله‌های هسته را تثبیت کرده است.
  • کد اتصال به یک بسته جعبه جداگانه "bindings" جدا می شود، که اگر تغییرات فقط در "هسته" بسته اصلی ایجاد شود، بازسازی را ساده می کند.
  • پیاده سازی کلان “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]Handler و [Threaded]Registration، اضافه شده است.
  • ماکرو رویه‌ای "#[vtable]" اضافه شد تا کار با جداول نشانگرهای تابع، مانند ساختار file_operations را آسان‌تر کند.
  • اضافه شدن اجرای لیست های پیوندی دوطرفه "unsafe_list::List".
  • پشتیبانی اولیه برای RCU (Read-copy-update) و Guard type اضافه شد تا بررسی شود آیا قفل خواندن به رشته فعلی متصل است یا خیر.
  • اضافه شدن تابع Task::spawn() برای ایجاد و شروع خودکار رشته های هسته. همچنین متد Task::wake_up() را اضافه کرد.
  • یک ماژول تاخیر اضافه شده است که به شما امکان می دهد از تاخیرها استفاده کنید (یک wrapper روی msleep()).

تغییرات پیشنهادی استفاده از Rust را به عنوان زبان دوم برای توسعه درایورها و ماژول‌های هسته ممکن می‌سازد. پشتیبانی Rust به عنوان گزینه ای ارائه می شود که به طور پیش فرض فعال نیست و منجر به گنجاندن Rust در بین وابستگی های ساخت مورد نیاز برای هسته نمی شود. استفاده از Rust برای توسعه درایورها به شما این امکان را می‌دهد که با کمترین تلاش، درایورهای ایمن‌تر و بهتری ایجاد کنید، بدون مشکلاتی مانند دسترسی به یک ناحیه حافظه پس از آزاد شدن، عدم ارجاع اشاره‌گرهای تهی، و بیش از حد بافر.

ایمنی حافظه در Rust در زمان کامپایل از طریق بررسی مرجع، پیگیری مالکیت شی و طول عمر شی (محدوده)، و همچنین از طریق ارزیابی صحت دسترسی به حافظه در طول اجرای کد ارائه می شود. Rust همچنین محافظت در برابر سرریز اعداد صحیح را فراهم می کند، نیاز به مقداردهی اولیه اجباری مقادیر متغیر قبل از استفاده دارد، خطاها را در کتابخانه استاندارد بهتر مدیریت می کند، مفهوم مراجع و متغیرهای غیرقابل تغییر را به طور پیش فرض اعمال می کند، تایپ استاتیک قوی برای به حداقل رساندن خطاهای منطقی ارائه می دهد.

منبع: opennet.ru

اضافه کردن نظر