Le mélange de Rust et de C dans Linux est assimilé à un « cancer » par un responsable du noyau
« je ne veux pas qu'il s'approche d'une énorme base de code C que je dois maintenir », dit-il à propos de Rust
L'intégration du langage Rust dans le noyau Linux continue de créer des divergences d'opinions dans le rang des mainteneurs. Certains voient en Rust une opportunité d'améliorer la sécurité et la robustesse de Linux, notamment grâce à sa gestion de la mémoire et à sa prévention des erreurs courantes en C. D'autres expriment des réserves, soulignant la complexité du langage et les risques liés à son adoption dans un projet aussi vaste que Linux. Un responsable du noyau, Christoph Hellwig, s'est récemment opposé à l'intégration d'un correctif écrit en Rust dans le noyau, indiquant clairement qu'il n'est tout simplement pas intéressé par le code Rust.
Rust for Linux : une initiative qui provoque des divisions dans la communauté du noyau
Le projet Rust for Linux vise à intégrer le langage de programmation Rust au sein du noyau Linux, historiquement écrit en C et en assembleur. Lancé en 2020, ce projet a pour objectif principal de tirer parti des garanties de sécurité mémoire offertes par Rust afin de réduire les bogues et vulnérabilités dans le développement des pilotes du noyau. Toutefois, bien que le projet soit jugé prometteur, il semble que les choses ne se passent pas comme prévu.
Certains craignent que la multiplicité des langages rende plus difficile la maintenance de ce super-projet open source, d'autres ne sont pas d'accord. Et aujourd'hui, les développeurs qui tentent d'ajouter du code Rust au noyau Linux se heurtent à l'opposition des responsables du noyau. Certains responsables du noyau estiment notamment que l'utilisation de plusieurs langages est une « complication indésirable et risquée ». C'est le cas de Christoph Hellwig.
Des inquiétudes sont apparues en août 2024 lorsque l'ingénieur logiciel de Microsoft Wedson Almeida Filho s'est retiré du projet Rust for Linux, citant sa frustration face à des « absurdités non techniques », ce qui est une façon de décrire la difficulté de collaborer avec ceux qui ont des objectifs différents.
664282
Le problème s'est à nouveau posé en janvier 2025, lorsqu'une proposition d'abstraction permettant aux pilotes de périphériques écrits en Rust d'appeler l'API DMA de Linux principalement basé sur le langage C s'est heurtée à l'opposition ferme de Christoph Hellwig, un responsable du noyau.
Plus précisément, un contributeur du noyau a soumis un correctif pour permettre aux pilotes Rust d'utiliser la fonction C dma_alloc_coherent() de l'API DMA afin d'allouer et de faire correspondre de grandes zones de mémoire pour un accès direct à la mémoire. Christoph Hellwig s'est opposé à ce correctif.
Dans un message adressé à la liste de diffusion du noyau Linux, Christoph Hellwig a écrit : « pas de code Rust dans kernel/dma, s'il vous plaît ». Par la suite, Miguel Ojeda, le développeur principal du projet Rust for Linux, a demandé à Christoph Hellwig de suggérer une alternative.
Christoph Hellwig : « ne me forcez pas à travailler avec votre langage brillant du jour »
En adoptant Rust, la communauté autour du noyau Linux devrait mettre à profit les atouts du langage sur le C. Et elle devrait faire d’une pierre deux coups, étant donné que Rust peut faciliter l’arrivée de nouveaux contributeurs. C’est en tout cas ce que laisse entrevoir une étude de l’université de Waterloo. Mais les habitués du langage C désapprouvent l'initiative et n’entendent pas se laisser embarquer dans ce qu’ils appellent la nouvelle religion du Rust.
En réponse à Miguel Ojeda, Christoph Hellwig a déclaré : « gardez les wrappers dans votre code au lieu de rendre la vie difficile aux autres », et a poursuivi en affirmant que « les interfaces de l'API DMA devraient rester dans un code C lisible et non dans des bindings bizarres afin qu'il greppable et maintenable ».
Le souhait de Christoph Hellwig semble être que les pilotes qui ne sont pas écrits en C aient leurs propres liaisons privées avec le code C, et que ces abstractions ne soient pas maintenues séparément, pas même dans l'arbre rust/kernel. Interrogé par Danilo Krummrich, un ingénieur logiciel de Red Hat impliqué dans le projet Rust for Linux, Christoph Hellwig a clairement fait savoir qu'il n'est tout simplement pas intéressé par le code Rust :
Ne me forcez pas à travailler avec votre langage brillant du jour. La maintenance de projets multilingues est une tâche pénible à laquelle je n'ai aucune envie de m'atteler. Si vous voulez utiliser quelque chose qui n'est pas du C, que ce soit de l'assembleur ou du Rust, vous écrivez dans des interfaces C et vous vous occupez vous-même du décalage d'impédance en ce qui me concerne.
En réponse, Danilo Krummrich a expliqué que Rust for Linux crée un code Rust qui abstrait les API C pour tous les pilotes Rust et qui est maintenu par les développeurs Rust. En d'autres termes, le côté C du noyau reste le même, et les pilotes Rust utilisent des abstractions de ce code C, et ces abstractions sont maintenues par une équipe centralisée dans rust/kernel, ce qui est sans doute mieux que des pilotes ayant leurs propres bindings C individuels.
Mais Christoph Hellwig ne semble pas intéressé par le fait que les abstractions DMA Rust soient maintenues séparément. Christoph Hellwig a expliqué qu'il ne voulait pas d'un autre mainteneur. Il a poursuivi en affirmant que le fait de demander à d'autres de maintenir la couche d'abstraction Rust pour l'allocateur cohérent DMA en tant que composant séparé n'améliore pas les choses et entrave la maintenabilité du noyau Linux :
Si vous voulez rendre Linux impossible à maintenir à cause d'une base de code interlangage, faites-le dans votre pilote pour que vous ayez à le faire au lieu de répandre ce cancer dans les sous-systèmes centraux. (Où ce cancer est explicitement une base de code interlangage et non Rust lui-même, juste pour échapper à la brigade flameware.)
Chaque bit supplémentaire introduit par un autre langage réduit considérablement la maintenabilité du noyau en tant que projet intégré. La seule raison pour laquelle Linux a réussi à survivre aussi longtemps est qu'il n'a pas de frontières internes, et l'ajout d'un autre langage rompt complètement avec cela.
Vous n'aimerez peut-être pas ma réponse, mais je ferai tout ce qui est en mon pouvoir pour arrêter cela. Ce n'est pas parce que je déteste Rust. Même si ce n'est pas mon langage préféré, c'est certainement l'un des meilleurs nouveaux langages et j'encourage les gens à l'utiliser pour de nouveaux projets là où il convient.
Je ne veux pas qu'il s'approche d'une énorme base de code C que je dois maintenir.
Les remarques de Christoph Hellwig contrastent avec les analyses du créateur de Linux, Linus Torvalds. Il est d'avis que Rust peut aider à corriger des erreurs commises en C. Il pense que Rust est une solution d’avenir pour le développement du noyau. Ainsi, Linus Torvalds considère la prise en charge de Rust pour le développement du noyau Linux comme une « une étape importante vers la capacité d'écrire les pilotes dans un langage plus sûr ».
Il a déclaré : « le C est, en fin de compte, un langage très simple. C'est l'une des raisons pour lesquelles j'apprécie le C et pour lesquelles beaucoup de programmeurs C apprécient le C, même si le revers de la médaille est évidemment que, parce qu'il est simple, il est aussi très facile de faire des erreurs ».
Les remarques de Christoph Hellwig sont jugées en violation du code de conduite
Hector Martin, chef de projet d'Asahi Linux, estime que « les remarques de Christoph Hellwig constituent une violation du code de conduite », mais doute que des mesures disciplinaires soient prises. Il estime que les développeurs de Rust for Linux devraient ignorer les préoccupations de Christoph Hellwig et soumettre leur correctif à l'approbation du patron du noyau, Linus Torvalds. Selon lui, l'avenir de Rust for Linux dépendra de la réponse de Linus Torvalds.
Si Linus n'apporte pas de réponse officielle à ce fil de discussion, Miguel et les autres développeurs Rust devraient simplement fusionner cette série une fois qu'elle sera revue et prête, en ignorant la tentative manifeste de Christoph de saboter le projet. Si Linus [accepte la pull request], ce que dit Christoph n'a pas d'importance. Si Linus ne l'accepte pas, le projet [Rust for Linux] est essentiellement mort jusqu'à ce que Linus ou Christoph fassent un geste. Tout le reste, c'est tourner autour du pot.
Le 7 février 2025, Hector Martin a demandé à être retiré de la liste des mainteneurs de Linux. « Je n'ai plus aucune confiance dans le processus de développement du noyau ou dans l'approche de la gestion de la communauté », a-t-il écrit dans une note adressée à la liste de diffusion du noyau Linux.
« Le développement de la plate-forme Apple/ARM se poursuivra en aval. Si j'ai envie d'envoyer moi-même des correctifs en amont à l'avenir, pour quelque sous-arbre que ce soit, je le ferai, ou je ne le ferai pas. Tous ceux qui ont envie de se battre en amont eux-mêmes sont les bienvenus », a-t-il ajouté.
Le noyau Linux a ajouté la prise en charge du code Rust le 3 octobre 2022, peu après que Mark Russinovich, directeur technique de Microsoft Azure, a affirmé que les nouveaux projets de programmation devraient être écrits en Rust plutôt qu'en C ou C++. Mark Russinovich a justifié sa position par le fait que le code Rust peut être écrit de manière à éviter les bogues de sécurité de la mémoire (par exemple, les débordements de mémoire tampon).
Ces bogues affectent depuis longtemps le code C et C++ et représentent la majorité des vulnérabilités sérieuses dans les grands projets. Le point de vue de Mark Russinovich a depuis lors attiré le soutien de nombreuses organisations gouvernementales de sécurité dans le monde entier.
Peu après que l'ingénieur logiciel de Microsoft Wedson Almeida Filho a annoncé son départ de Rust for Linux l'année dernière, Linus Torvalds a abordé la question des frictions entre les développeurs C et Rust lors du sommet Open Source de la Fondation Linux à Vienne, en Autriche. « Il est clair que certaines personnes n'aiment pas la notion de Rust et le fait que Rust empiète sur leur domaine », a déclaré Linus Torvalds.
« Les gens ont même dit que l'intégration de Rust était un échec... Nous faisons cela depuis deux ans maintenant, il est donc bien trop tôt pour dire cela, mais je pense aussi que même si cela devenait un échec - et je ne pense pas que ce sera le cas - c'est comme cela que l'on apprend », a-t-il ajouté.
Source : liste de diffusion du noyau Linux (1, 2) ; Christoph Hellwig, responsable du noyau Linux (1, 2) ; Hector Martin, chef de projet d'Asahi Linux (1, 2)
Et vous ?
:fleche: Quel est votre avis sur le sujet ?
:fleche: Que pensez-vous des remarques du responsable du noyau Linux sur le code Rust ?
:fleche: Selon vous, ses remarques violent-elles le code de conduite de la communauté ? Pourquoi ?
:fleche: Selon vous, pourquoi l'intégration de Rust dans le noyau crée autant de division parmi les mainteneurs ?
:fleche: Quels impacts les frictions entre les développeurs C et Rust pourraient-ils avoir sur le développement de Linux ?
:fleche: Les contributeurs au noyau se raréfient. Pensez-vous que l'avenir du noyau Linux dépend de la réussite du projet Rust for Linux ?
Voir aussi
:fleche: Linus Torvalds s'exprime à nouveau à propos du débat sur le choix entre C ou Rust pour le développement du noyau Linux et laisse entendre que le Rust peut aider à corriger des erreurs commises en C
:fleche: L'un des responsables de la maintenance du noyau Linux Rust se retire du projet, invoquant des "absurdités non techniques"
:fleche: Rust dans le noyau Linux: un projet prometteur, mais pas sans complications. La communauté dresse un bilan lors de l'édition 2023 du Kernel Maintainers Summit
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.


