Josh Triplett, travaillant chez Intel et membre du comitĂ© supervisant le dĂ©veloppement de Crates.io, a exprimĂ© lors de sa prĂ©sentation Ă la confĂ©rence Open Source Technology Summit un groupe de travail visant Ă amener le langage Rust au mĂȘme niveau que le langage C dans le domaine de la programmation systĂšme.
Dans le groupe de travail en cours de création, les développeurs Rust collaboreront avec des ingénieurs d'Intel pour préparer des spécifications définissant les fonctionnalités nécessaires à l'implémentation de Rust pour la programmation systÚme. La programmation systÚme nécessite souvent des manipulations de bas niveau, telles que l'exécution d'instructions processeur privilégiées et l'obtention de détails sur l'état du processeur. Parmi les fonctionnalités déjà développées pour Rust, on note le support des structures anonymes, des unions, des insertions d'assembleur (macro « asm! ») et du format numérique à virgule flottante BFLOAT16.
Josh considĂšre que l'avenir de la programmation systĂšme appartient Ă Rust, tandis que le langage C, dans le contexte actuel, revendique une place que l'assembleur occupait autrefois. Rust
non seulement libÚre les développeurs des problÚmes inhérents au langage C liés à la gestion de la mémoire à bas niveau, mais offre également des possibilités d'application dans le développement de paradigmes modernes de programmation.
Au cours de de la présentation
de Josh, une idée a été avancée concernant l'ajout au noyau Linux de la possibilité de développer des pilotes en Rust, ce qui permettrait de créer facilement des pilotes sûrs et de meilleure qualité, exempts de problÚmes tels que l'accÚs à la mémoire aprÚs sa libération, la déréférence de pointeurs nuls et les débordements de tampon.
Greg Kroah-Hartman, responsable du support de la branche stable du noyau Linux, a exprimé sa disposition à ajouter au noyau un framework pour le développement de pilotes en Rust, à condition qu'il présente de réels avantages par rapport au C, tels que la fourniture de wrappers sûrs sur l'API du noyau. De plus, Greg envisage ce framework seulement comme une option, non activée par défaut, afin de ne pas inclure Rust dans les dépendances de construction du noyau.
Il s'avĂšre que plusieurs Ă©quipes travaillent dĂ©jĂ dans ce domaine. Par exemple, 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.
En parallĂšle un autre projet, axĂ© sur le dĂ©veloppement de pilotes pour des systĂšmes intĂ©grĂ©s et des appareils IoT, qui utilise Ă©galement bindgen pour gĂ©nĂ©rer des couches basĂ©es sur les fichiers d'en-tĂȘte du noyau. Le cadre permet d'amĂ©liorer la sĂ©curitĂ© des pilotes sans modifier le noyau â au lieu de crĂ©er des niveaux d'isolement supplĂ©mentaires pour les pilotes dans le noyau, il est proposĂ© de bloquer les problĂšmes au moment de la compilation, en utilisant un langage plus sĂ»r comme Rust. On suppose qu'une telle approche pourrait ĂȘtre demandĂ©e par les fabricants de matĂ©riel qui dĂ©veloppent des pilotes propriĂ©taires Ă la hĂąte sans effectuer l'audit nĂ©cessaire.
Bien que toute la fonctionnalitĂ© prĂ©vue ne soit pas encore rĂ©alisĂ©e, le cadre est dĂ©jĂ tout Ă fait opĂ©rationnel et a Ă©tĂ© utilisĂ© pour Ă©crire un pilote fonctionnel pour le contrĂŽleur Ethernet LAN9512 USB, fourni avec la carte Raspberry Pi 3. Comme mise en Ćuvre de rĂ©fĂ©rence pour Ă©crire le pilote en Rust, le pilote existant smsc95xx, Ă©crit en C, a Ă©tĂ© utilisĂ©. Il est notĂ© que la taille du module et les frais gĂ©nĂ©raux des composants runtime lors de la conception du pilote en Rust sont nĂ©gligeables, ce qui permet d'utiliser le cadre pour des appareils Ă ressources limitĂ©es.
Source : opennet.ru
