Фреймуърк за писане на защитени драйвери за ядрото на Linux на езика Rust

Джош Триплет (Josh Triplett), работещ в компанията Intel и член на комитета, който наблюдава развитието на Crates.io, в своето изказване на конференцията Open Source Technology Summit представи работна група, насочена към постигане на паралелност на езика Rust с езика C в областта на системното програмиране.

В работната група, която в момента се формира, разработчици на Rust заедно с инженери от компанията Intel ще подготвят спецификации, определящи функционалността, която трябва да бъде реализирана в Rust за системно програмиране. Системното програмиране често изисква нискониво манипулации, като изпълнение на привилегировани инструкции на процесора и получаване на подробна информация за състоянието на процесора. От вече развиващите се за Rust подобни възможности, се отбелязва поддръжка на неназовани структури, съюзи (union), асемблерни вставки (макрос „asm!“) и формат на числата с плаваща запетая BFLOAT16.

Джош смята, че бъдещето на системното програмиране е в Rust, а езикът C в съвременния контекст заема мястото, което в миналото заемаше Assembler. Rust
не само освобождава разработчиците от проблемите, свързани с нискониевата работа с паметта на езика C, но и предоставя възможност за прилагане на съвременни парадигми на програмиране.

По време на дискусиите изказването
на Джош беше изказана идеята за добавяне в ядрото на Linux възможността за разработка на драйвери на езика Rust, което ще позволи с минимални усилия да се създадат безопасни и по-качествени драйвери, свободни от проблеми като достъп до освободена памет, разыменоване на нулеви указатели и излизане извън границите на буфера.

Грег Кроа-Хартман (Greg Kroah-Hartman), отговарящ за поддръжката на стабилния клон на ядрото на Linux, изрази готовност да добави към ядрото фреймуърк за разработка на драйвери на езика Rust, ако той предлага реални предимства в сравнение с C, например, да осигури безопасни обвивки над API на ядрото. Освен това, Грег разглежда този фреймуърк само като опция, която не е активна по подразбиране, за да не включва Rust сред зависимостите на ядрото.

Оказа се, че няколко екипа вече работят в тази насока. Например, разработчиците от компанията „Fish in a Barrel“ подготвиха инструмент за писане на зареждаеми модули за ядрото на Linux на езика Rust, използвайки за повишаване на безопасността набор от абстрактни прослойки над интерфейсите и структурите на ядрото. Прослойките автоматично се генерират на базата на наличните заглавни файлове на ядрото с помощта на утилита bindgen. За изграждане на прослойките се използва Clang. Изгражданите модули, освен прослойките, използват пакета staticlib.

Паралелно развива още един проект, фокусиран върху разработката на драйвери за вградени системи и устройства на Интернет на нещата, който също използва bindgen за генериране на прослойки на базата на заглавните файлове на ядрото. Фреймворкът позволява повишаване на сигурността на драйверите без изменение на ядрото — вместо да се създават допълнителни нива на изолация в ядрото за драйверите, се предлага да се блокират проблемите на етапа на компилация, използвайки по-сигурния език Rust. Предполага се, че подобен подход ще бъде търсен от производителите на оборудване, разработващи проприетарни драйвери на скорост без провеждане на необходимия одит.

Не всяка замислена функционалност е реализирана, но фреймворкът вече е напълно пригоден за работа и е използван за писане на работен драйвер за Ethernet контролера LAN9512 USB, предоставян с платката Raspberry Pi 3. Като еталонна реализация при писането на Rust-драйвера е използван съществуващия драйвер smsc95xx, написан на езика C. Отбелязва се, че размерът на модула и накладните разходи от runtime компонентите при разработката на драйвер на Rust са незначителни, което позволява прилагането на фреймворка за устройства с ограничени ресурси.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster