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

Джош Триплет, който работи в Intel и е в комисията, наблюдаваща развитието на Crates.io, говорейки на срещата на високо равнище за технологии с отворен код подадено работна група, целяща да доведе езика Rust до равенство с езика C в областта на системното програмиране.

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

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

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

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

Оказа се, че няколко екипа вече работят в тази посока. Например разработчиците от компанията „Риба в бъчва“ подготвени набор от инструменти за писане на зареждаеми модули за ядрото на Linux на езика Rust, използвайки набор от абстрактни слоеве върху интерфейсите и структурите на ядрото за повишаване на сигурността. Слоевете се генерират автоматично въз основа на съществуващите заглавни файлове на ядрото с помощта на помощната програма bindgen. Clang се използва за изграждане на слоеве. В допълнение към междинните слоеве, сглобените модули използват пакета staticlib.

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

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

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

Добавяне на нов коментар