Microsoft опублікувала на Github код, який дозволяє розробникам кодувати драйвери Windows у Rust, повідомляє DevClass.
Технічний директор Azure Марк Руссінович опублікував коментар на X:
«Працюємо над створенням драйверів Windows у Rust».
Ця робота налічує багато років. У липні 2019 року Microsoft Research опублікувала повідомлення про своє бажання «усунути цілий клас уразливостей до того, як вони взагалі виникнуть», наводячи аргументи на користь мов, безпечних для пам’яті й заявляючи, що «однією з найперспективніших мов системного програмування, яка задовольняє ці вимоги, є Rust, розроблена Mozilla».
Microsoft оцінив Rust не лише за безпеку пам’яті, але й за data race safety, гарантуючи відсутність «несинхронізованого доступу до частини пам’яті з двох або більше потоків».
У 2022 році Руссінович заявив:
«Настав час припинити починати -які нові проєкти на C/C++ і використовувати Rust для тих сценаріїв, де потрібна мова, відмінна від GC. Заради безпеки та надійності індустрія повинна оголосити ці мови застарілими».
GC, або мови зі збиранням сміття, такі як C# і Java, підходять для бізнес-застосунків, але не підходять для низькорівневого системного коду.
Windows в основному написана на C і C++.
«Більшість коду режиму користувача тепер на C++, але більша частина коду ядра все ще на C із різних технічних та історичних причин», – сказав у 2018 році інженер-програміст Microsoft Реймонд Чен.
Хоча з того часу вже зʼявилась Windows 11, операційна система не переписується при розробці нових версій. Набір драйверів Windows, який використовується виробниками апаратного забезпечення для забезпечення роботи своїх пристроїв у Windows, залишається інструментарієм C/C++.
Згідно з примітками до випуску нового набору драйверів на основі Rust, планується підтримувати як драйвери WDM (модель драйвера Windows), так і WDF (платформу драйверів Windows).
Драйвери WDM мають нижчий рівень і тісно пов’язані з операційною системою, тоді як драйвери WDF взаємодіють із системою через бібліотеку фреймворку. Початковий репозиторій орієнтований на WDK.
У примітках додається, що «цей проєкт все ще знаходиться на ранніх стадіях розробки і поки не рекомендований для комерційного використання». Microsoft заохочує експериментувати, надавати фідбек і спрямовує розробників на дискусійний форум GitHub.
Однією з перших проблем є те, як обробляти винятки.
«Для ядра Windows (і ОС загалом) структурована обробка винятків є невід’ємною частиною розробки для Windows і справжньою проблемою для використання Rust для розробки ядра Windows», – поділився один із розробників.
Rust не має винятків, віддаючи перевагу звіту про помилки, які можна виправити, за допомогою змінної Result і виходу з panic failure при помилках, які не можна виправити. Такі паніки небажані у коді ядра, оскільки вони викликають збій системи.
Розробник Джонні Шоу цитує Лінуса Торвальдса, який сказав у контексті ядра Linux (де також використовується Rust):
«Оскільки код ядра відрізняється від системних інструментів випадкового простору користувача, нестача пам’яті просто НЕ МОЖЕ викликати відміну. Це має призвести лише до повернення помилки».
Торвальдс вважає цю проблему «фундаментальною».
Перший код у новому репозиторії Microsoft містить коментар:
// FIXME: Should this trigger Bugcheck via KeBugCheckEx?
Проблема показує, що запровадження Rust у низькорівневий код Windows – це не лише питання додавання прив’язок до мови Rust для WDK API. Тим не менш, початкові реакції загалом позитивні.
Проблеми з безпекою пам’яті є причиною великої частки проблем із безпекою та стабільністю у Windows, і перехід до Rust є ймовірним рішенням.
Читайте також на ProIT: Microsoft припиняє роботу сторонніх драйверів принтерів у Windows.
Підписуйтеся на ProIT у Telegram, щоб не пропустити жодної публікації!