Мигел Охеда (Miguel Ojeda), автор проекта Rust-for-Linux, предложи на вниманието на разработчиците на ядрото на Linux издаването на v10 компоненти за разработка на драйвери на устройства на езика Rust. Това е единадесетата редакция на патчовете, като първоначалният вариант е публикуван без номер на версия. Включването на поддръжка за Rust е одобрено от Линус Торвалдс за включване в ядрото на Linux 6.1, ако не възникнат непредвидени проблеми. Разработката се финансира от Google и организацията ISRG (Internet Security Research Group), която е основател на проекта Let’s Encrypt и подпомага популяризирането на HTTPS и развитието на технологии за повишаване на сигурността в интернет.
Както и в предишния вариант на патчовете, изданието v10 е намалено до необходимия минимум, достатъчен за създаване на прост модул на ядрото, написан на езика Rust. Разликите от предишната версия се състоят в малки корекции, замяна на sizeof с ARRAY_SIZE в kallsyms.c и адаптиране на патчовете за ядрото v6.0-rc7. Очаква се минималният патч, чиито размер е намален от 40 до 13 хиляди реда код, да улесни одобрението на поддръжката на Rust в основния състав на ядрото. След осигуряване на минималната поддръжка, планирано е постепенно да се увеличава съществуващата функционалност, прехвърляйки и други промени от клона Rust-for-Linux.
Предложените промени позволяват използването на Rust като втори език за разработка на драйвери и модули на ядрото. Поддръжката на Rust се предоставя като опция, която не е активна по подразбиране и не води до включване на Rust в задължителните зависимости за компилиране на ядрото. Използването на Rust за разработка на драйвери ще позволи с минимални усилия създаването на безопасни и качествени драйвери, освободени от проблеми като достъп до памет след освобождаването й, разименуване на нулеви указатели и излизане извън границите на буфера.
Безопасността на работата с паметта в Rust се осигурява по време на компилация чрез проверка на указателите, проследяване на собствеността на обектите и отчитане на времето на живот на обектите (обхват), както и чрез оценка на коректността на достъпа до паметта по време на изпълнение на кода. Rust предлага също така средства за защита от аритметични препълвания, изисква задължителна инициализация на стойностите на променливите преди употреба, по-добро управление на грешки в стандартната библиотека, прилага концепцията за неизменяемост (immutable) на указателите и променливите по подразбиране и предлага силна статична типизация за минимизиране на логическите грешки.
Източник: opennet.ru
