Miguel Ojeda, autor do proxecto Rust-for-Linux, proposto para a súa consideración polos desenvolvedores do núcleo Linux выпуск v8 компонентов для разработки драйверов устройств на языке Rust. Это ревятая редакция патчей с учётом первого варианта, опубликованного без номера версии. Поддержка Rust рассматривается как экспериментальная, но уже включена в ветку linux-next, претендует на интеграцию в осенний выпуск 5.20/6.0 и достаточно развита для начала работы по созданию слоёв абстракции над подсистемами ядра, а также для написания драйверов и модулей. Разработка финансируется компанией Google и организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета.
Na nova versión:
- A cadea de ferramentas e a variante da biblioteca alloc, libres de posibles xeracións de pánico por erros, actualizáronse a Rust 1.62. En comparación coa versión utilizada anteriormente, a cadea de ferramentas de Rust agora admite a funcionalidade const_fn_trait_bound que se emprega nos parches do kernel.
- O código de vinculación está separado nun paquete crate separado "bindings", o que simplifica a reconstrución no caso de que os cambios se fagan só no paquete principal "kernel".
- A implementación da macro "concat_idents!" foi reescrita como unha macro procedimental que non está ligada á funcionalidade concat_idents e permite o uso de referencias a variables locais.
- A macro "static_assert!" foi reescrita para permitir o uso de "core::assert!()" en calquera contexto en lugar de constantes.
- A macro "build_error!" adaptouse para que funcione cando o modo "RUST_BUILD_ASSERT_{WARN,ALLOW}" está definido para os módulos.
- Engadiuse un ficheiro separado coa configuración "kernel/configs/rust.config".
- Os ficheiros "*.i" procesados nas substitucións de macros foron renomeados a "*.rsi".
- Deixou de ofrecerse soporte para a creación de compoñentes Rust con niveis de optimización diferentes dos empregados para o código C.
- Engadiuse o módulo fs, que proporciona ligazóns para traballar con sistemas de ficheiros. Ofrécese un exemplo sinxelo de sistema de ficheiros escrito en Rust.
- Engadido o módulo workqueue para traballar con colas do sistema (proporciona ligazóns para as estruturas do núcleo work_struct e workqueue_struct).
- O módulo kasync continuou a desenvolverse, implementando métodos de programación asíncrona (async). Engadiuse un exemplo dun servidor TCP a nivel de kernel escrito en Rust.
- Engadiuse a capacidade de xestionar interrupcións na linguaxe Rust usando as características [Threaded]Handler e os tipos [Threaded]Registration.
- Engadiuse unha macro procedimental "#[vtable]" para simplificar o traballo con táboas de punteiros de funcións, como a estrutura file_operations.
- Engadida a implementación de listas dobremente enlazadas "unsafe_list::List".
- Engadiuse compatibilidade inicial con RCU (Read-copy-update) e un tipo Guard para comprobar se un bloqueo de lectura está vinculado ao fío actual.
- Engadiuse a función Task::spawn() para crear e iniciar automaticamente fíos do núcleo. Tamén se engadiu o método Task::wake_up().
- Engadido o módulo de retardo, que permite usar retardos (contedor sobre msleep()).
Os cambios propostos permiten utilizar Rust como segunda linguaxe para desenvolver controladores e módulos do núcleo. O soporte de Rust preséntase como unha opción que non está activada por defecto e non fai que Rust se inclúa como unha dependencia de compilación necesaria para o núcleo. Usar Rust para o desenvolvemento de controladores permitirache crear controladores máis seguros e mellores cun mínimo esforzo, libre de problemas como o acceso á memoria despois da liberación, desreferencias de punteiro nulo e desbordamentos do búfer.
O manexo seguro para a memoria ofrécese en Rust no momento da compilación mediante a comprobación de referencias, o seguimento da propiedade do obxecto e a súa vida útil (alcance), así como a través da avaliación da corrección do acceso á memoria durante a execución do código. Rust tamén ofrece protección contra desbordamentos de enteiros, require a inicialización obrigatoria dos valores variables antes do seu uso, manexa mellor os erros na biblioteca estándar, aplica o concepto de referencias e variables inmutables por defecto, ofrece unha forte escritura estática para minimizar os erros lóxicos.
Fonte: opennet.ru
