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

میگوئل اوجدا، نویسنده پروژه Rust-for-Linux، نسخه پنجم اجزای سازنده برای توسعه درایورهای دستگاه به زبان Rust را برای بررسی توسط توسعه دهندگان هسته لینوکس پیشنهاد کرده است. پشتیبانی Rust تجربی در نظر گرفته می شود، اما در حال حاضر در شاخه لینوکس-next گنجانده شده است و به اندازه کافی برای شروع کار بر روی ایجاد لایه های انتزاعی بر روی زیرسیستم های هسته، و همچنین نوشتن درایورها و ماژول ها توسعه یافته است. بودجه این توسعه توسط Google و ISRG (گروه تحقیقاتی امنیت اینترنت) که بنیانگذار پروژه Let's Encrypt است و HTTPS و توسعه فناوری‌هایی را برای بهبود امنیت اینترنت ترویج می‌کند، تامین می‌شود.

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

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

نسخه جدید وصله ها همچنان به حذف نظرات مطرح شده در بحث ویرایش های اول، دوم، سوم و چهارم پچ ها ادامه می دهد. در نسخه جدید:

  • تست مؤلفه برای پشتیبانی Rust بر اساس ربات 0DAY/LKP با پشتیبانی اینتل به سیستم یکپارچه سازی پیوسته اضافه شده است و انتشار گزارش های آزمایشی آغاز شده است. ما در حال آماده شدن برای ادغام پشتیبانی Rust در سیستم تست خودکار KernelCI هستیم. آزمایش بر اساس GitHub CI به استفاده از کانتینرها منتقل شده است.
  • ماژول‌های هسته Rust از نیاز به تعریف ویژگی‌های جعبه «#![no_std]» و «#![feature(…)] رها شده‌اند.
  • پشتیبانی از اهداف مونتاژ تک (o، .s، .ll و .i) اضافه شده است.
  • دستورالعمل‌های کد قوانینی را برای جداسازی نظرات (“//”) و مستندسازی کد (“///”) تعریف می‌کنند.
  • اسکریپت is_rust_module.sh دوباره کار شده است.
  • اضافه شدن پشتیبانی برای همگام سازی استاتیک (متغیر مشترک جهانی) بر اساس پیاده سازی "CONFIG_CONSTRUCTORS".
  • مدیریت قفل ساده شده است: Guard و GuardMut ترکیب شده و یک نوع پارامتر شده است.
  • امکان تعریف پارامترهای اضافی هنگام ثبت دستگاه ها وجود دارد.
  • انتزاع "RwSemaphore" اضافه شده است که به عنوان یک پوشش بر روی ساختار rw_semaphore C عمل می کند.
  • برای استفاده از mmap، یک ماژول mm جدید و یک انتزاع VMA (یک پوشش بر روی ساختار vm_area_struct) اضافه شده است.
  • درایور GPIO PL061 به استفاده از ماکرو «dev_*!» تغییر یافته است.
  • یک پاکسازی کلی از کد انجام شد.

منبع: opennet.ru

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