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

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

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

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

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

  • Інструментарій оновлено до випуску Rust 1.59.0. З новою версією Rust також синхронізований варіант бібліотеки alloc, позбавлений можливих генерацій стану «panic» при виникненні помилок, таких як брак пам'яті. Стабілізовано можливість використання асемблерних вставок («feature(global_asm)»).
  • Додано підтримку створення на мові Rust хостових програм, що використовуються в процесі компіляції ядра.
  • Замість поставки заздалегідь створених файлів зі специфікацією цільових платформ забезпечено їх динамічну генерацію на основі конфігурації ядра.
  • Доданий параметр ядра HAVE_RUST, який вмикається для архітектур, на яких підтримується Rust.
  • Запропоновано абстракції для використання у коді мовою Rust апаратного генератора псевдовипадкових чисел.
  • Дозволено використання кодів помилок без префіксу "Error::" (наприклад, "return Err(EINVAL)") для наближення до обробки кодів помилок на Сі.
  • Доданий тип CString для власних Сі-рядків. Об'єднані типи Formatter та Buffer.
  • Додані типажі Bool та LockInfo.
  • Спрощено реалізацію spin-блокувань.

Джерело: opennet.ru

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