Ник Десанье (), занимаващ се в 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
