П'ята редакція патчів для ядра 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 також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.

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

  • У систему безперервної інтеграції на базі підтримуваного компанією Intel бота 0DAY/LKP додано перевірку компонентів для підтримки Rust і розпочато публікацію звітів про тестування. Готується інтеграція підтримки Rust до системи автоматизованого тестування KernelCI. Тестування на базі GitHub CI перекладено використанням контейнерів.
  • Модулі ядра на Rust позбавлені необхідності визначення crate-атрибутів «#![no_std]» і «#![feature(…)]».
  • Додано підтримку одиничних складальних цілей (.o, .s, .ll і .i).
  • У рекомендаціях щодо оформлення коду визначено правила щодо поділу коментарів («//») та документування коду («///»).
  • Перероблено скрипт is_rust_module.sh.
  • Додано підтримку статичних (глобальних загальних змінних) примітивів синхронізації, заснованих на реалізації «CONFIG_CONSTRUCTORS».
  • Спрощено керування блокуваннями: Guard та GuardMut об'єднані та один параметризований тип.
  • Надається можливість визначення додаткових параметрів під час реєстрації пристроїв.
  • Додано абстракцію «RwSemaphore», яка виступає в ролі обв'язки над Сі-структурою rw_semaphore.
  • Для використання mmap доданий новий модуль mm та абстракція VMA (обв'язування над структурою vm_area_struct).
  • Драйвер GPIO PL061 переведено на використання макросу "dev_*!".
  • Проведено загальне чищення коду.

Джерело: opennet.ru

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