IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Linus Torvalds clarifie sa position concernant l'intégration du code Rust dans le noyau Linux
Affirmant qu'il n'est pas question d'imposer Rust aux mainteneurs qui ne souhaitent pas travailler avec ce langage

Le , par Stéphane le calme

45PARTAGES

14  0 
Dans une récente discussion au sein de la communauté du noyau Linux, Linus Torvalds a clarifié sa position concernant l'intégration du code Rust dans le noyau, en réponse aux objections de certains mainteneurs. Cette intervention fait suite aux préoccupations exprimées par Christoph Hellwig, un développeur influent du noyau, qui s'oppose à l'utilisation de Rust aux côtés du C traditionnel. Hellwig a notamment affirmé que l'introduction de Rust entraînerait une fragmentation et des directives de langage ambiguës, imposant une charge supplémentaire aux mainteneurs. Il a également rapporté que Torvalds aurait indiqué en privé son intention de fusionner du code Rust, même en cas d'opposition de la part des mainteneurs concernés.

L’introduction de Rust dans le noyau Linux est l’un des changements techniques les plus significatifs de ces dernières années. Ce langage de programmation, réputé pour sa sécurité mémoire et sa modernité par rapport au C, a suscité un débat intense parmi les développeurs du noyau.

Depuis l'annonce de la prise en charge expérimentale de Rust dans le noyau Linux, plusieurs mainteneurs ont exprimé des inquiétudes quant à l'impact de ce changement. Parmi eux, Christoph Hellwig a pris une position ferme contre l'utilisation de Rust, mettant en avant des arguments relatifs à la complexité et à la fragmentation du développement du noyau.

Hellwig, connu pour ses opinions tranchées, a notamment affirmé que l'introduction de Rust compliquerait le travail des développeurs en les obligeant à apprendre et à maintenir un deuxième langage aux côtés du C. Il a aussi insisté sur le fait que Rust apporterait une surcharge inutile pour les outils et les chaînes de compilation, ce qui compliquerait le travail des mainteneurs. Il a déclaré : « 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... Je ne veux pas qu'il s'approche d'une énorme base de code C que je dois maintenir ».

Dans ce contexte, Hellwig a récemment affirmé que Linus Torvalds lui-même aurait envisagé d’intégrer du code Rust dans le noyau malgré les objections des mainteneurs concernés :

Citation Envoyé par Christoph Hellwig
« Certains sous-systèmes peuvent décider de ne pas avoir de code Rust pour le moment, généralement pour des raisons de bande passante. C'est une bonne chose et on s'y attend ». Alors que Linus a dit en privé qu'il allait absolument fusionner du code Rust malgré l'objection d'un mainteneur. (Il l'a fait en privé au cas où vous chercheriez une référence.)

Ainsi, à partir de maintenant, en tant que développeur ou mainteneur Linux, vous devez faire face à Rust, que vous le vouliez ou non.
Cette déclaration a immédiatement suscité des interrogations au sein de la communauté Linux, certains y voyant un passage en force de la part du créateur du projet.

Torvalds clarifie sa position : Rust ne sera pas imposé

Face aux préoccupations soulevées, Linus Torvalds a rapidement répondu pour rectifier les déclarations de Hellwig. Il a affirmé qu'il n'était pas question d'imposer Rust aux mainteneurs qui ne souhaitent pas travailler avec ce langage.

Torvalds a expliqué que les mainteneurs ne seront pas contraints d'interagir avec du code Rust s'ils n'en voient pas l’utilité. Cependant, cela ne signifie pas qu'ils ont le droit de bloquer son intégration dans des domaines où il est jugé bénéfique.

Il a précisé que la demande d’intégration d’un module en Rust, qui était à l’origine du débat, n’avait aucune incidence directe sur le code existant maintenu par Hellwig. Dès lors, il n’était pas justifié que ce dernier cherche à bloquer l’évolution du noyau dans ce sens.

Torvalds a également insisté sur un principe fondamental du développement de Linux : le pragmatisme et la flexibilité. Selon lui, l'objectif n'est pas d'obliger quiconque à travailler avec Rust, mais de permettre à ceux qui veulent l’utiliser de le faire sans contraintes excessives.


Ci-dessous, un extrait de son courriel adressé à Hellwig :

Le fait est que la pull request à laquelle vous vous êtes opposé n'a PAS DU TOUT TOUCHÉ À LA COUCHE DMA. Il s'agissait littéralement d'un autre utilisateur, dans un sous-répertoire complètement séparé, qui ne modifiait pas le code que vous maintenez de quelque manière que ce soit... Honnêtement, ce que vous avez fait, c'est essentiellement dire "en tant que mainteneur du DMA, je contrôle ce à quoi le code DMA est utilisé".

Et ce n'est pas du tout comme cela que cela fonctionne. Quelle est la prochaine étape ? Dire que certains pilotes ne peuvent pas faire de DMA, parce que vous n'aimez pas ce périphérique, et qu'en tant que mainteneur DMA vous contrôlez qui peut utiliser le code DMA ? C'est littéralement exactement ce que vous essayez de faire avec le code Rust. Vous dites que vous n'êtes pas d'accord avec Rust - ce qui est très bien, personne ne vous a jamais demandé d'écrire ou de lire du code Rust. Mais ensuite, vous prenez cette position pour signifier que le code Rust ne peut même pas utiliser ou s'interfacer avec le code que vous maintenez...

Vous n'êtes pas obligé d'aimer Rust. Vous n'avez pas à vous en préoccuper. Cela a été dit clairement dès le début, personne n'est obligé d'apprendre soudainement un nouveau langage, et les personnes qui veulent travailler uniquement en C peuvent continuer à le faire. Pour en revenir au cœur même de votre déclaration :

"Le document affirme qu'aucun sous-système n'est forcé de prendre Rust"

c'est tout à fait vrai. Vous n'êtes pas obligé de prendre du code Rust, ou de vous préoccuper du code Rust dans le code DMA. Vous pouvez l'ignorer...

On ne peut pas avoir le beurre et l'argent du beurre. Vous ne pouvez pas dire « Je ne veux rien avoir à faire avec Rust », et dans la phrase suivante dire « Et cela signifie que le code Rust que j'ignorerai ne pourra pas utiliser les interfaces C que je maintiens ».... Ainsi, lorsque vous modifiez les interfaces C, les gens de Rust devront faire face aux retombées, et devront corriger les liaisons Rust. C'est un peu la promesse ici : il y a ce « mur de protection » autour des développeurs C qui ne veulent pas s'occuper des problèmes Rust dans la promesse qu'ils n'ont pas devoir s'occuper de Rust.

Mais ce « mur de protection » va dans les deux sens. Si vous ne voulez pas vous occuper du code Rust, vous n'avez rien à dire sur le code Rust. En d'autres termes, « personne n'est obligé de traiter avec Rust » n'implique pas que « tout le monde est autorisé à opposer son veto à tout code Rust ».

Une réponse loin de faire l'unanimité

Si certains ont apprécié le retour plus modéré d'un Linus Torvalds qui aurait, selon eux, été plus incendiaire il y a deux décennies, d'autres estiment que le problème n'est pas résolu en réalité. Nous avons par exemple ce développeur qui indique qu'il s'y prend « trop tard » (le débat a débuté depuis plusieurs mois déjà) et qu'en plus il ne répond pas vraiment aux arguments avancés :

« Le problème est que les développeurs C ne veulent pas maintenir le code Rust. Les développeurs de Rust disent qu'ils le feront. Le problème est que la règle de Linus dit que les développeurs C sont obligés de réparer le code Rust s'ils le cassent, et donc, l'idée que "vous ne pouvez pas contrôler les utilisateurs de votre code" tombe à plat, parce que la règle de Linus dit qu'ils sont obligés de maintenir tous les utilisateurs de leur code, ce qui signifie maintenant qu'ils doivent maintenir le code Rust. C'est la question fondamentale que les deux parties doivent accepter. Le fait que les développeurs de R4L disent qu'ils s'occuperont du problème quand il sera cassé ne changera rien au fait que les règles de Linus disent que cela ne doit pas se produire en premier lieu. Et non seulement cette règle doit changer, mais les développeurs C only doivent croire que Linus ne va pas simplement revenir sur ce changement de règle à l'avenir. Plus Linus attendra pour régler ce problème, plus il y aura de drames et moins les gens pourront croire que Linus ne...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 24/02/2025 à 1:04
Citation Envoyé par djm44 Voir le message
Mais on répète sans cesse cette histoire de sécurité avec Rust alors qu'il est parfaitement possible de faire un code sûr en C et mieux encore en C++.
Pourtant comme je l'ai explicité dans le premier paragraphe du message cité, on voit bien que qu'un nombre très important d'erreurs passe malgré toute la compétence des gens qui développent et relisent le code de Linux (plus d'un millier de CVE l'année dernière pour les erreurs de corruption mémoire).

Citation Envoyé par djm44 Voir le message
Les deux langages ne vont pas évoluer dans le même sens .
C'est pas très clair pour moi ce qui est entendu par là.

