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 !

« Les développeurs Linux sont des mégalomanes pédants et condescendants », d'après le créateur de redox_os
Remonté contre les habitués du C qui freinent les mises à jour de la base de code du noyau vers Rust

Le , par Patrick Ruiz

26PARTAGES

11  0 
Après plus de 30 ans, un deuxième langage a fait l’objet d’adoption pour le développement du noyau Linux : Le Rust. Linus Torvalds vient de faire un bref état des lieux en termes d’adoption après une année : le taux d’adoption de Rust comme langage de programmation pour le noyau Linux reste faible. Le créateur de Linux a exprimé sa déception à propos de cette situation dont la raison profonde est en train de faire surface : Les principaux mainteneurs du noyau sont plus habitués au langage C et veulent poursuivre sur cette lancée. Ils refusent donc de porter le code existant en Rust ou de passer du temps pour aider d’autres contributeurs à le porter en Rust.

C’est le débat sur la comparaison entre les langages de programmation C et Rust qui prend un coup de neuf

Les rapports en lien avec cette situation font en effet état de ce qu’un sous-ensemble de contributeurs au noyau en langage C sont déterminés à rendre la vie dure aux mainteneurs Rust. Motif : Ils considèrent que Rust n’apporte pas de plus-value significative et préfèrent donc que ce langage de programmation soit mis de côté dans le cadre du développement du kernel.


Linus Torvalds lui-même est pourtant d’avis que le langage Rust est une solution d’avenir pour le développement du noyau. Il 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. » Rust de Mozilla Research est le type de langage de programmation auquel ceux qui écrivent du code pour des systèmes d’entrée/sortie de base (BIOS), des chargeurs d’amorce, des systèmes d’exploitation, etc. portent un intérêt. D’avis d’observateurs avertis, c’est le futur de la programmation système en lieu et place du langage C. En effet, des experts sont d’avis qu’il offre de meilleures garanties de sécurisation des logiciels que le couple C/C++. Chez AWS on précise que choisir Rust pour ses projets de développement c’est ajouter l’efficacité énergétique et la performance d’exécution du C à l’atout sécurité.

En effet, il y a une liste de griefs qui reviennent à l’encontre du langage C : les problèmes liés à la gestion de la mémoire – dépassements de mémoire tampon, allocations non libérées, accès à des zones mémoire invalides ou libérées, etc. D’après les chiffres du dictionnaire Common Vulnerabilities and Exposure (CVE), 15,9 % des 2288 vulnérabilités qui ont affecté le noyau Linux en 20 ans sont liées à des dépassements de mémoire tampon.

De plus, certains benchmarks suggèrent que les applications Rust sont plus rapides que leurs équivalents en langage C. Et c’est justement pour ces atouts que sont la parité en termes de vitesse d’exécution en comparaison avec le C, mais surtout pour la sécurisation et la fiabilité que de plus en plus d’acteurs de la filière du développement informatique recommandent le Rust plutôt que le C ou le C++.

Ainsi, en adoptant Rust, la communauté autour du noyau Linux devrait mettre à profit ces 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.


Les habitués du langage C n’entendent pas se laisser embarquer dans ce qu’ils appellent la nouvelle religion du Rust

Les mainteneurs du noyau réfractaires à la mise à jour des bases de code du noyau Linux vers le langage Rust ont fait savoir quelle est leur position lors d’une présentation des systèmes de fichiers Linux et des besoins en termes de migration des bases de code vers le Rust. Il était question pour ces derniers de créer des passerelles permettant de faciliter l’atteinte de cet objectif. L'un des membres de l'auditoire a exprimé son désaccord en disant : « Vous essayez de convaincre tout le monde de passer à la religion du Rust, mais cela n’arrivera pas. »


Ces derniers multiplient donc des attitudes qui frustrent certains mainteneurs Rust qui choisissent de quitter le navire : « Ce type de traitement est exactement la raison pour laquelle j'ai entamé le projet @redox_os en partant de zéro et en l'écrivant principalement en Rust. Il y a beaucoup de résistance aux changements bénéfiques, même mineurs, dans Linux et les projets connexes. C’est la raison pour laquelle je n'essaie même plus de contribuer au noyau Linux. Il y a des projets pour lesquels vous devrez inévitablement faire passer vos changements devant des mégalomanes pédants et condescendants, et si le noyau Linux n'est pas seulement développé par ce type de personnalité, il est aussi contrôlé par lui de manière écrasante. »


Certains des mainteneurs pointent des raisons additionnelles comme l’instabilité de l’infrastructure Rust comme raison de poursuivre avec le C

Greg Kroah-Hartman, le mainteneur du noyau stable, a dit qu’il n’était pas opposé à l’idée d’une branche Rust, mais qu’il faudrait qu’elle soit maintenue par quelqu’un d’autre que lui. Il a aussi demandé comment le code Rust serait testé, et s’il y aurait des outils pour vérifier la qualité du code et la conformité aux normes de codage du noyau. Ojeda a répondu qu’il y avait déjà des outils pour le formatage du code Rust, et qu’il travaillait sur un outil pour vérifier les règles spécifiques au noyau. Il a aussi dit qu’il y avait des tests unitaires pour le code Rust, et qu’il espérait que le code Rust serait intégré dans les systèmes de test existants du noyau.

