Miguel Ojeda, auteur du projet Rust-for-Linux, a proposé aux développeurs du noyau Linux un cinquième ensemble de composants pour le développement de pilotes d'appareils en Rust. Le support de Rust est considéré comme expérimental, mais il a déjà été intégré dans la branche linux-next et est suffisamment avancé pour commencer le travail sur des couches d'abstraction au-dessus des sous-systèmes du noyau, ainsi que pour écrire des pilotes et des modules. Le développement est financé par Google et l'organisation ISRG (Internet Security Research Group), créatrice du projet Let's Encrypt et qui promeut HTTPS et le développement de technologies pour renforcer la sécurité d'Internet.
Rappelons que les modifications proposées permettent d'utiliser Rust comme deuxième langage pour le développement de pilotes et de modules du noyau. Le support de Rust est présenté comme une option, non activée par défaut et ne conduisant pas à l'inclusion de Rust parmi les dépendances de construction obligatoires du noyau. L'utilisation de Rust pour le développement de pilotes permettra de créer des pilotes sûrs et de meilleure qualité avec un minimum d'efforts, en évitant des problèmes tels que l'accès à une zone mémoire après sa libération, la déréférenciation de pointeurs nuls et le dépassement de tampon.
La sécurité de la mémoire est assurée dans Rust au moment de la compilation par la vérification des références, le suivi de la propriété des objets et la prise en compte de la durée de vie des objets (portée), ainsi que par l'évaluation de l'accès à la mémoire lors de l'exécution du code. Rust fournit également des moyens de protection contre les débordements d'entiers, exige l'initialisation obligatoire des variables avant leur utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept de références et de variables immuables par défaut, et propose une forte typage statique pour minimiser les erreurs logiques.
Dans cette nouvelle version des patches, la correction des remarques formulées lors des discussions autour des première, deuxième, troisième et quatrième versions des patches a été poursuivie. Dans cette nouvelle version :
- Un contrôle des composants pour le support de Rust a été ajouté au système d'intégration continue basé sur le bot 0DAY/LKP soutenu par Intel, et la publication des rapports de test a commencé. L'intégration du support Rust dans le système de test automatisé KernelCI est en préparation. Les tests basés sur GitHub CI ont été migrés vers l'utilisation de conteneurs.
- Les modules du noyau en Rust ne nécessitent plus la définition des attributs crate «#![no_std]» et «#![feature(…)]».
- Le support des cibles de construction uniques (.o, .s, .ll et .i) a été ajouté.
- Les recommandations concernant la documentation du code définissent des règles pour la séparation des commentaires («//») et la documentation du code («///»).
- Le script is_rust_module.sh a été retravaillé.
- Le support des primitives de synchronisation statiques (variables globales communes) basées sur l'implémentation de «CONFIG_CONSTRUCTORS» a été ajouté.
- La gestion des verrous a été simplifiée : Guard et GuardMut ont été fusionnés en un seul type paramétré.
- La possibilité de définir des paramètres supplémentaires lors de l'enregistrement des appareils a été fournie.
- Une abstraction «RwSemaphore» a été ajoutée, servant d'enveloppe autour de la structure C rw_semaphore.
- Pour utiliser mmap, un nouveau module mm et une abstraction VMA (enveloppe autour de la structure vm_area_struct) ont été ajoutés.
- Le pilote GPIO PL061 a été adapté pour utiliser le macro «dev_*!».
- Un nettoyage général du code a été effectué.
Source : opennet.ru
