Rust arrive dans le noyau Linux et ce que pense Linus Torvalds de C++
lun, 19/04/2021 - 11:51
La semaine dernière, nous vous rapportions la décision de Google d'adopter Rust pour améliorer la sécurité du noyau d'Android. Comme chacun sait, Android est construit à partir de Linux. Alors qu'en est-il de Rust dans le noyau Linux ?
L'idée d'utiliser Rust pour coder des parties du noyau Linux a été lancée en septembre 2020. Une proposition pour laquelle Linus Torvalds et d'autres mainteneurs principaux du noyau ont exprimé leur ouverture de principe.
La semaine dernière, Google a annoncé avoir rejoint l'organisation Rust pour Linux. Le billet d'annonce de Google, très intéressant, compare un exemple de pilote écrit en C et en Rust.
A la suite de l'annonce de Google, Linus Torvalds a donné une interview à ITWire au cours de laquelle il s'est exprimé sur l'arrivée de Rust dans le noyau Linux.
Pour l'instant les choses ne sont pas prêtes, a-t-il expliqué, mais elles avancent. Pour Linus Torvalds, le support de Rust pourrait arriver avec la branche Linux 5.14. Comme la 5.12 vient de sortie en Release Candidate et qu'il faut 8 autres versions hebdomadaires plus une période de 15 jours pour que sorte la version 5.12 finale, on peut estimer à 3 bons mois le temps qu'il faudra pour que Rust commence à apparaître dans le noyau.
Le noyau Linux est écrit en C, avec des petits de bouts de C++. Historiquement C est le langage de choix pour l'écriture des noyaux des systèmes d'exploitation, et il est aussi, jusqu'ici, le langage de choix de Linus Torvalds pour le noyau Linux. L'arrivée de Rust dans le noyau Linux et son approbation par Linus Torvalds est une sorte d'événement et témoigne de la qualité du langage.
Les langages alternatifs ne sont généralement pas les bienvenus aux yeux de Linus et il l'exprime dans le langage fleuri qui est souvent le sien. Au cours de l'interview mentionnée plus haut, un commentateur a suggéré d'utiliser C++ au lieu de Rust pour le noyau Linux.
Linus a gloussé, puis répondu :
LOL. C ++ ne résout _aucun_ des problèmes C, et ne fait qu'empirer les choses. C'est vraiment un langage de merde. Pour les personnes qui n'aiment pas le C, utilisez un langage qui vous offre réellement quelque chose qui en vaut la peine. Comme les langages avec sécurité de mémoire et qui peuvent éviter certains des dangers du C, ou les langages qui ont un support interne GC [garbage collection ou ramasse-miettes] et simplifient la gestion de la mémoire.
C ++ résout tous les mauvais problèmes, et quiconque dit 'réécrire le noyau en C ++' est trop ignorant pour savoir ça.
Linux a ensuite précisé sa pensée au sujet de C : quand on parle des dangers du C, on parle aussi d'une partie de ce qui rend le C si puissant et vous permet de mettre en œuvre efficacement toutes ces choses de bas niveau.
Puis il a précisé sa pensée en ce qui concerne les ramasse-miettes : Bien que je pense que GC [garbage collection - ramasse-miettes] est une chose merveilleuse pour la simplicité de programmation, ce n'est généralement pas nécessairement quelque chose que vous pouvez faire dans une programmation système de bas niveau. Donc je ne dis pas qu'un 'GC intégré' est bon pour le système d'exploitation noyaux, mais c'est une très bonne chose dans la plupart des autres situations.
Commentaires
Du rust dans un noyau Linux !!! Super. Un simple printf("Hello World\n") en C pèse 16k et pèse 247k en rust. Sans déconner, on veut quoi? Du Linux aussi lent que Windows????
Ok Linus a été un précurseur mais ce n'est pas pour ça que tout ce qu'il dit doit être désormais pris comme parole d'évangile. Les espagnols ont peut-être découvert l'amérique mais leurs erreurs de choix leur ont ensuite fermé à tout jamais les richesses de l'Amérique du Nord.
L'article ne dit pas que ce que dit Linus Torvlads est parole d'évanbile.
Ben si, c'est fortement sous-entendu (L'arrivée de Rust dans le noyau Linux et son approbation par Linus Torvalds est une sorte d'événement et témoigne de la qualité du langage) !!! On s'en fout de la qualité du langage. Pour faire un noyau, on demande pas un langage de qualité, mais un langage rapide. Le C n'est pas un langage de qualité. Il est horrible à écrire, on met des plombes pour coder 3 trucs qui se courrent après, on risque le bug chaque fois qu'on remplit un tableau ou qu'on décale un pointeur sans précaution... MAIS il est ultra rapide. Rapide à se lancer (parce qu'exécutable tout petit) et rapide à s'exécuter (parce que les instructions ne sont pas vérifiées avant l'action, charge au développeur de s'assurer que son indice ne dépasse pas les capacités du tableau ou que son pointeur reste bien dans la plage d'adresses autorisées).
Non la phrase que vous citez dit que c'est un événement que Linus Torvalds ne fustige pas un autre langage que C, dont il a toujours été très farouche partisan à l'exclusion de tout autre langage. Et oui le fait qu'il ne fustige pas Rust témoigne quand même que c'est un langage de qualité, avis que de plus en plus de développeurs partagent. L'article ne dit pas que Linus Torvalds a raison en ce qui concerne l'arrivée de Rust dans le noyau et ne dit pas non plus que l'avis de Linus est parole d'évangile..
En effet, si tu compiles du rust sur Linux l'éxécutable sera plus lourd, tout simplement parce que Rust utilise du linkage statique, et intègre donc toutes le lib standard Rust. Ce qui n'est pas le cas en C, puisque chaque OS actuel possède une lib c (glibc par exemple) dynamique qui va être chargé pendant l'éxécution du binaire. Il te suffit d'installer la lib rust (qui n'est pas présente par défaut car le langage est relativement nouveau), et de compiler ton programme avec les flags qui vont bien et tu l'auras ton éxécutable super léger.
"I don't have any Windows systems to try on, but on Linux, a statically compiled Rust hello world is actually smaller than the equivalent C. If you are seeing a huge difference in size, it is probably because you are linking the Rust executable statically and the C one dynamically."
En citant Stackoverflow: https://stackoverflow.com/questions/29008127/why-are-rust-executables-so-huge
merci pour ta reponse grace a toi j'ai tranger je continue a apprendre et a coder en c