چارچوبی برای نوشتن درایورهای امن برای هسته لینوکس در Rust

جاش تریپلت، که در اینتل کار می کند و در کمیته نظارت بر توسعه Crates.io است، در اجلاس فناوری منبع باز سخنرانی می کند. معرفی شده یک گروه کاری با هدف برابری زبان Rust با زبان C در زمینه برنامه نویسی سیستم ها.

در یک گروه کاری که در مرحله ایجاد است، توسعه دهندگان Rust به همراه مهندسان اینتل، مشخصاتی را برای تعریف عملکردی که باید در Rust برای برنامه نویسی سیستم ها پیاده سازی شود، آماده می کنند. برنامه نویسی سیستم اغلب به دستکاری در سطح پایین نیاز دارد، مانند اجرای دستورالعمل های پردازشگر ممتاز و به دست آوردن اطلاعات دقیق در مورد وضعیت پردازنده. از ویژگی‌های مشابهی که قبلاً برای Rust توسعه داده شده‌اند، پشتیبانی از ساختارهای بدون نام، اتحادیه‌ها، درج‌های زبان اسمبلی (ماکرو "asm!") و فرمت شماره ممیز شناور BFLOAT16 ذکر شده است.

جاش معتقد است که آینده برنامه نویسی سیستم متعلق به Rust است و زبان C در واقعیت های مدرن جایگاهی را دارد که در سال های گذشته توسط اسمبلی اشغال شده بود. زنگ
نه تنها توسعه دهندگان را از مشکلات ذاتی زبان C که به دلیل کار سطح پایین با حافظه به وجود می آید خلاص می کند، بلکه فرصت استفاده از آن را در توسعه پارادایم های برنامه نویسی مدرن فراهم می کند.

در حین بحث ها اجراها
جاش به فکر اضافه کردن قابلیت توسعه درایورها در هسته لینوکس به زبان Rust افتاد که امکان ایجاد درایورهای ایمن تر و بهتر را با کمترین تلاش، بدون مشکلاتی مانند دسترسی به حافظه پس از آزادسازی، null فراهم می کرد. عدم ارجاع اشاره گر و بیش از حد بافر.

Greg Kroah-Hartman که مسئولیت حفظ شاخه پایدار هسته لینوکس را بر عهده دارد، آمادگی خود را برای اضافه کردن چارچوبی برای توسعه درایورها به زبان Rust به کرنل اعلام کرد، اگر مزایای واقعی نسبت به C داشته باشد، به عنوان مثال، امنیت را فراهم کند. اتصالات روی Kernel API. علاوه بر این، Greg این فریم ورک را فقط به عنوان یک گزینه در نظر می گیرد، نه به طور پیش فرض فعال، تا Rust را به عنوان یک وابستگی ساخت به هسته درج نکند.

معلوم شد که چندین تیم در حال حاضر در این راستا کار می کنند. به عنوان مثال، توسعه دهندگان شرکت "ماهی در بشکه" تهیه شده یک جعبه ابزار برای نوشتن ماژول های قابل بارگذاری برای هسته لینوکس به زبان Rust، با استفاده از مجموعه ای از لایه های انتزاعی بر روی رابط ها و ساختارهای هسته برای افزایش امنیت. لایه ها به طور خودکار بر اساس فایل های هدر هسته موجود با استفاده از ابزار تولید می شوند bindingen. Clang برای ساخت لایه ها استفاده می شود. علاوه بر لایه های میانی، ماژول های مونتاژ شده از بسته staticlib استفاده می کنند.

موازی در حال توسعه است پروژه دیگری بر توسعه درایورهای سیستم‌های جاسازی شده و دستگاه‌های اینترنت اشیا متمرکز بود که از bindgen برای تولید لایه‌ها بر اساس فایل‌های هدر هسته نیز استفاده می‌کند. این چارچوب به شما امکان می دهد بدون ایجاد تغییرات در هسته، امنیت درایور را بهبود بخشید - به جای ایجاد سطوح ایزوله اضافی برای درایورها در هسته، پیشنهاد می شود مشکلات را در مرحله کامپایل با استفاده از زبان Rust ایمن تر مسدود کنید. فرض بر این است که چنین رویکردی ممکن است مورد تقاضای تولیدکنندگان تجهیزات باشد که درایورهای اختصاصی را با عجله بدون انجام ممیزی مناسب توسعه می دهند.

هنوز همه عملکردهای مورد نظر اجرا نشده اند، اما این چارچوب در حال حاضر برای کار کاملاً مناسب است و برای نوشتن یک درایور کار برای کنترلر اترنت USB LAN9512 عرضه شده در برد Raspberry Pi 3 استفاده شده است. درایور موجود smsc95xx، نوشته شده توسط در زبان C. اشاره شده است که اندازه ماژول و سربار اجزای زمان اجرا هنگام توسعه درایور در Rust ناچیز است، که اجازه می‌دهد از چارچوب برای دستگاه‌هایی با منابع محدود استفاده شود.

منبع: opennet.ru

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