Dave Chinner s'inquiète du fait que les responsables manquent d'expertise pour examiner correctement les abstractions en cours de fusion. Airlie a répondu que les responsables fusionnent désormais de nombreuses API C sans vraiment comprendre comment elles fonctionnent. De nombreuses erreurs ont été commises au cours du processus, mais « nous sommes toujours là ». Lorsque des choses s’avèrent être cassées, elles peuvent être réparées, et cela se produira plus rapidement si le code remonte en amont.

Ted Ts'o s'est dit préoccupé par le fardeau que l'ajout du code Rust imposerait aux responsables. Les développeurs de Rust établissent des normes plus élevées que celles fixées par le passé, a-t-il déclaré. Fusionner de bonnes abstractions est une chose, mais qui est responsable de la révision des pilotes et comment les modifications à l'échelle de l'arborescence seront-elles gérées ? L’effort de Rust, a-t-il dit, arrive à un point où il touche une partie croissante de la communauté.

Williams a souligné que durant la session précédente, la difficulté de faire migrer les sous-systèmes du noyau vers de nouvelles API avait été évoquée ; maintenant, dit-il, on parle de passer à un tout nouveau langage. Hellwig a déclaré que le vrai problème est que les liaisons Rust ont tendance à fonctionner différemment des API C pour lesquelles elles fournissent des abstractions ; les nouvelles API sont peut-être meilleures, mais ce sont toujours des API complètement nouvelles. Ce qu’il faudrait faire, dit-il, c’est d’abord corriger les API C afin qu’elles soient directement utilisables par le code Rust. Il a proposé que, pour chaque sous-système envisageant d'introduire du code Rust, un an ou deux soient d'abord consacrés au nettoyage de ses API dans ce sens. Ojeda a déclaré que ce type d'amélioration de l'API s'était déjà produit dans certains sous-systèmes.

Linus Torvalds a déclaré qu'il voyait un fossé entre le système de fichiers et les responsables des pilotes. Les développeurs du côté des systèmes de fichiers ont tendance à être plus conservateurs, tandis que le monde des pilotes « c'est le Far West ». Les auteurs de pilotes ont tendance à ne pas comprendre la concurrence, a-t-il déclaré, et une grande partie du code est défectueux et irréparable. Il n’est donc pas surprenant qu’il y ait un intérêt à introduire un langage qui prenne mieux en charge l’écriture d’un code correct et sûr.

Brauner a déclaré que Rust peut aider à résoudre de nombreux problèmes, car le compilateur peut empêcher de nombreux bogues de pénétrer dans le noyau. Mais il s'inquiétait de savoir s'il y aurait un support pour le mainteneur et le développement dans quelques années. Airlie a de nouveau mentionné les développeurs avec du code hors arborescence nécessaire au code Rust; Cook a répondu que les personnes qui supervisent ce code sont des responsables, et que l'introduire entraînerait les responsables avec lui. Airlie a ajouté que ces responsables sont le genre de jeunes développeurs que la communauté du noyau aimerait attirer.

Ts'o a demandé quand la communauté se sentirait suffisamment en confiance pour pouvoir avoir des modules dont la seule implémentation est dans Rust. Binder pourrait être un bon début, a-t-il déclaré, peut-être suivi par un pilote dont l'utilisation serait plus large. Airlie a déclaré qu'il envisageait un pilote graphique virtuel qui réimplémenterait un pilote C existant. Il existe également le pilote pour les GPU Apple M1. Il ressent une forte pression pour l'amener en amont et se demande s'il y a une raison pour laquelle il devrait le garder à l'écart. Après cela, il adorerait voir une réécriture du pilote Nouveau pour les GPU NVIDIA.

Arnd Bergmann a déclaré que ces pilotes pourraient être OK, mais qu'il faudra un peu plus de temps avant que quelque chose comme un pilote de clavier puisse être fusionné ; La chaîne d'outils n'est tout simplement pas prête, a-t-il déclaré, pour un pilote qui serait largement utilisé. Cela a conduit à une question sur les mises à niveau fréquentes de version observées dans le noyau, qui est passé à Rust 1.73.0 pour 6.7. Ce processus de mise à niveau finira par s'arrêter et une version minimale de Rust sera définie une fois que les fonctionnalités importantes dont dépend le noyau se seront stabilisées. Il a déclaré qu'il travaillait pour intégrer le code du noyau dans les tests d'intégration continue de Rust afin de garantir qu'il continue de fonctionner à mesure que le compilateur et le langage évoluent.

Bergmann a déclaré qu'il n'avait pas l'intention d'examiner sérieusement le langage jusqu'à ce qu'il puisse être compilé avec GCC. Torvalds a répondu que, même s'il avait l'habitude de trouver des problèmes dans le compilateur LLVM Clang, il est désormais plus susceptible de rencontrer des problèmes avec GCC ; il construit maintenant avec Clang. Ojeda a déclaré qu'il travaillait à la recherche de ressources de développement pour gccrs ; le projet repose actuellement sur plus de 800 correctifs hors arborescence et a encore beaucoup de travail à faire en plus. Le soutien du CCG prendra du temps, a-t-il déclaré.

Ts'o s'est plaint du fait que le langage n'est toujours pas entièrement stable. Cela pourrait constituer un problème particulier pour la communauté informatique confidentielle ; ils sont préoccupés par la sécurité et, par conséquent, par les rétroportages vers des noyaux supportant à long terme. Mais si ces noyaux sont sur des versions Rust différentes, ces rétroportages seront problématiques. Ojeda a déclaré que, bien qu'il s'agisse d'une "idée folle", le rétroportage des mises à niveau de version pourrait être envisagé. Il ne pense cependant pas que le taux de changement sera suffisamment élevé pour constituer un problème.

En conclusion, Torvalds a souligné qu'il y avait eu des problèmes au fil des années avec les changements de GCC qui cassaient le noyau ; la même chose arrivera sûrement avec Rust, mais ce sera finalement la même chose. La séance, bien au fil du temps, a été interrompue à ce stade. Reste à savoir si la communauté du noyau a réellement conclu à son engagement envers Rust ; il y aura presque certainement des Pull Request ajoutant du code Rust important dans un avenir proche.

Et vous ?

Quels sont les avantages et les inconvénients de Rust par rapport au C pour le code du noyau ?
Pourquoi le langage C pourrait encore avoir de longues années devant lui ?
Le C a-t-il vraiment besoin d’un remplaçant en matière de programmation système ?
Le problème avec le C n’est-il pas plutôt le mauvais usage que certains développeurs en font ?
Voyez-vous des firmes comme Intel faire migrer des projets comme l’UEFI vers le Rust ? Doivent-elles plutôt envisager de passer au Rust pour leurs futurs projets ?

Voir aussi :

Programmation : une étude révèle les langages les plus voraces en énergie, Perl, Python et Ruby en tête, C, Rust et C++, les langages les plus verts

Linus Torvalds souligne une bonne avancée du langage Rust dans le développement du noyau Linux, et aurait qualifié le C++ de « langage de m... », après le message de Google

Microsoft, Google, AWS, Huawei et Mozilla s'associent pour créer la Fondation Rust, une organisation à but non lucratif chargée de gérer le langage de programmation

Facebook rejoint AWS, Huawei, Google, Microsoft et Mozilla dans la Fondation Rust, et renforce son équipe Rust par des nouveaux talents

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

Avatar de denisys
Membre chevronné https://www.developpez.com
Le 03/09/2024 à 18:59
Remonté contre les habitués du C qui freinent les mises à jour de la base de code du noyau vers Rust
Pour faire une bonne vinaigrette.
Il faut de l’huile et du vinaigre !!!!


A mon point de vue, ce n’est qu’une question de temps et de génération.
Ma génération, qui a étais élevé au bon code en C et C++, vers la fin du siècle dernier (1992).
Les jeunes et futures générations qui intégrerons et compileront plus facilement le code en Rust.

Moi, quand j’ai commencé à développer, le Java Scripte n’existais pas.
Aujourd’hui, tous les jeunes savent coder en Java Scripte.

Haaa !!!
Il ne faut pas oublier, non plus, que le créateur de PHP a conçu ce langage en C, parce que il en avait marre de répéter les mêmes routines en C, pour construire des pages Internet , a l’époque.

C’est une question de temps, uniquement !!!
13  0 
Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 03/09/2024 à 20:00
Cette "mégalomanie" existe dans toutes les équipes qui sont formattés à travailler avec un langage informatique. Vous allez dans les banques où on fait du COBOL, les développeurs rabaisseront ceux qui font du Java pour sa syntaxe, ceux qui font du Java rabaisseront ceux qui font du NodeJS/TypeScript pour son manque de typage runtime, ceux qui font du NodeJS/TypeScript rabaisseront ceux qui font du Python pour ses performances, et généralement tout le monde excepté ceux qui font du PHP rabaisseront PHP