D'un point de vue logique, évidement que les langages ont des différences, sinon on se serait contenté d'un seul. Mais il sont interopérables et et gardent l'objectif d'être adapté au bas niveau. Je dirais même au contraire qu'ils se sont plutôt rapprochés avec l'arrivée de Rust for Linux. En effet Rust à priorisé certaines évolutions pour améliorer l'intégration de Rust à Linux.

D'un point de vue technique, le C de base évolue très peu, et absolument pas dans un sens qui pose problème à Rust, au contraire. Quant à Rust, ses évolution sont tout à fait compatibles avec le C et le bas niveau, y compris en ce qui concerne l’interfaçage avec le C.

Citation Envoyé par djm44 Voir le message
Cela demande une double compétence qui va réduire le nombre de développeurs pouvant contribuer au noyau linux. C'est cela le cancer du Rust.
Si Rust a été choisi c'est parce qu'il est attendu qu'à terme, les bénéfices surpassent les problèmes que ça pose.

Vu que le choix d'utiliser d'utiliser Rust se fait par sous-système selon la volonté de leurs mainteneurs, il est prévu que l'impact soit faible pour les mainteneurs existants. La complexité supplémentaire se limitant à la transition entre les sous-systèmes en C et ceux en Rust, travail qui est généralement à la charge du projet Rust for Linux. C'est justement ce qu'indique la réponse de Linus Torvalds : Christoph Hellwig se plaignait des problèmes que Rust allait introduire en terme de maintenance alors que son sous-système n'était absolument pas impacté. C'est le projet Rust for Linux qui a développé l'interface DMA pour Rust et était en charge de la maintenir.
5  2 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 24/02/2025 à 18:36
Citation Envoyé par garvek Voir le message
Pour moi, passer à Rust coûte que coûte pour éviter les soucis de mémoire n'est pas la bonne solution.
J'ai l'impression de devoir répéter tous les dix messages qu'il ne s'agit pas d'imposer Rust a marche forcée quand on a déjà un code C robuste, juste de l'autoriser au cas par cas pour les sous systèmes qui en ressentiraient le besoin, particulièrement les nouveaux drivers. Actuellement il n'est pas utilisé ailleurs que pour de nouveaux drivers. La question de remplacer le C existant n'est pas à l'ordre du jour.

Citation Envoyé par garvek Voir le message
C'est un peu comme passer à Java en se disant que ça supprime les soucis d'allocation mémoire.
La situation est quand même relativement différente de Java dans le sens ou Rust est clairement un langage adapté au bas niveau.

Citation Envoyé par garvek Voir le message
Inversement, à l'heure actuelle les différents programmes que j'ai pu voir en Rust ont une syntaxe vraiment très contraignante et posent de sérieux soucis de lisibilité. De plus la toolchain est encore jeune et évolue fortement d'année en année.
Je ne sais pas quel est ton niveau d'expérience avec Rust, mais je pense que c'est vraiment juste une question d'habitude. Globalement, je trouve le Rust bien plus lisible que le C.

Citation Envoyé par garvek Voir le message
Si l'on combine la technicité très élevée du code noyau, l'aspect très chronophage qui n'est plus compatible avec nos modes de vie actuels et la dette technique qui peut rendre le portage ou la maintenance un calvaire, sincèrement je ne pense pas que pour attirer les nouveaux, en particulier jeunes, est "juste" changer de langage et justifier par un gain de sécurité.
Justement, les retours d'expérience de ceux qui ont développé des quantités de code significatives pour des drivers Rust (en particulier Asahi Lina) est que le langage leur a permis d'être plus productif en perdant moins de temps sur les problèmes technique qui étaient immédiatement identifiés par le compilateur.
5  2 
Avatar de djm44
Membre régulier https://www.developpez.com
Le 25/02/2025 à 0:26
Citation Envoyé par garvek Voir le message

Je ne comprends pas l'analyse qui dit que Rust est choisi pour attirer les jeunes développeurs. Dans le domaine de la Cyber oui c'est abordé, mais sinon les jeunes développeurs sont plutôt formés au Python, et encore au C/C++ ou au Java pour beaucoup d'applications, y compris dans l'embarqué.

