Мигель Охеда, автор проекта Rust-for-Linux выпустил восьмой релиз разработки исправлений ядра Linux с поддержкой языка Rust для разработчиков ядра Linux.
Это девятый выпуск исправлений (с учетом первой выпущенной версии без номера версии).. Поддержка Rust считается экспериментальной, но он уже включен в ветку linux-next, претендует на интеграцию в осенний релиз 5.20/6.0 и достаточно продвинут, чтобы начать работать над созданием слоев абстракции поверх подсистем ядра, а также писать контроллеры и модули.
Разработка финансируется Google и ISRG. (Internet Security Research Group), которая является основателем проекта Let's Encrypt и продвигает HTTPS и разработку технологий для повышения безопасности в Интернете.
Предлагаемые изменения позволяют использовать Rust в качестве второго языка для разработки драйверов и модулей ядра. Поддержка Rust представлена как опция, которая не включена по умолчанию и не приводит к включению Rust в число необходимых зависимостей сборки для ядра. Использование Rust для разработки драйверов позволит вам создавать более качественные и безопасные драйверы с минимальными усилиями, без проблем, таких как доступ к области памяти после ее освобождения, разыменование нулевых указателей и переполнение буфера.
Безопасность памяти обеспечивается в Rust во время компиляции путем проверки ссылок, отслеживания владения объектом и времени жизни объекта (область действия), а также путем оценки правильности доступа к памяти во время выполнения кода.
Что нового в этом восьмом релизе?
В этом новом предложении, которое было выпущено, упоминается, что вариант библиотеки alloc, что устранило возможную генерацию состояния "паника" при ошибках, обновлен до версии Rust 1.62. По сравнению с предыдущей версией, инструментарий Rust стабилизировал поддержку функциональности const_fn_trait_bound, используемой в патчах ядра.
Помимо этого код привязки разделен на набор блоков «привязки» отдельно, что упрощает пересборку, если меняется только основной пакет ядра.
В реализация макроса "concat_idents!", Переписан как процедурный макрос, не привязанный к функциональности concat_idents и позволяющий использовать ссылки на локальные переменные.
Кроме того, упоминается, что макрос "static_assert!" был переписан, чтобы разрешить "core::assert!()" используется в любом контексте вместо констант, а макрос "construction_error!" адаптирован для работы при установке режима "RUST_BUILD_ASSERT_{WARN,ALLOW}" для модулей.
добавлен фс модуль который предоставляет ссылки для работы с файловыми системами. Предлагается пример простой файловой системы, написанной на Rust, а также добавлен модуль очереди заданий для работы с системными очередями.
Из других изменений которые выделяются из этого нового предложения:
- Добавлен отдельный конфигурационный файл "kernel/configs/rust.config".
- Файлы "*.i", обрабатываемые в макроподстановках, были переименованы в "*.rsi".
- Удалена поддержка сборки компонентов Rust с уровнями оптимизации, отличными от тех, которые используются для кода C.
- Развитие модуля kasync продолжилось внедрением методов асинхронного программирования (async).
- Добавлен пример TCP-сервера уровня ядра, написанного на Rust, и добавлена возможность обработки прерываний на Rust.
- Добавлен макрос процедуры, упрощающий работу с таблицами указателей функций, такими как структура file_operations.
- Добавлена реализация двунаправленного связанного списка "unsafe_list::List".
- Добавлена начальная поддержка RCU и типа Guard для проверки того, привязана ли блокировка чтения к текущему потоку.
- Добавлена функция Task::spawn() для автоматического создания и запуска потоков ядра.
- Также был добавлен метод Task::wake_up().
- Добавлен модуль задержки
В конце концов если вам интересно узнать об этом больше, вы можете проверить подробности По следующей ссылке.