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

Мігель Охеда (Miguel Ojeda), автор проекту Rust-for-Linux, запропонував для розгляду розробниками ядра Linux четвертий варіант компонентів розробки драйверів пристроїв на мові Rust. Підтримка Rust розглядається як експериментальна, але вже узгоджена для включення у гілку linux-next і досить розвинена для початку роботи зі створення шарів абстракції над підсистемами ядра, а також для написання драйверів та модулів. Розробка фінансується компанією Google та організацією ISRG (Internet Security Research Group), яка є засновником проекту Let's Encrypt та сприяє просуванню HTTPS та розвитку технологій для підвищення захищеності інтернету.

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

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

У новому варіанті патчів продовжено усунення зауважень, висловлених у процесі обговорення першої, другої та третьої редакцій патчів. У новій версії:

  • Здійснено перехід на використання як еталонний компілятор стабільного випуску Rust 1.58.0. З необхідних для проекту змін, які поки що не включені до основного складу інструментарію Rust, відзначаються прапор "-Zsymbol-mangling-version=v0" (очікується в Rust 1.59.0) та режим "maybe_uninit_extra" (очікується в Rust 1.60.0) .
  • Додано автоматичні перевірки наявності відповідного інструментарію Rust та розширено можливості щодо тестування підтримки Rust у системі.
  • Запропоновано нові абстракції для доступу з коду на мові Rust до таблиць ідентифікаторів пристроїв (IdArray та IdTable).
  • Додані прошарки для звернення до функцій, пов'язаних із таймером (clock framework).
  • Драйвери для платформ тепер визначено через реалізацію типажів.
  • Додано новий макрос для спрощення реєстрації драйверів платформ, а також запропоновано новий шаблон типового драйвера.
  • Додані макроси для структур "dev_*".
  • Додані методи "{read, write}*_relaxed" для типу IoMem .
  • Видалено властивість FileOpener для спрощення операцій із файлами.
  • До аргументів, переданих під час реєстрації драйвера, додано параметр «ThisModule».
  • Запропоновано типовий шаблон для створення модулів ядра мовою Rust.

Джерело: opennet.ru

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