Il faut aller au-delà de cela, de cette passion qui nous anime pour un langage informatique, parce que oui nous avons appris, travaillé et en quelque sorte "grandi" avec un certain langage, et on arrive d'ailleurs à reconnaitre les générations grâce à leur formation universitaire Pascal, C++, Java, et plus récemment Python... Et je comprends aussi que certains en ait marre d'apprendre le dernier langage à la mode (je pense personnellement aux langages JVM tels que Scala complètement mort et Kotlin propulsé par IntelliJ+Google suite au procès d'Oracle en ayant fait du Java), ce qui me perturbe c'est que Rust soit considéré comme une mode ou bien les goûts syntaxiques évoqués par certains pour ne pas adopter le Rust. Rust est basé sur le retour d'expérience des langages existants, il existe des raisons pour laquelle Rust inclu/limite des features, comme pourquoi il n'y a pas d'héritage à plusieurs niveaux, pourquoi on continue à utiliser le point-virgule etc (je ne vais pas rentrer dans les détails ici)

Un langage informatique est un outil, ce n'est pas votre enfant ou votre animal de compagnie, l'affect n'a pas lieu d'être. Il faut citer les "vrais" avantages et inconvénients techniques de Rust pour être juste, Rust n'est pas parfait : moins de libraries contrairement à Go qui est supporté par Google (quelqu'un sait s'il existe un driver Sybase en Rust ? ), lent à compiler etc... mais en tant qu'expert seriez-vous capable de me citer des langages libres (compilateur inclu) qui sont à la fois memory-safe, null-safe, thread-safe et qui ne requirent pas une VM que l'on doit installer et qui doit gérer un système de ramasse-miettes ?

Bref, pour en revenir à Linux, bien que le C soit un langage simple et très apprécié, ce dernier ne respecte pas les critères cités au-dessus (je vous invite à regarder les taux des failles de sécurités causés par l'absence du memory-safe ou null-safe), donc qui maintiendra aussi bien le noyau lorsque Linus Torvalds ne sera plus de ce monde ?
7  0 
Avatar de kain_tn
Expert éminent https://www.developpez.com
Le 03/09/2024 à 21:20
Citation Envoyé par Gugelhupf Voir le message
Cette "mégalomanie" existe dans toutes les équipes qui sont formattés à travailler avec un langage informatique.
Je dirais même: Cette "mégalomanie" existe dans toutes les équipes qui sont formatées à travailler avec un seul langage informatique.

Citation Envoyé par Gugelhupf Voir le message
Un langage informatique est un outil, ce n'est pas votre enfant ou votre animal de compagnie, l'affect n'a pas lieu d'être. Il faut citer les "vrais" avantages et inconvénients techniques de Rust pour être juste,
Je ne suis que partiellement d'accord. Je pense personnellement qu'il y a une forme d'art à concevoir et écrire du code. Il y a tout simplement quelque chose de plaisant et d'harmonieux à voir les patterns se former, les couches communiquer. Il y a de la beauté dans certaines expressions épurées.

Et dès le moment où ce n'est plus seulement un outil ou un travail alimentaire, alors les goûts de tous entrent en considération, un peu comme pour la musique et pour tant d'autres sujet ou soudain tout le monde a un avis extrêmement tranché sur ce qui est bien et ce qui ne l'est pas.

J'aime bien la syntaxe de Rust, mais ça doit venir du fait que j'ai pratiqué plusieurs langages assez différents au lieu de me spécialiser dans un seul, et du coup, mes goûts personnels ont évolué avec chaque langage et la philosophie qu'il portait.

J'essaye toujours de choisir mes outils en fonction des avantages qu'ils vont me procurer, mais il y aura toujours certains outils qui me plairont plus que d'autres pour une question de goûts personnels, sur un périmètre donné.

Bien entendu, quand on collabore sur un projet, il faut être capable de faire des compromis, comme sur le style par exemple, pour garder une base de code maintenable et compréhensible.

Je pense que le gros souci, là, c'est qu'il y a deux langages avec une philosophie différente, et sur deux périmètres différents: un est à l'origine de l'ensemble du noyau, l'autre n'est utilisé que pour certains modules (souvent nouveaux), et c'est peut-être vu par certains développeurs comme du code de seconde zone - d'où le manque d'effort et d'engouement de leur part.

Et le gars de redox_os fait un peu le malin dans son tweet et en profite pour se faire de la pub, mais je suis certain que si demain, ses nouveaux modules étaient développés en Lua (pour gagner du temps sur la compilation, puisque tu as évoqué le temps de compilation de Rust) avec le reste en Rust, il y aurait la même animosité de la part d'une partie de ses développeurs, et peut-être une forme de mépris.

Désolé pour le pavé, mais ta réponse m'a inspiré!
7  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 04/09/2024 à 23:03
Citation Envoyé par OuftiBoy Voir le message
Si de nouveaux mainteneurs veulent introduire (ce qui n'est pas interdit) le Rust c'est à eux qu'ils revient la charge d'une bonne introduction.
Et c'est exactement le cas. L'introduction de Rust a été faite de manière prudente en limitant Rust a des modules isolés. Les gens qui travaillent sur Rust4Linux ne demandent pas aux contributeurs qui ne sont pas intéressés par les modules en Rust de lire, ni d'écrire la moindre ligne de Rust.
A priori, la seule chose qui leur a été demandée c'est, dans certains cas, d'expliciter les règles que doivent actuellement respecter l'API des drivers, bref des choses qui sont de toute façon nécessaire pour faire des drivers C corrects et qui auraient dues être officiellement documentées. Le système de type de Rust permettra d'assurer que ces contraintes soient respectés, corrigeant en partie le problème du manque de documentation des API actuelles.

Citation Envoyé par OuftiBoy Voir le message
Quand je lis: Les principaux mainteneurs du noyau sont plus habitués au langage C et veulent poursuivre sur cette lancée. Ils refusent donc de porter le code existant en Rust ou de passer du temps pour aider d’autres contributeurs à le porter en Rust. Je suis tout à fait d'accord avec eux.
Ce qui tombe bien, car on ne leur demande pas, même si certains se plaignent comme si c'était le cas

Citation Envoyé par OuftiBoy Voir le message
Les mainteneurs historique ne veulent pas aider d'autres contributeurs à le porter en Rust. Ils sont là pour coder ces vieux développeurs barbus, ils ne sont pas des instituteurs ou des formateurs pour expliquer à d'autres comme faire un portage vers un autre langage qu'une nouvelle génération veut utiliser.
On ne leur demande évidement pas non plus des cours magistraux de C. Les gens qui travaillent sur Rust4Linux connaissent bien évidement le C.

Citation Envoyé par OuftiBoy Voir le message
On parle ici des développeurs extrêmement expérimentés du noyaux. S'il considèrent que Rust n'apportent pas de plus-value significativement au kernel on peut quand même prendre leur opinion au sérieux, me semble-t-il ?
On peut les écouter attentivement, sans pour autant prendre tout ce qu'ils disent pour parole d'évangile. Je suis prêt a entendre que le Rust pourrait poser plus de problèmes qu'il apporte de solution, mais pour le moment les arguments avancés ne sont généralement pas pertinents. Particulièrement pour ceux qui sont virulents, j'entends plus une résistance de principe que de vrais arguments. Quand j'entends le mainteneur dire qu'il ne veut pas de la religion du Rust, je pense que c'est assez symptomatique de sa vision et qu'il défend lui même la religion du C sur une base plus dogmatique que pragmatique.

Citation Envoyé par OuftiBoy Voir le message
Voilà une partie très intéressante. Je reprend les chiffres donnés: 2288 en 20 ans. 2288/20 = 144,4. 15,9% de ces vulnérabilités à des problèmes lié au C (gestion mémoire, dépassement de tampons, allocation non libérées, accà des zones mémoire invalide ou libérée, etc)
15,9% c'est juste pour le dépassement de tampon, ce qui n'est qu'une partie des erreurs de sécurité mémoires. J'ai pas de chiffres dont je suis certain pour le cas particulier de Linux, mais de ce qu'on constate en général sur les grosses applications C on est généralement au dessus de 60% de failles majeures dues à la sécurité mémoire. Si on en crois ce site, sur les dernières années plus de 99% des failles sont dues à la sécurité mémoire.

Citation Envoyé par OuftiBoy Voir le message
Bien, certains benchmarks, disent que Rust. Mais de combien de % sont-elles plus "rapide" ? Pas de grand chose, et d'autres benchmarks disent le contraire.
En effet l'approche la plus correcte au niveau des performance, c'est de considérer que Rust et C sont en moyenne aussi rapides.

Citation Envoyé par OuftiBoy Voir le message
Une partie de ces "atouts" sont annihilés par le fait qu'il faut passer en mode "unsafe" pour certains accès au noyau. Et donc une partie de l'avantage de Rust s'évapore à cause de ce passage en mode "unsafe" qu'il est forcé d'utiliser à certains endroits.
L'existence du bloc unsafe n’annihile absolument pas tout l’intérêt de Rust. Le fait de contenir les risques de sécurité mémoire dans des petites sections clairement identifiées et donc plus facile a surveiller efficacement, reste un énorme avantage comparé à un langage qui est unsafe partout.

Citation Envoyé par OuftiBoy Voir le message
Je peux les comprendre... Quand il faut créer des "passerelles", ça ajoute une couche de complexité. Puisque ces "passerelles" sont apparement nécessaires pour l'introduction du code Rust dans le noyau, c'est à eux que revient cette chargent, et pour se faire, ils doivent être aussi compétant en C qu'en Rust.
Et c'est justement le cas.

Citation Envoyé par OuftiBoy Voir le message
Je ne connais pas ce projet @redox_os, mais s'il a fallut 30 ans pour que Linux soit ce qu'il est aujourd'hui, je doute fort que @redox_os le fasse en quelques années seulement.
Bien évidement qu'on ne va pas refaire Linux à l'identique avec 10 fois moins de temps et de contributeurs. Il n’empêche que Redox est d'une qualité surprenante au vu de son jeune age et de son équipe limitée. De là à dire que Rust peut aider à développer du code de qualité plus vite, il y a un pas que je ne franchirais pas encore, mais je laisse la question en suspens.

Citation Envoyé par OuftiBoy Voir le message
Faut-il comprendre que pour certaines parties, Rust ne fait pas le taf ?
Même Linux n'est pas 100% en C, il contient de l'assembleur.
A ma connaissance le noyau de Redox est bien en Rust et le bootloader est en assembleur. Bien évidement les applications de l'espace utilisateur ne sont pas toutes en Rust. Beaucoup sont des portages d'application C (GCC, make, curl, ...)

Citation Envoyé par OuftiBoy Voir le message
Quand au fait de parler de faire passer vos changements devant des mégalomanes pédants et condescendants (je redis que je ne connaît pas cette communauté), et que de cela découle le fait de créer un nouveau noyaux (ou OS complet, je ne sais pas), montre en tout cas très peu d'humilité, mais également un sentiment de supériorité face à des gens qui ont fait leurs preuves depuis 30 ans.
Ce n'est certainement qu'une des raisons qui l'ont poussé a créer Redox OS, qui n'est pas un Linux réécrit en Rust, mais un OS structurellement très différent. C'est un micro-kernel, qui a la base ne visait pas la compatibilité directe avec POSIX, bien qu'il semble changer sur ce point.

Pour le reste je vais pas répondre sur tout au point par point parce que c'est très long et certain trucs sont beaucoup trop confus, ce qui est n'est pas vraiment votre faute vu que vous commentez la série de petites citations de l'article qui manquent énormément de contexte.

Citation Envoyé par OuftiBoy Voir le message
Et bien qu'il continue son travail sur cet outils, qui, d'après lui même n'est pas terminé. Puis il pourra avancer.
C'est évident, mais cette charge de travail revient à ceux qui veulent introduire Rust, et donc à la communauté Rust
Encore une fois personne ne dit l'inverse. Le projet Rust4Linux essaie de mettre en place toute l'infrastructure pour qu'écrire un driver en Rust soit le plus naturel possible et s’intègre au mieux dans l'existant. Le statut est toujours expérimental et tout n'est pas encore prêt mais ça n’empêche pas le travail d'avancer sans avoir d'impact négatif sur les développeurs actuel, a par les inciter à mettre au clair les éléments actuellement mal documentés de l'API, ce qui est une bonne chose même pour les drivers C.

Citation Envoyé par OuftiBoy Voir le message
Ce processus de mise à niveau finira par s'arrêter et une version minimale de Rust sera définie une fois que les fonctionnalités importantes dont dépend le noyau se seront stabilisées.
Cest du bon sens. Le noyau linux ne peut pas être construit sur un langage qui évolue toujours en permanance. Rust n'est pas "prêt" actuellement, laissons-le se stabiliser avant de l'intégrer dans un si grand projet.
Rust est stable (dans le sens rétrocompatible) depuis presque 10 ans, mais il continue d'évoluer et n'a pas de raisons de s’arrêter. Ca n'est pas un problème, au contraire, vu qu'il manque encore certaines fonctionnalité pour s'intégrer plus efficacement au noyau.

Citation Envoyé par OuftiBoy Voir le message
Ojeda a déclaré qu'il travaillait à la recherche de ressources de développement pour gccrs ; le projet repose actuellement sur plus de 800 correctifs hors arborescence et a encore beaucoup de travail à faire en plus...
Il n'y a peut-être pas autant de développeurs compétant que de développeurs C compétant. Rust est encore jeune.
C'est un plutôt le contraire, gcc étant écrit en C++, y compris le nouveau frontend pour Rust en cours de développement. La difficulté c'est surtout qu'il faut des développeurs qui maitrisent les arcanes de gcc et motivés pour y ajouter un fontend en Rust. Le compilateur de référence ne manque pas de contributeurs compétants.
4  0 
Avatar de fdecode
Membre habitué https://www.developpez.com
Le 04/09/2024 à 15:48
Citation Envoyé par OuftiBoy Voir le message
C'est cette génération qui doit faire le pas. S'il veulent ajouter Rust sans vouloir comprendre ou connaître le C, je ne vois pas comment ils pourraient le faire correctement. En gros, ils demandent aux autres de faire se travail pour eux.
À ce niveau, cela m'étonnerait que les contributeurs Rust ne connaissent pas le C.
Et en réalité, la connaissance du C facilite grandement la compréhension de Rust (de mon point de vue).
3  1 
Avatar de floyer
Membre confirmé https://www.developpez.com
Le 04/09/2024 à 18:36
Citation Envoyé par OuftiBoy Voir le message
.
Voilà une partie très intéressante. Je reprend les chiffres donnés: 2288 en 20 ans. 2288/20 = 144,4. 15,9% de ces vulnérabilités à des problèmes lié au C (gestion mémoire, dépassement de tampons, allocation non libérées, accà des zones mémoire invalide ou libérée, etc)

15,9% de 144,4, c'est en arrondissant [B]30[/], soit 1,5 vulnéralité par an. Comparée à l'immense base de code du noyau linux, c'est particulièrement faible. Et ça n'implique certainement de changer le langage utilisé pour ce noyau.
… pourquoi diviser 2288 par 20 deux fois… une fois pour passer à 144,4… puis une deuxième fois de 30 (qui représente déjà un nombre annualisé) à 1,5.

Une partie de ces "atouts" sont annihilés par le fait qu'il faut passer en mode "unsafe" pour certains accès au noyau. Et donc une partie de l'avantage de Rust s'évapore à cause de ce passage en mode "unsafe" qu'il est forcé d'utiliser à certains endroits.
Qu’une partie, et ça peut suffire pour éviter certains bugs: certaines protections de Rust restent en mode unsafe. Compile avec ou sans unsafe :

Code : Sélectionner tout
1
2
3
     let s1 = String::from("hello");
    let s2 = s1;
    println!("{s1}, world!");
Tu auras la même erreur liée aux emprunts (borrowing).

Idem pour les indices de tableau.

Et de manière plus générale, devoir placer des unsafe là où l’on s’écarte de certaines règles usuelles permet de situer là où il faut faire plus attention. L’idée est d’éviter de déclarer toutes les fonctions unsafe.

Principalement en Rust. Faul-t-ol comprendre que pour certaines parties, Rust ne fait pas le taf ?
Il est probablement difficile de faire de la commutation de processus sans assembleur (manipulation du registre CR3 x86). Idem pour plusieurs autres aspects d’un OS.
2  0 
Avatar de OuftiBoy
Membre éclairé https://www.developpez.com
Le 05/09/2024 à 19:53
Citation Envoyé par NotABread Voir le message
Quatre raison expliquent pourquoi un front-end rust n'a pas été fait avant:
- le besoin est né du projet Rust for linux
- ça ne fait pas si longtemps que ça que Rust s'axe plus sur la stabilisation, ce qui permet de développer le front-end sans trop avoir à écrire de code qui sera rendu obsolète ou à revoir parce qu'une feature a changée
C'est bien ce que je dis, "Rust" évolue toujours beaucoup trop, que pour prendre le danger de l'introduire dans une large base de code en C qu'est linux.

Citation Envoyé par NotABread Voir le message
ce ne sont pas les même équipes qui gère le compilateur Rust officiel (rustc) et GCC. Rustc est basé sur LLVM, pour faire gccrs, il faut créer les équivalents GCC des features LLVM dont le compilateur a besoin quand ceux-ci n'existe pas. Donc on ne parle pas de juste faire un addon à GCC mais de le rendre apte à accueillir un front-end Rust
Heu, ça me laisse perplexe, qu'a Rust de si différents que d'autres langages, qu'il faut modifié GCC pour qu'on puisse produire un front-end ?

Citation Envoyé par NotABread Voir le message
- d'un point de vu pragmatique, la communauté Rust a plus besoin d'enrichir et maturer son écosystème que de développer des compilateurs alternatifs.
Et bien qu'ils maturent et enrichisent leur écosystème. Si ce n'est pas une priorité pour cette communauté d'être supporté par GCC, ils ne doivent pas espérer que quelqu'un d'autre le fasse pour eux. Donc, "Rust" n'est pas "prêt" pour être intégré facilement dans GCC et donc dans Linux.

Citation Envoyé par NotABread Voir le message
Au doigt mouillé, les plateformes supportées par rustc doivent représenter plus de 95% des configuration. La liste exacte des plateformes supportées:
aarch64-apple-darwin
aarch64-pc-windows-msvc
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
armv7-unknown-linux-gnueabihf
i686-pc-windows-gnu
i686-pc-windows-msvc
i686-unknown-linux-gnu
loongarch64-unknown-linux-gnu
powerpc64le-unknown-linux-gnu
powerpc64-unknown-linux-gnu
powerpc-unknown-linux-gnu
riscv64gc-unknown-linux-gnu
s390x-unknown-linux-gnu
x86_64-apple-darwin
x86_64-pc-windows-gnu
x86_64-pc-windows-msvc
x86_64-unknown-freebsd
x86_64-unknown-illumos
x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl
x86_64-unknown-netbsd

La Rust foundation coopère avec l'équipe de gccrs et il y a aussi des contributeurs externes au projet, donc ça avance
Heu, ta liste peut sembler impressionnante, mais y'a rien pour les milliers de petits µControlleur, où il n'y a que le C. C'est le gros avantage du C, il est partout, toujours disponible, facile a apprendre et a maîtriser, pour peu qu'on fasse un petit effort... Mais l'effort, c'est pas dans l'air du temps...

Citation Envoyé par NotABread Voir le message
- ce ne sont pas les même équipes qui gère le compilateur Rust officiel (rustc) et GCC. Rustc est basé sur LLVM, pour faire gccrs, il faut créer les équivalents GCC des features LLVM dont le compilateur a besoin quand ceux-ci n'existe pas. Donc on ne parle pas de juste faire un addon à GCC mais de le rendre apte à accueillir un front-end Rust
Bien, c'est à la communauté Rust de faire ce taf.

BàT et Peace & Love.
2  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 07/09/2024 à 8:54
Citation Envoyé par OuftiBoy Voir le message
En voici un : [...]
C'est un bon exemple de ce que je parlais niveau familiarité. Beaucoup de vos critiques viennent du fait que vous êtes habitués à la syntaxe du C. Pour quelqu'un qui ferait uniquement du Python ou du Pascal, la syntaxe du Rust n'est pas beaucoup plus déroutante que le C.

Citation Envoyé par OuftiBoy Voir le message
Des "let" et des accolades partout, des ";" inutiles, que fait "vec!" ?, pourquoi la nécessité d'un "!", ça ne saute pas au yeux,
les let c'est juste des déclaration de variable, ça n'a rien de plus complexe que les déclaration en C et C ++, je dirais même que c'est plus simple dans la majorité des cas.
Les point-vigules, pour le coup, c'est quasiment comme le C.
Quant au point d'exclamation ça marque juste l'appel a une Macro, qui est un concept qui existe aussi en C, mais qui est masqué car la syntaxe pour les appeler est identique a celle d'une fonction. Quand on sait ça, c'est pas très difficile de comprendre que vec![] est une macro qui crée un vecteur.

Citation Envoyé par OuftiBoy Voir le message
et dans user_preference.unwrap_or_else(|| self.most_stocked()) ? n'est pas limpide... des "symboles" qui partent dans tous les sens.
La lambda, c'est vrai que c'est un concept qui n'existe pas en C, et j'aurais en effet choisi une autre syntaxe que || pour ça. Mais c'est pas si complexe que ça non plus, ça existe dans beaucoup de langages. Là encore, la syntaxe, c'est surtout un problème de familiarité.
Par contre, cette ligne est un très bon exemple de comment Rust, contrairement à C, pousse a bien gérer les choses par défaut. En Rust le type Option oblige a choisir comment traiter le cas invalide. L'équivalent C ressemblerait à quelque chose comme user_preference == -1 ? self.most_stocked() : user.preference qui n'est pas vraiment plus clair et beaucoup omettraient tout simplement le test de validité.

Citation Envoyé par OuftiBoy Voir le message
Le "formatage" des string via des {: ?} qui ne fait pas mieux que le printf du 'C', avec juste 40 ans de retard.
Alors non c'est beaucoup mieux pour plusieurs raisons :
- c'est sécurisé d'un point de vue mémoire.
- le système de trait permet à chaque type d'avoir son propre affichage.
- Si on veut afficher la valeur naturelle "{}" suffit. Le ": ?" à l’intérieur indique d'utiliser la valeur technique qui a du sens dans les logs ou un débogueur.
- Ton exemple utilise la syntaxe avec paramètres séparés mais on peut aussi faire : println!("The user with preference {user_pref1:?} gets {giveaway1:?}")
Citation Envoyé par OuftiBoy Voir le message
'Rust' me fait penser à un langage qui a été spécifié par des théoriciens "académique", alors que le 'C' a été écrit d'une façon "pratique".
Pour le coup c'est plutôt l'inverse Rust est un langage qui a offert une utilisation pragmatique à beaucoup de concept qui jusque là avaient du mal a sortir du coté académique.

Citation Envoyé par OuftiBoy Voir le message
Il y a aussi cette manie de changer les noms de choses juste pour le plaisir (les "crates" ça fait plus smarts que module ou lib), un truc qui s'appel cargo.
Ça n'est pas pour le plaisir. Le concept de module existe en Rust mais c'est un découpage plus fin que la crate. En fait la crate, c'est le module de plus haut niveau qui va produire un exécutable ou une bibliothèque. Le terme de lib est tout a fait admis pour les crates de type bibliothèque, mais ce n'est qu'une partie des crates.
Quant a cargo c'est l'outil de build / gestion de dépendance. Il faut bien qu'il ait un nom, comme on a nmp pour Javascript, pip pour Python ou maven pour Java.

Citation Envoyé par OuftiBoy Voir le message
En fait sans voulir être méchant, 'Rust' existe depuis bien plus que 10 ans, ça s'apelle Ada (utilisé par les militzires Américains) et ça a 40 ans (et dont "Rust' n'est qu'une ré-implémentation des mêmes concepts).
Rust et Ada sont des langages très différents sur beaucoup de points fondamentaux. Même s'ils visent tous les deux à améliorer la sécurité du code, ils le font de manière très différente.
par exemple Ada a certaines capacités sur la validation des données qui manquent par défaut à Rust, mais Rust dispose du système de Ownership/Borrowing qui garanti la sécurité mémoire du code sans impacter les performances.

Citation Envoyé par OuftiBoy Voir le message
Je connais des dizaines d'ingénieurs (je ne parle même pas de pur développeurs) qui font leur petits truc facilement avec Python et pour qui 'Rust' ressemble à Frankenstein, et qui ne comprennent rien quant ils voient du code 'Rust', alors qu'il comprennent en quelque minute un script Python qui fait la même chose mais avec 10 lignes de code au mieu de 50.
Et c'est normal. Personne ne pense que Rust est le langage le plus adapté a toutes les situations. Pour prototyper rapidement du code sans problématique de maintenabilité et de sécurité, les borrow checker est plus un problème qu'un avantage.
2  0 
Avatar de vanquish
Membre chevronné https://www.developpez.com
Le 04/09/2024 à 11:42
Citation Envoyé par denisys Voir le message
A mon point de vue, ce n’est qu’une question de temps et de génération.
Ma génération, qui a étais élevé au bon code en C et C++, vers la fin du siècle dernier (1992).
Les jeunes et futures générations qui intégrerons et compileront plus facilement le code en Rust.
Si c'est probablement vrai ce n'est pas pour autant une bonne idée que de s'enfermer dans ce que l'on sait déjà.
A l'école, j'ai appris le COBOL et j'avais une spécialisation "télématique".
Je ne suis même pas certain que tout le monde comprennent ce dernier mot aujourd'hui (pour info : le Minitel).
Heureusement que je n'en suis pas resté à cela.

Cela ne m'empêche donc pas d'aujourd'hui de faire du C# après être passé par Turbo Pascal, C, C++, Visual Basic, Delphi, Javascript entre autres.

L'informatique bouge sans cesse. Un développeur qui resterais immobile va mourir ou se retrouver enfermé dans des techno obsolètes.
J'ai à un moment complètement raté les techno liées au Web. J'ai fait de gros effort pour rattraper mon retard et sortir du client lourd en complète perte de vitesse.
J'ai rencontré un développeur Cobol a qui son patron refusait toute formation, parce qu'il voulait le garder sous la main.

Alors certes, on ne peut pas tout apprendre, mais rester sur ses acquis n'est pas une bonne idée non plus.
2  1 
Avatar de NotABread
Membre régulier https://www.developpez.com
Le 04/09/2024 à 13:29
Je trouve que certains oublient bien vite que le choix d'un langage de programmation est un choix technique. Il se base sur:
- le budget
- le temps
- les ressources disponible
- les besoins

Par exemples, j'ai écris un bot pour Discord:
- budget: 0€, je ne veux utiliser que ce que j'ai actuellement
- temps: une dizaine d'heure
- ressources disponible: moi, une lib pour faciliter l'usage de l'api discord, mon pc et mes petits doigts musclés
- besoins:
- tourner h24
- consommer le moins de RAM et de CPU possible
- résister aux saisis malicieuse

J'ai éliminé dès le début JS, je n'ai pas les connaissances pour m'assurer qu'il n'y a pas d'injection de code, un oubli pourrait vite compromettre mon serveur. Python aurait donner des résultats très rapidement et certainement suffisant pour mon usage mais pour tourner des jours sans interruption, il me faudra des try/catch sur tout ce qui peut échouer, et pour la beauté de l'art, je voulais quelque chose de plus optimisé en CPU et RAM.
Au final, j'ai choisi Rust car il répondait à tous mes critères et je voulais tester le langage, j'aurais aussi pu le faire en Golang. Je ne regrette pas ce choix pour ce projet perso, des mois que le bot tourne et a résisté au tentative d'injection et autre, la seule interruption que j'ai eu fut en raison d'une coupure d'électricité. Les points noirs que j'ai vu, c'est un exécutable de 200 Mo et l'usage de la RAM qui tourne autour de 100 Mo. Je pense que les moulte dépendances en sont principalement responsable, mais au moins, l'usage de la RAM reste stable.

L'ajout de Rust dans Linux semble plus que pertinent de part la garantie de la sécurité mémoire et les performances très proche de C. Il sera dommage de s'en priver parce que "c'est pas du C, moi je suis un vrai développeur qui peut faire du C mieux que tout le monde donc j'en ai pas besoin"
1  0