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

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

Як і минулий варіант патчів випуск v10 урізаний до найнеобхіднішого мінімуму, достатнього для складання простого модуля ядра, написаного мовою Rust. Відмінності від минулої версії зводяться до дрібних правок, заміни sizeof на ARRAY_SIZE в kallsyms.c та адаптації патчів до ядра v6.0-rc7. Передбачається, що мінімальний патч, розмір якого скорочено з 40 до 13 тисяч рядків коду, спростить прийняття підтримки Rust в основний склад ядра. Після забезпечення мінімальної підтримки планується поступово нарощувати наявну функціональність, переносячи інші зміни з гілки Rust-for-Linux.

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

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

Джерело: opennet.ru

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