Inversement, à l'heure actuelle les différents programmes que j'ai pu voir en Rust ont une syntaxe vraiment très contraignante et posent de sérieux soucis de lisibilité. De plus la toolchain est encore jeune et évolue fortement d'année en année.
Je suis d'accord avec cette remarque. On est loin d'avoir une pénurie de développeurs en C et C++. C'est plutôt du côté de Rust que les développeurs manquent ce qui s'explique facilement. Mais on surestime sans doute l'apport de Rust sur ses facilités de débusquer les erreurs à la compilation alors qu'en C on les observe à l'exécution du code. On peut faire du code sur en C et C++ s'il faut le souligner. La sécurité Rust n'est qu'un détail dans le processus de développement. Et le code de Rust n'est pas très ergonomique c'est une écriture surchargée. Le C++ aussi peut aboutir à une écriture inutilement opaque.
4  1 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 25/02/2025 à 10:42
Citation Envoyé par garvek Voir le message
Je n'ai pas d'expérience en Rust sur du code bas niveau, je ne l'ai vu que dans le cadre de programmes réseau. Dans ce contexte la performance est secondaire et on empile les crates network/sécu et les fonctions avec des contraintes dans tous les sens ... La perspective de retrouver ça ailleurs me fait un peu peur. Côté syntaxe, je pense qu'il y a beaucoup d'habitude mais de là à dire que c'est plus simple que le C ... (je pense notamment aux séquences avec plein de qualifiers et de | & ...), mais plus lisible que le C++, je suis plutôt d'accord.
Il est vrai que parfois Rust va être plus verbeux que du code C simpliste, mais cette verbosité supplémentaire est souvent ce qui permet d'assurer la sécurité. Un code C aussi sûr serait probablement aussi verbeux et moins lisible.

Par exemple le Rust va obliger à prendre en compte les erreurs via le type Result<Ok,Err>, ce qui peux impliquer des ? pour remonter l'erreur ou des lambda pour les traiter, mais au final c'est bien mieux cadré que le C qui va retourner parfois un null, parfois un code magique, ou un errno qui peuvent être ignorés sans que ça soit manifestement visible.
4  1 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 03/03/2025 à 7:47
Citation Envoyé par VBurel Voir le message
Une condition qui ferait venir des développeurs (comme moi ou d’autre) c’est d’avoir une gestion de projets aboutie, ou l'on peut monter des fichiers sources (généralement sur disque réseau local) et définir des options de compilation pérennes.
C'est la base de ce que permet un IDE non ? J'ai pas utilisé énormément d'IDE pour C, mais il me semble bien que Qt Creator ou Code::Block proposent ça. Même VS Code avec juste quelque plugins peut faire ça.

Citation Envoyé par VBurel Voir le message
Le but étant d’avoir une espace de travail ou l’ont construit des projets dans la durée, qu’on peut faire évoluer dans un univers cross-plateforme, comme on peut le faire avec XCODE et VisualStudio par exemple.
Pour le coup Visual Studio et XCode, c'est plutôt l'inverse de la portabilité vu qu'au contraire ils sont taillés respectivement pour Windows et Mac.

Après si tu veux que ça soit l'IDE qui gère le build et pas les Makefile via les différents outils pour les générer (autotools, CMake, ...), en effet il va y avoir un soucis, car c'est revoir tout le modèle de développement de Linux.
Si as peur des impacts potentiels de Rust dans le noyau, je pense que tu n'es pas prêt au bordel que ça serait pour les mainteneurs actuels de changer le mode de build de milliers de projets.

Citation Envoyé par VBurel Voir le message
Pour moi c’est le prérequis pour faire venir des légions de développeurs sur linux, et le fait que ce ne soit pas déjà fait, comme une priorité première, est un très mauvais signal. Ca veut dire qu’il n’y a personne qui comprend les besoin des développeurs d’applications…
Bah pour le coup Rust est donc un très bon moyen de faire venir des développeurs sur Linux vu qu'il propose un écosystème cohérent, un système de build standard, une arborescence claire et efficace, un analyseur qui peut être facilement branché sur un IDE pour qu'il gère le langage.

Citation Envoyé par VBurel Voir le message
Dans ce contexte, les débats sur la sécurisation de la mémoire ou l’implémentation d’autre langage que le C ou le C++ paraissent totalement hors sujet.
Tu mélanges encore le noyau et un OS en général. Une distribution Linux c'est des milliers de projets qui sont très décorrélés au niveau de la gestion de l'effort, le noyau n'étant que l'un d'entre eux. Déshabiller un projet ne permettra pas d'améliorer l'autre.
D'ailleurs la très très très très grande majorité du travail actuel rien que sur le noyau ne concerne pas l'introduction de Rust. Ne parlons même pas d'une distribution dans son ensemble.

