Протягом останніх місяців Розробники Linux сперечаються можливість дозволити використання мови Rust щоб написати нові драйвери пристроїв для ядра.
Минулого року розробники ядра Linux вони, схоже, досягли згоди з цього питання, Прихильники Rust посилаються на роботу, яка показує, що приблизно дві третини вразливостей ядра, яким призначені CVE в Android і Ubuntu, пов’язані з проблемами безпеки пам’яті.
Після цієї заяви Лінус Торвальдс, інженер-програміст, провідний творець і розробник ядра Linux, сказав в інтерв’ю, що обговорення на цю тему було б набагато важливішим, ніж тривалий пост Google про мову.
Коли його запитали про пропозицію використовувати Rust, він зазначив, що «Рішення тут просте: просто використовуйте C ++ замість Rust».
Після того у березні була запущена перша підтримкаe, що дозволило розмістити драйвери Rust в дереві Linux-Next для подальшого тестування перед їх остаточним включенням до основного ядра.
Відразу за ним був переопублікований «запит на коментар» у списку розсилки ядра щодо перспективи коду Rust для ядра Linux.
Мігель ОхедаРозробник ядра Linux розпочав пропозицію запиту на коментарі (RFC) у списку розсилки ядра Linux.
У дописі зі списку розсилки викладено переконання розробників, які беруть участь у додаванні коду Rust до ядра, переваги, як-от покращений захист пам’яті тощо.
«Дехто з вас останніми тижнями та місяцями помітив, що робиться серйозна спроба ввести другу мову в ядро. Нарешті ми прийшли, з RFC, який додає підтримку Rust до ядра Linux», — сказав Мігель Ожея. «Ми знаємо, що введення нової мови в ядро пов’язане з величезними витратами та ризиками», – додав він.
Команда проекту Rust для Linux перейшов від бета-компілятора Rust до використання стабільних випусків, мігруючи щоразу, коли випускається нова версія.
«Ми хотіли б подякувати Rust за співпрацю з нами над цими параметрами, щоб ядро могло їх використовувати», — сказав Мігель.
При оновленні компілятора команда вдалося видалити деякі нестабільні функції зі списку: const_fn_transmute, const_panic, const_unreachable_unchecked, core_panic і try_reserve.
Крім цього, наголошується, що були додані деякі параметри модульності більше, щоб виділити, щоб вимкнути деякі непотрібні функції: no_rc і no_sync.
Upstream, для того, щоб варіант використання ядра добре підтримувався, а точніше, «мікс» необхідних для ядра параметрів, ядро Upstream також додало no_fp_fmt_parse.
З іншого боку, Rust увімкнув серію додаткової діагностики для компілятора Rust і Clippy. Однією з відмінностей від C є те, що діагностику Rust дещо легше вимкнути в коді, що є більш суворим у загальному випадку.
також реалізовано абстракції та оновлення драйверів. Команда додала абстракції для блокувань потоків, зворотних викликів керування живленням, пам’яті io (readX / writeX), мікросхем irq та менеджерів потоків високого рівня, чіпів gpio (включаючи чіпи irq), периферійних пристроїв, периферійних пристроїв amba та драйверів.
Підтримка з контролер доповнений незалежною від шини інфраструктурою, Відкликані об’єкти, відкликані м’ютекси, ефективні бітові ітератори, краща діагностика паніки та спрощені обгортки вказівників. Крім того, він покращив і спростив об’єкти Ref (сумісний з refcount_t) і замінив усі екземпляри Rust.
І новий драйвер для пристроїв gpio PL061 був реалізований і відправлений як патч RFC.
Нарешті слід зазначити, що Підтримка іржі все ще вважається експериментальною. Тим не менш, підтримка достатньо хороша, щоб розробники ядра приступили до роботи в абстракціях Rust для підсистем і контролерів запису та інших модулів. Поточна серія щойно з’явилася на Linux-next, тому перший запуск відбудеться цього тижня.
Фуенте: https://lkml.org/lkml