Nick Desaulniers (), qui travaille chez Google sur la construction du noyau Linux en utilisant le compilateur Clang et qui aide également les erreurs dans le compilateur Rust, animera lors de la conférence une session pour discuter de la possibilité de développer des composants du noyau en Rust. Nick organise une micro-conférence dédiée à LLVM et pense qu'il serait judicieux de discuter des aspects techniques de l'intégration potentielle du support Rust dans le noyau (un prototype fonctionnel a déjà été préparé pour KBuild) et de comprendre s'il est nécessaire d'ajouter ce support et quelles restrictions concernant l'utilisation de Rust doivent être prises.
Rappelons qu'au cours d'une récente discussion à la conférence "Open Source Summit and Embedded Linux", Linus Torvalds la possibilité de l'apparition de liaisons pour le développement de sous-systèmes non principaux du noyau (par exemple, des pilotes) dans des langages comme Rust. La possibilité de développer des pilotes en Rust permettrait de créer des pilotes sûrs et de meilleure qualité avec un minimum d'efforts, éliminant des problèmes tels que l'accès à la mémoire après sa libération, la déréférenciation de pointeurs nuls et les débordements de tampon. Il existe déjà plusieurs projets tiers visant à mettre en œuvre cette possibilité :
- Les développeurs de l'entreprise "Fish in a Barrel" un outil pour écrire des modules chargeables pour le noyau Linux en Rust, en utilisant un ensemble d'abstractions sur les interfaces et structures du noyau pour améliorer la sécurité. Les couches sont générées automatiquement à partir des fichiers d'en-tête existants du noyau à l'aide de l'utilitaire . Pour construire les couches, Clang est utilisé. Les modules assemblés utilisent, en plus des couches, le package staticlib.
- Des chercheurs de l'Université Chinoise de Hong Kong un projet pour le développement de pilotes en Rust pour les systèmes embarqués et les dispositifs IoT, qui utilise également bindgen pour générer des couches basées sur les fichiers d'en-tête du noyau. Ce cadre permet d'améliorer la sécurité des pilotes sans modifier le noyau - au lieu de créer des niveaux d'isolation supplémentaires dans le noyau pour les pilotes, il est proposé de bloquer les problèmes lors de la compilation, en utilisant le langage plus sûr Rust. Ce type d'approche pourrait être recherché par les fabricants de matériel qui développent des pilotes propriétaires à la hâte sans effectuer d'audit approprié.
- Les développeurs du cadre pour la traduction de code C en Rust, Expériences sur la transformation des modules du noyau avec un minimum de modifications manuelles. Parmi les problèmes identifiés, l'utilisation dans de nombreuses parties du code du noyau d'extensions GCC qui ne sont pas encore prises en charge par C2Rust. Pour remédier à cela, C2Rust prévoit d'ajouter le support des attributs GCC inline, cold, alias, used et section, ainsi que d'étendre les possibilités de l'assembleur inline et de résoudre les problèmes liés aux structures qui sont à la fois alignées et empaquetées (par exemple, xregs_state). Parmi les problèmes majeurs nécessitant une intervention manuelle, on note l'impossibilité de traduire des macros C non triviales en macros Rust et la nécessité de redéfinir les types, car C2Rust traduit les types C en définitions dans le paquet libc, mais ce paquet ne peut pas être utilisé dans les modules du noyau.
Source : opennet.ru
