پیشنهادی برای بحث در مورد اضافه کردن ابزارهای توسعه Rust به هسته لینوکس

نیک دیسانیر (نیک دزالنیرز) که در گوگل کار می کند تا ارائه دهد پشتیبانی ساخت هسته لینوکس با استفاده از کامپایلر Clang و همچنین کمک رفع اشکالات کامپایلر Rust، مطرح در یک کنفرانس برگزار کنید کنفرانس لوله کش لینوکس 2020 جلسه ای برای بحث در مورد امکان توسعه اجزای هسته در Rust. نیک در حال سازماندهی یک میکرو کنفرانس اختصاص داده شده به LLVM است و معتقد است که خوب است در مورد جنبه های فنی ادغام احتمالی پشتیبانی Rust در هسته بحث کنیم (او قبلاً یک نمونه اولیه برای KBuild آماده کرده است) و درک کنیم که آیا چنین پشتیبانی باید اصلا اضافه شود و چه محدودیت هایی در استفاده از Rust باید پذیرفته شود.

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

  • توسعه دهندگان شرکت "Fish in a Barrel" تهیه شده یک جعبه ابزار برای نوشتن ماژول های قابل بارگذاری برای هسته لینوکس به زبان Rust، با استفاده از مجموعه ای از لایه های انتزاعی بر روی رابط ها و ساختارهای هسته برای افزایش امنیت. لایه ها به طور خودکار بر اساس فایل های هدر هسته موجود با استفاده از ابزار تولید می شوند bindingen. Clang برای ساخت لایه ها استفاده می شود. علاوه بر لایه های میانی، ماژول های مونتاژ شده از بسته staticlib استفاده می کنند.
  • محققان دانشگاه چینی هنگ کنگ توسعه دهد پروژه ای برای توسعه درایورهای سیستم های جاسازی شده و دستگاه های اینترنت اشیاء در Rust، که همچنین از bindgen برای تولید لایه ها بر اساس فایل های هدر هسته استفاده می کند. این چارچوب به شما امکان می دهد بدون ایجاد تغییرات در هسته، امنیت درایور را بهبود بخشید - به جای ایجاد سطوح ایزوله اضافی برای درایورها در هسته، پیشنهاد می شود مشکلات را در مرحله کامپایل با استفاده از زبان Rust ایمن تر مسدود کنید. فرض بر این است که چنین رویکردی ممکن است مورد تقاضای سازندگان تجهیزات باشد که درایورهای اختصاصی را با عجله و بدون انجام ممیزی مناسب توسعه می دهند.
  • توسعه دهندگان چارچوب C2Rust برای پخش کد C به Rust، رفتار آزمایش‌هایی روی تبدیل ماژول‌های هسته با حداقل ویرایش دستی یکی از مشکلات ذکر شده استفاده در بسیاری از بخش‌های هسته کد است که از پسوندهای GCC استفاده می‌کند که هنوز در C2Rust پشتیبانی نمی‌شوند. برای حل این مشکل، C2Rust قصد دارد از ویژگی‌های GCC درون خطی، سرد، نام مستعار، استفاده شده و بخش پشتیبانی کند و همچنین قابلیت‌های اسمبلر درون خطی را گسترش دهد و مشکلات ساختارهایی را که هم تراز و هم بسته هستند (مثلا xregs_state) حل کند. . مشکلات مهمی که نیاز به کار دستی دارند عبارتند از: عدم توانایی در ترجمه ماکروهای غیر پیش پا افتاده C به ماکروهای Rust و نیاز به تعریف مجدد انواع، زیرا C2Rust انواع C را به تعاریف در بسته libc ترجمه می کند، اما این بسته نمی تواند در ماژول های هسته استفاده شود.

منبع: opennet.ru

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