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 envisagerait de fusionner le code du noyau Rust en dépit des objections des mainteneurs,
Qui assimilent le mélange de Rust et du C à un « cancer » qui rendrait Linux impossible à maintenir

Le , par Mathis Lucas

27PARTAGES

6  1 
Deux camps continuent de s'opposer sur le sujet de l'intégration de Rust dans le noyau Linux : ceux qui voient Rust comme une opportunité d'améliorer la sécurité et la robustesse de Linux et ceux qui rejettent le mélange des langages C et Rust. Christoph Hellwig, l'un des mainteneurs du noyau, appartient au deuxième groupe et assimile ce mélange à un « cancer ». Toutefois, il a rapporté que le créateur de Linux, Linus Torvalds, est favorable à l'ajout de Rust dans le noyau et veut aller de l'avant dans ce projet. Selon Christoph Hellwig, Linus Torvalds aurait déclaré en privé qu'il passera outre le veto des mainteneurs pour fusionner le code du noyau Rust.

Linus Torvalds reste ouvert à l'idée d'intégrer le langage Rust dans le noyau Linux

Ces derniers mois ont été marqués par des discussions houleuses sur la question de l'ajout de Rust comme le deuxième langage de développement du noyau Linux. Le débat est devenu encore plus intense lorsque Christoph Hellwig a assimilé le mélange de Rust et de C dans le noyau Linux à un « cancer ». Christoph Hellwig, l'un des responsables du noyau, s'oppose catégoriquement à cette idée et affirme que « le mélange rendrait Linux impossible à maintenir ».

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 ».


Mais Christoph Hellwig a récemment mentionné un échange privé avec Linus Torvalds qui montre que ce dernier veut tenter l'aventure Rust. Dans cet échange, Linus Torvalds aurait précisé qu'il passerait outre le veto des mainteneurs sur le code Rust au sein du noyau. Christoph Hellwig critique cette décision.

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.

Le code Rust ne signifie pas seulement du code Rust [1] - les bindings ne ressemblent en rien à du code Rust idiomatique, ce sont des bêtes très différentes qui essaient de combler un énorme fossé sémantique. Et ils ne le font pas dans quelques endroits, parce qu'ils sont montrés dans chaque petit sous-système et bibliothèque en ce moment.

Ainsi, ces bindings se répandent partout comme un cancer et nous passons très rapidement d'un projet logiciel qui permet et s'efforce d'apporter des changements globaux qui améliorent le projet dans son ensemble à une compartimentation croissante [2]. Cela transforme Linux en un projet écrit dans plusieurs langages sans directives claires quant au langage à utiliser et à l'endroit où il doit être utilisé [3].

Même en dehors des bindings, une grande partie du code Rust ne sera pas très idiomatique en raison des structures de données du noyau qui sont intrusives et des structures de données autoréférencées comme les listes chaînées omniprésentes. Ne rendons-nous pas un mauvais service à la fois à ceux qui essaient d'amener la base de code existante dans un espace plus sûr et aux personnes qui font de la programmation système en Rust ?

Ayant travaillé sur des bases de code de ce type, elles sont mon pire cauchemar, parce qu'il y a une constante réécriture de parties du langage A au langage B pour une raison X, puis de nouveau pour une raison Z. Et cela sans l'habituel processus « créatif » de Linux qui consiste en des luttes intestines entre mainteneurs.

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.

Et à en croire Christoph Hellwig, Linus Torvalds a bien l'intentien de fusionner le code du noyau Rust. Christoph Hellwig ajoute qu'il ne voit pas l'intérêt d'intégrer Rust. Selon lui, si l'objectif est de résoudre les problèmes liés à la sécurité de la mémoire, « d'autres pistes sont possibles et sont meilleures ».

Citation Envoyé par Christoph Hellwig

J'aimerais comprendre quel est l'objectif de cette « expérience » Rust : si nous voulons résoudre les problèmes existants en matière de sécurité de la mémoire, nous devons le faire pour le code existant et trouver des moyens de l'adapter. Beaucoup de travail a été fait dans ce sens récemment et nous avons besoin de beaucoup plus.

Mais cela montre aussi à quel point les mainteneurs du noyau sont découragés par des choses triviales comme la vérification des débordements d'entiers ou la synchronisation imposée par le compilateur (comme dans l'assainisseur de threads de clang). Comment allons-nous combler le fossé entre une partie du noyau qui n'accepte même pas des règles relativement faciles pour améliorer la sécurité et une autre qui applique des règles encore plus strictes.

Si nous voulons simplement faciliter l'écriture de pilotes, un nouveau langage pour cela représente encore plus de travail et augmente la charge de travail des personnes déjà surchargées qui maintiennent l'infrastructure de base en forme. Je ne pense donc pas que ce document politique soit très utile. Pour l'instant, la règle est que Linus peut vous imposer ce qu'il veut (c'est son projet évidemment) et je pense qu'il doit l'énoncer clairement, y compris les attentes des contributeurs.

En ce qui me concerne, je peux m'occuper de Rust et je le fais très bien, j'adorerais amener le noyau dans un monde plus sûr pour la mémoire, mais m'occuper d'une base de code multilangage non contrôlée est un moyen assez sûr de me faire passer mon temps libre à autre chose. J'ai entendu quelques autres personnes marmonner quelque chose de similaire, mais tout le monde n'est pas aussi franc.

[1] J'ai écrit et travaillé sur une bonne partie du code Rust en espace utilisateur, mais je ne suis en aucun cas un expert, alors prenez ceci avec un grain de sel.

[2] L'idée de pilotes dans eBPF comme le fait HID n'est pas non plus très utile, même si j'aime eBPF pour certains cas d'utilisation.

[3] À moins que Linus ne l'impose à votre sous-système, ou que Dave ne décide que tout ce qui touche au matériel Nvidia doit être en Rust bien sûr.

Christoph Hellwig pourrait se retirer du projet Linux si Linus Torvalds fusionne le code du noyau Rust. Il reste donc à voir si Linus Torvalds acceptera directement le code du noyau Rust après un examen plus approfondi et une mise au point à l'avenir ou si Christoph Hellwig le fera passer lui-même après tout.

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.

[B]Pourquoi intégrer Rust dans le noyau Linux ?[...
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 20/02/2025 à 10:59
Citation Envoyé par d_d_v Voir le message
J'avais écrit sur un autre fil que seuls les incompétents ou très très débutants écrivaient du c++ avec une écriture non "sécurisée" (pas de conteneurs STL, pas de shared pointeurs), et on m'a répondu qu'on ne pouvait pas faire confiance dans le développeur.
Ce qui fait toute la différence entre Rust et C++ au niveau de la sécurisation, c'est qu'elle est opt-in en C++ alors qu'elle est opt-out en Rust.

Même si l'on considérait que la STL et les smart pointers sont memory safe (ce qui n'est pas le cas), il faudrait toujours s'assurer de bien les employer, tout le temps. En C++, quand on sort des clous par erreur, le plus souvent, rien ne nous l'indique. Il ne s'agit pas que d'un problème de débutant, même un développeur expérimenté finit par faire des erreurs, car il n'y a pas de démarcation précise entre ce qui est sûr et ce qui ne l'est pas.

En Rust, par défaut, tout est sécurisé d'un point de vue mémoire. il est peu probable d'écrire unsafe { x.get_unchecked(i) } en toute lettre, sans que l'auteur ne se rendre compte qu'il est en train de faire quelque chose de potentiellement dangereux, et que le relecteur n’identifie immédiatement le risque. Si on travaille avec des gens auquel on ne fait pas assez confiance (qui n'ont probablement pas besoin de code unsafe), il y a moyen de verrouiller son usage dans le projet, ou forcer à documenter chaque utilisation pour expliquer ce qui permet de vérifier que l'utilisation est correcte.
6  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 22/02/2025 à 6:18
Citation Envoyé par djm44 Voir le message
Il me semble qu'il est possible d'écrire un code exact en C ou dans un autre langage.
En théorie, avec des développeur parfait, oui. Mais dans la pratique, même les meilleurs développeurs font des erreurs. L'historique de Linux parle de lui-même : 1020 CVE pour des erreurs de corruption mémoire ont dû être corrigées l'année dernière. Utiliser un langage qui empêche par défaut certains types d'erreurs dont la corruption mémoire est un gros avantage.

Citation Envoyé par djm44 Voir le message
Beaucoup de publicités sont faites sur ce langage Rust auquel je n'adhère pas. Il y a déjà une profusion de langages qui nuit à la simplicité des approches . Chez Mozilla c'est Rust, chez Google c'est Go, chez Apple c'est Swift. Sur le web c'est Java, JavaScript, PHP.
Le terme publicité est très mal adapté. Rust a ses défenseurs qui apprécient ses qualités, mais il n'est pas la propriété d'une société qui aurait besoin qu'il soit largement adopté pour l'écosystème qu'elle distribue comme Apple avec Swift, ou Microsoft avec C#.
Mozilla à participé aux débuts du langage, mais il n'en a jamais particulièrement fait la promotion. Rust était déjà un projet indépendant de la fondation Mozilla lors de sa sortie officielle, il y a dix ans. Ca fait un moment que la contribution de Mozilla à Rust est anecdotique.

Citation Envoyé par djm44 Voir le message
Et finalement le mieux c'est encore le C ou mieux encore le C++ à mon avis vu le nombre de codes existants . Linus Torvalds devrait passer au C++ mais il a une aversion pour ce langage ce qui le pousse vers Rust.
Ce qui fait que le Rust a été choisi là ou d'autres ont été écarté, c'est parce qu'il apportait des garanties de sécurités(contrairement au C++), sans sacrifier les performances et le contrôle du bas niveau (contrairement à la plupart des langages sûrs).
7  1 
Avatar de d_d_v
Membre expérimenté https://www.developpez.com
Le 20/02/2025 à 10:09
Citation Envoyé par fdecode Voir le message
Et qui ferait ça? un débutant en programmation Rust?

En Rust, on évite de programmer en unsafe, quand on est un programmeur confirmé. D'une part, parce qu'on maitrise le paradigme de programmation safe par défaut, d'autre part parce qu'on a appris à minimiser l'usage d'unsafe.
J'avais écrit sur un autre fil que seuls les incompétents ou très très débutants écrivaient du c++ avec une écriture non "sécurisée" (pas de conteneurs STL, pas de shared pointeurs), et on m'a répondu qu'on ne pouvait pas faire confiance dans le développeur. Je ne vois donc pas pourquoi il en serait autrement en rust. Ca fait plus de 20 ans que j'ai travaillé sur plusieurs projets, et à chaque fois, dès que des facilités non recommandées sont offertes dans le langage, il y a toujours des gens qui les utilisent. Ca peut être quelqu'un d'incompétent, ou alors pour corriger un problème en quatrième vitesse en mettant un TODO qui restera ad vitam æternam dans le code, par exemple, ou alors un développeur qui se barre du projet dans une semaine et qui bacle ou sabote le code avant de partir.
Tu peux être sûr et certain, que si une facilité existe, elle sera utilisée, quel que soit le langage.
5  2 
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 fdecode
Membre habitué https://www.developpez.com
Le 21/02/2025 à 9:42
Citation Envoyé par d_d_v Voir le message
dès que des facilités non recommandées sont offertes dans le langage, il y a toujours des gens qui les utilisent. Ca peut être quelqu'un d'incompétent, ou alors pour corriger un problème en quatrième vitesse en mettant un TODO qui restera ad vitam æternam dans le code, par exemple, ou alors un développeur qui se barre du projet dans une semaine et qui bacle ou sabote le code avant de partir.
Tu peux être sûr et certain, que si une facilité existe, elle sera utilisée, quel que soit le langage.
L'unsafe n'est pas vraiment une facilitée. C'est contraignant; c'est repérable; on doit réfléchir au préalable à la manière de s'en servir correctement...
Une facilité serait plutôt de cloner toutes les données en lecture seule afin de limiter l'usage de références non mutable et d'éviter le conflit avec une référence mutable.
Cela simplifie les choses, mais c'est sous optimal. Par contre, c'est parfaitement sûr.
3  1 
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