Citation Envoyé par VBurel Voir le message
La portabilité n'est pas une question. Je parle de la capacité de gérer des projets avec des sources éparpillés sur des disques locaux ou réseaux (possiblement utilisé dans d'autres projets sur d'autre plateforme) et avoir un projet de compilation comme on a sur tout IDE Visual ou XCode, et ca a commencé avec Borland C++ et Visual en 1995 ou par là.
Je sais pas si tu te rends compte que tu ériges un besoin très spécifique qui ne doit vraiment pas concerner grand monde comme la condition de succès absolue d'un écosystème. Pas grand monde ne travaille avec le source sur des lecteurs réseau de nos jours, on utilise des dépots de git, svn ou autre.
D'ailleurs un lecteur réseau étant montable comme n'importe quel répertoire, je vois pas pourquoi, n'importe quel IDE ne pourrait pas faire ça.
3  0 
Avatar de floyer
Membre éclairé https://www.developpez.com
Le 23/02/2025 à 21:43
Oui, il est possible de faire de C sûr… tous les programmes Hello world l’attestent, et à un autre bout de complexité, SeL4 l’atteste aussi… avec une subtilité : toute l’énergie dépensée à coder en C sur SeL4 est dépensée avec un facteur 6 ou 7 pour formaliser des éléments de preuve de conformité du code C, chose qu’aucun développeur Linux ne fait.

Côté Linux, il convient de regarder le nombre de CVE pour mauvais usage de mémoire. Certes, il aurait été théoriquement possible de les éviter, mais cela reste de la théorie remise en cause par la pratique.

Rappelons que Linux fait 28 millions de lignes de code… une erreur toutes les 10 000 (ou même 100 000) lignes font beaucoup de bugs.
5  3 
Avatar de floyer
Membre éclairé https://www.developpez.com
Le 25/02/2025 à 11:58
Citation Envoyé par djm44 Voir le message
Mais on surestime sans doute l'apport de Rust sur ses facilités de débusquer les erreurs à la compilation alors qu'en C on les observe à l'exécution du code. On peut faire du code sur en C et C++ s'il faut le souligner.
Pour les problèmes d’allocation, Rust les détecte à la compilation… c’est mieux qu’une erreur aléatoire à l'exécution qui peut passer inaperçue.

Pour les dépassement de tableaux, il est plutôt question d’exception : une erreur franche à l’exécution plutôt que des effets de bords donnant un résultat aléatoire.

Il n’y a pas de surestimation. Cela ne couvre pas tous les causes de bug, mais un outil qui en supprime me semble préférable à un outil moins sûr.

Oui, faire du code sûr, mais sur des projets de taille modeste… à moins de considérer les développeurs de Linux qui y ont commis des CVE comme mauvais.
3  1 
Avatar de floyer
Membre éclairé https://www.developpez.com
Le 09/03/2025 à 12:06
D’ailleurs en parlant d’éditeurs de logiciels qui ont des produits sous Linux, on peut citer JetBrains. JetBrains est une référence en matière d’IDE dans une multitude de langages. Difficile de considérer qu’il n’existe pas d’IDE valables sous Linux.
2  0 
Avatar de floyer
Membre éclairé https://www.developpez.com
Le 24/02/2025 à 20:14
@garvek… Java manque d’un compilateur en langage machine et le GC est probablement inadapté pour un système d’exploitation. Rust arrive à des capacités proches en étant de plus bas niveau : pas de GC, langage machine en cible mais met plus de charge pour le développeur (prise en compte des contraintes d’emprunt).
1  0 
Avatar de fdecode
Membre habitué https://www.developpez.com
Le 25/02/2025 à 11:03
Citation Envoyé par garvek Voir le message
Je n'ai pas d'expérience en Rust sur du code bas niveau, je ne l'ai vu que dans le cadre de programmes réseau. Dans ce contexte la performance est secondaire et on empile les crates network/sécu et les fonctions avec des contraintes dans tous les sens ...
Comme d'autres l'ont mentionné, le système de repository de Rust (crates) qui ne m'a pas trop posé de problèmes de conflits jusqu'à présent, amène à constituer les projets à partir de plusieurs crates. Il faut bien les choisir, et favoriser ce qui est éprouvé.
Par contre, la sécurisation du langage Rust et son expressivité permettent aussi de se laisser aller à des architectures complexes pour les projets et les librairies, notamment avec un objectif de généricité; on peut construire quelque chose de complexe sans que cela explose; car le langage et son infrastructure sont puissants. Pour autant, c'est à éviter. Je fais attention maintenant à simplifier mes approches lorsque je développe en Rust.
1  0