Друга редакція патчів для ядра Linux із підтримкою мови Rust

Мігель Охеда (Miguel Ojeda), автор проекту Rust-for-Linux, запропонував для розгляду розробниками ядра Linux оновлений варіант компонентів розробки драйверів пристроїв на мові Rust. Підтримка Rust розглядається як експериментальна, але вже узгоджена для включення у гілку linux-next. У новому варіанті усунуті зауваження, висловлені у процесі обговорення першої версії патчів. Лінус Торвальдс уже підключився до обговорення та запропонував змінити логіку обробки деяких бітових операцій.

Нагадаємо, що запропоновані зміни дають можливість використовувати Rust як другу мову для розробки драйверів та модулів ядра. Підтримка Rust подається як опція, не активна за замовчуванням і не призводить до включення Rust до обов'язкових складальних залежностей до ядра. Використання Rust для розробки драйверів дозволить з мінімальними зусиллями створювати безпечні та якісніші драйвери, позбавлені таких проблем як звернення до області пам'яті після її звільнення, розіменування нульових покажчиків та вихід за межі буфера.

Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами та облік часу життя об'єктів (області видимості), а також оцінку коректності доступу до пам'яті під час виконання коду. Rust також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.

Найбільш помітні зміни у новій версії патчів:

  • Код для розподілу пам'яті позбавлений можливих генерацій стану «panic» при виникненні помилок, таких як брак пам'яті. До складу включено варіант Rust-бібліотеки alloc, в якій перероблено код для обробки збоїв, але кінцевою метою є перенесення в основну редакцію всіх можливостей, необхідних для ядра (зміни вже підготовлені і передані до складу стандартної бібліотеки Rust).
  • Замість нічних збірок для компіляції ядра за допомогою Rust тепер можна використовувати бета випуски та стабільні релізи компілятора rustc. Зараз як еталонний компілятор використовується rustc 1.54-beta1, але після виходу релізу 1.54 наприкінці місяця, як еталонний буде підтримуватися саме він.
  • Додано підтримку написання тестів з використанням штатного для Rust атрибуту «#[test]» та можливість застосування doctests для документування тестів.
  • Додана підтримка архітектур ARM32 і RISCV на додаток до x86_64 і ARM64, що раніше підтримувалися.
  • Поліпшено реалізації GCC Rust (GCC-фронтенду для Rust) та rustc_codegen_gcc (бекенд rustc для GCC), який тепер проходить усі базові тести.
  • Запропоновано новий рівень абстракції для використання у програмах на мові Rust механізмів ядра, написаних мовою Сі, таких як червоно-чорне дерево, об'єкти з підрахунком посилань, створення файлових дескрипторів, завдання, файли та вектори вводу/виводу.
  • У компонентах розробки драйверів поліпшена підтримка модуля «file_operations», макросу «module!», реєстрації макросів і рудиментарних драйверів (probe і remove).
  • У Binder реалізована підтримка передачі файлових дескрипторів та LSM-хуків.
  • Запропоновано більш функціональний приклад драйвера на Rust - bcm2835-rng для апаратного генератора випадкових чисел плат Raspberry Pi.

Додатково згадуються проекти деяких компаній, пов'язані з використанням Rust у ядрі:

  • Компанія Microsoft висловила інтерес до участі в роботі з інтеграції підтримки Rust в ядро ​​Linux і готова найближчими місяцями надати реалізації драйверів для Hyper-V на Rust.
  • Компанія ARM працює над покращенням підтримки Rust для систем на базі процесорів ARM. Проекту Rust вже запропоновано зміни, що переводять 64-розрядні системи ARM до платформ першого рівня підтримки (Tier-1).
  • Компанія Google безпосередньо забезпечує підтримку проекту Rust for Linux, розвиває нову реалізацію механізму міжпроцесної взаємодії Binder на Rust та розглядає можливість переробки на Rust різних драйверів. Через ISRG (Internet Security Research Group) компанія Google забезпечила фінансування роботи з інтеграції в ядро ​​Linux підтримки Rust.
  • Компанія IBM реалізувала підтримку Rust у ядрі для систем PowerPC.
  • Лабораторія LSE (Systems Research Laboratory) розробила SPI-драйвер на Rust.

Джерело: opennet.ru

Додати коментар або відгук