Ник Десанье (), който в Google отговаря за на сборката на ядрото на Linux с компилатора Clang и също така при коригирането на грешки в компилатора Rust, да проведе на конференцията сесия за обсъждане на възможността за разработка на компоненти на ядрото на Rust. Ник ръководи микро-конференция, насочена към LLVM, и смята, че би било полезно да се обсъдят техническите аспекти на потенциалната интеграция на поддръжка на Rust в ядрото (вече е подготвен работен прототип за KBuild) и да се разбере дали е необходимо да се добавя такава поддръжка и какви ограничения за използването на Rust следва да се приемат.
Напомняме, че на неотдавнашна дискусия на конференцията "Open Source Summit and Embedded Linux" Линус Торвалдс възможността за разработване на необходими под-системи на ядрото (например, драйвери) на езици като Rust. Възможността за разработка на драйвери на Rust би позволила създаването на безопасни и качествени драйвери с минимални усилия, освобождавайки от проблеми като достъп до памет след освобождаване, разименуване на нулеви указатели и излизане извън границите на буфера. Вече съществуват няколко външни проекта за реализиране на тази възможност:
- Разработчиците от компанията "Fish in a Barrel" инструменти за написване на зареждаеми модули за ядрото на Linux на Rust, използвайки набор от абстрактни слоеве над интерфейсите и структури на ядрото за повишаване на защитата. Слоевете се генерират автоматично на базата на съществуващите заглавни файлове на ядрото с помощта на утилитата . За изграждане на слоевете се използва Clang. Създаваните модули, освен слоевете, използват пакета staticlib.
- Изследователи от Китайския университет в Хонг Конг проект за разработка на Rust драйвери за вградени системи и устройства за интернет на вещите, който също така използва bindgen за генериране на прослойки на базата на заглавни файлове на ядрото. Фреймуъркът позволява повишаване на сигурността на драйверите без промени в ядрото — вместо да се създават допълнителни нива на изолация в ядрото на драйверите, се предлага блокиране на проблемите на етап компилация, прилагане на по-сигурен език Rust. Смята се, че подобен подход може да бъде търсен от производителите на оборудване, разработващи патентовани драйвери в кратки срокове без провеждане на задълбочен одит.
- Разработчици на фреймуърка за транслация на C-код на Rust, експерименти по преобразуване на модули на ядрото с минимални ръчни корекции. От проблемите се отбелязва използването на код с разширения GCC в много части на ядрото, които в момента не се поддържат в C2Rust. За решаване на този проблем в C2Rust е планирано добавяне на поддръжка за атрибути GCC inline, cold, alias, used и section, както и разширяване на възможностите на inline асемблера и решаване на проблеми с структури, които са едновременно подравнени и опаковани (например xregs_state). От сериозните проблеми, изискващи ръчна намеса, се отбелязва невъзможността за транслация на нетривиални C-макроси в Rust макроси и необходимостта от пренаписване на типове, тъй като C2Rust трансферира C типове в определения в пакета libc, но този пакет не може да се използва в модули на ядрото.
Източник: opennet.ru
