Мигел Охеда (Miguel Ojeda), автор на проекта Rust-for-Linux, предложи на разглеждане от разработчиците на ядро Linux издаването на v5 компоненти за разработка на драйвери на устройства на езика Rust. Това е шесто издание на патчовете с оглед на първата версия, публикувана без номер на версия. Поддръжката на Rust се разглежда като експериментална, но вече е включена в клона linux-next и е достатъчно развита за започване на работа по създаване на абстрактни слоеве над подсистемите на ядро, както и за писане на драйвери и модули. Разработката се финансира от компанията Google и организацията ISRG (Internet Security Research Group), която е учредител на проекта Let’s Encrypt и спомага за популяризирането на HTTPS и развитието на технологии за увеличаване на сигурността в интернет.
Напомняме, че предложените изменения дават възможност да се използва Rust като втори език за разработка на драйвери и модули на ядрото. Подкрепата за Rust се предлага като опция, която не е активна по подразбиране и не води до включването на Rust в броя на задължителните зависимости на ядрото. Използването на Rust за разработка на драйвери ще осигури с минимални усилия създаването на безопасни и по-качествени драйвери, лишени от проблеми като достъп до освобождаваща памет, разыменуване на нулеви указатели и изход извън границите на буфера.
Безопасността на работата с паметта в Rust се осигурява по време на компилация чрез проверка на указателите, проследяване на собствеността на обектите и отчитане на времето на живот на обектите (обхват), както и чрез оценка на коректността на достъпа до паметта по време на изпълнение на кода. Rust предлага също така средства за защита от аритметични препълвания, изисква задължителна инициализация на стойностите на променливите преди употреба, по-добро управление на грешки в стандартната библиотека, прилага концепцията за неизменяемост (immutable) на указателите и променливите по подразбиране и предлага силна статична типизация за минимизиране на логическите грешки.
В новия вариант на патчовете продължава отстраняването на забележките, изразени по време на обсъждането на първото, второто, третото, четвъртото и петото издание на патчовете. В новата версия:
- Инструментариумът е актуализиран до изданието Rust 1.59.0. С новата версия на Rust е синхронизирана и версията на библиотеката alloc, освобождавайки от възможни генерации на състояние «panic» при възникване на грешки, като недостиг на памет. Стабилизирана е възможността за използване на асемблерни вмъквания («feature(global_asm)»).
- Добавена е поддръжка за създаване на хост приложения на езика Rust, използвани по време на компилирането на ядрото.
- Вместо предоставяне на предварително създадени файлове с спецификации на целевите платформи, е осигурена динамична генерация на базата на конфигурацията на ядрото.
- Добавен е параметърът на ядрото HAVE_RUST, който се активира за архитектури, на които се поддържа Rust.
- Предложени са абстракции за използване в код на езика Rust за хардуерния генератор на псевдослучайни числа.
- Разрешено е използването на кодове за грешки без префикса «Error::» (например, «return Err(EINVAL)») за приближаване до обработката на кодове за грешки на C.
- Добавен е тип «CString» за собствени C-стрингове. Обединени са типовете Formatter и Buffer.
- Добавени са типажи Bool и LockInfo.
- Оптимизирана е реализацията на spin-блокировките.
Източник: opennet.ru
