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 !

La communauté Rust reconnaît que le langage n'est pas sécurisé au travers d'une récente annonce
De lancement d'une initiative de vérification de 7500 fonctions non sûres de la bibliothèque standard Rust

Le , par Patrick Ruiz

20PARTAGES

6  2 
Amazon Web Services va, dans un effort conjoint avec la Fondation Rust, payer des développeurs pour vérifier 7500 fonctions non sécurisées de la bibliothèque Rust. C’est ce qui ressort d’une récente annonce qui ravive le débat sur la question de savoir si le Rust, initialement présenté comme un meilleur gage de sécurité pour les logiciels que C et C++, est en réalité plus sécurisé.

Rust propose des moyens de contourner ses garanties de sécurité en utilisant le mot-clé "unsafe". La documentation précise à ce propos que « si Rust ne vous permettait pas d'effectuer des opérations non sécurisées, vous ne pourriez pas accomplir certaines tâches, comme interagir directement avec le système d'exploitation, bien qu'elle ajoute que vous utilisez cette possibilité à vos propres risques ». Les risques dont il est question comprennent le déréférencement de pointeurs nuls qui est une source courante de problèmes de sécurité.


C’est aussi ce que rapporte la fondation Rust lorsqu’elle souligne que 20 % des unités de compilation Rust s’appuient sur le mot-clé "unsafe" :

« Bien que Rust soit un outil puissant pour la sûreté de la mémoire et la sécurité, la puissance de ses contrôles de sécurité peut devenir limitante lorsque le programme ne peut pas réellement se tromper mais que le compilateur est incapable de le garantir lui-même ; le programmeur peut prouver l'impossibilité d'un comportement indéfini par des moyens qui ne sont pas à la disposition du compilateur. Dans ces cas, les programmeurs Rust utiliseront le mot-clé unsafe pour indiquer une fonction ou un segment de code ayant a) des considérations de sécurité supplémentaires ou b) des invariants qu'un programmeur doit suivre manuellement pour garantir la sécurité et qui ne sont pas nécessairement exprimés par Rust ou la fonction elle-même. Le mot-clé unsafe permet aux développeurs de déréférencer un pointeur brut, de modifier une variable statique mutable et, surtout, d'appeler des fonctions unsafe. »

La récente publication d’AWS va plus loin en soulignant que même si les développeurs n'utilisent que du code sûr, la plupart des applications dépendent toujours de la bibliothèque standard Rust dans laquelle on retrouve environ 7500 fonctions non sécurisées. Grosso modo, la publication d’Amazon suggère qu’une mauvaise utilisation de Rust peut conduire aux mêmes problèmes en matière de sécurisation de la mémoire des logiciels rencontrés avec des langages concurrents comme le C et le C++. En d’autres termes, la faille ultime se trouverait entre la chaise et le clavier et c’est le programmeur.

Des initiatives comme Fil-C et Safe C++ ont vu le jour pour apporter une meilleure réponse aux problèmes de sécurisation de la mémoire des logiciels en C et C++

Les extensions Safe C++ visent à introduire des fonctionnalités de sécurité mémoire dans le langage C++. Ces extensions incluent des mécanismes comme le vérificateur d’emprunt (borrow checker) pour prévenir les erreurs d’utilisation après libération et des analyses d’initialisation pour garantir la sécurité des types. Ces outils permettent aux développeurs d’écrire du code plus sûr sans sacrifier les performances et la flexibilité du C++.


« Les langages de programmation C et C++ sont merveilleux. Il existe une tonne de codes écrits dans ces deux langages. Mais le C et le C++ sont des langages peu sûrs. De simples erreurs de logique peuvent amener un attaquant à contrôler la zone mémoire un pointeur et ce qui y est écrit, ce qui ouvre la voie à une exploitation facile. Beaucoup d'autres langages (Rust, Java, etc.) n'ont pas ce problème ! Mais j'aime le C. Et j'aime presque autant le C++. J'ai grandi avec eux. C'est une telle joie pour moi de d'utiliser les deux ! C'est pourquoi, pendant mon temps libre, j'ai décidé de créer mes propres langages C et C++ à mémoire sécurisée. Il s'agit d'un projet personnel et d'une expression de mon amour pour le C. Fil-C introduit la sécurité de la mémoire au cœur du C et du C++ », souligne Filip Pizlo de Epic Games à propos de Fil-C.

« Le projet vise une compatibilité à 100 % avec C et C++. Il suffit de compiler son code avec le compilateur pour obtenir du code sécurisé », d’après Pizlo. Ce dernier reconnaît néanmoins que « le principal obstacle à l'utilisation de Fil-C en production est la vitesse. Fil-C est actuellement environ 1,5 à 5 fois plus lent que le C traditionnel. »


Ces initiatives font surface dans un contexte de multiplications des appels au passage à des langages de programmation dits sécurisés et Rust s’impose au point d’être adopté pour lé développement du noyau Linux

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.

Source : AWS

Et vous ?

Quel est votre expérience avec Rust en tant que langage de programmation et en particuluer avec les cas d'utilisation du mot-clé "unsafe" ? Les garanties de sécurisation de la mémoire qui sont attribuées à ce langage en comparaison au C et au C++ sont elles exagérées ?
Le potentiel problème avec Rust n’est-il pas le même qu’avec C et C++ : la qualité des programmeurs ?

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 Uther
Expert éminent sénior https://www.developpez.com
Le 25/11/2024 à 22:26
Amazon Web Services va, dans un effort conjoint avec la Fondation Rust, payer des développeurs pour vérifier 7500 fonctions non sécurisées de la bibliothèque Rust. C’est ce qui ressort d’une récente annonce qui ravive le débat sur la question de savoir si le Rust, initialement présenté comme un meilleur gage de sécurité pour les logiciels que C et C++, est en réalité plus sécurisé.
Ça ne ravive rien du tout. Le Rust n'a jamais prétendu empêcher tous les problèmes dans toutes les situations. Tous les gens un minimum renseignés savent que la bibliothèque standard contient des blocks unsafe (code non garanti par le compilateur) et c'est parfaitement attendu : elle doit fournir des abstraction sures aux appels systèmes fondamentalement unsafe. Ça reste toujours mieux que les lib standards de C et C++ qui n'ont pas de notion des sécurité intégrées au langage et qui laissent volontairement la possibilité d'utiliser certaines de leur abstractions de manière non sécurisée sans avertissement.

Que l'on essaye de vérifier formellement le code unsafe de Rust, reste quand même un plus pour pour améliorer encore la confiance que l'on peut lui accorder. Par contre, ce qui m'intrigue dans la démarche c'est qu'un code vérifié ne le reste que tant qu'il n'est pas modifié, je serais curieux de voir comment ils prévoient de gérer ça vu que la bibliothèque standard évolue en continu.
6  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 27/11/2024 à 14:39
Citation Envoyé par OuftiBoy Voir le message
Mais comme tout langage, il se doit de posséder une librairie standard. Et comme beaucoup de langages, il s'appuie sur des librairies écritent en 'C'.
Normalement, petit à petit, je pense que l'équipe de Rust tentera de s'affranchir de ces librairies, et c'est un travail énorme qui prendra encore quelques temps.
La bibliothèque standard n'utilise aucune librairie écrite en C en mode core (sans accès à l'OS) et seulement la libc en mode std(avec accès à l'OS).
L'utilisation de la libc n'est pas faite pour économiser du travail : c'est juste parce que la plupart des OS n'ont pas de façon directe et stable de s'interfacer avec eux. La lib C est juste utilisée comme interface stable avec l'OS.

Citation Envoyé par OuftiBoy Voir le message
Mais, la question qui pour moi est la plus importante, c'est de savoir si l'utilisation de ces 20% de bloc "unsafe" sont utilisés pour fournir "rapidement" une librairie standard relativement complète, OU s'il est impossible de se passer de ces blocs "unsafe" pour avoir les fonctionnalités contenues dans ces 20%.
En Rust on utilise clairement pas des bloc unsafe par plaisir, s'ils sont utilisés dans la bibliothèque standard, c'est certainement qu'ils sont nécessaire, soit pour accéder a des fonctionnalités bas niveau que les règles de Rust ne peuvent garantir, soit pour des raisons de performance. Et en soi ça n'a rien de problématique pour l'utilisateur de la bibliothèque vu que ce code unsafe est encapsulé dans des abstraction qui elles sont safe.
Le but du projet est de vérifier que ces blocs de code, bien que marqués unsafe, sont corrects et que l'encapsulation est bien réalisée

Citation Envoyé par Freem Voir le message
Ce qui m'amuse toujours énormément avec le bruit autour de Rust, c'est qu'on dirait que tous les bugs du monde sont des bugs de corruption mémoire... mais c'est loin d'être le cas.
Par acquis de conscience je viens de regarder les dernières vulnérabilités reportées sur glibc (pour rester dans le domaine de la lib standard) : quasiment toutes étaient dues à des problèmes de mémoire. Donc, même si Rust ne garantira jamais l'absence totale de bug, c'est clairement un moyen très efficace pour en diminuer la quantité, surtout les plus dangereux pour la sécurité.

Citation Envoyé par Freem Voir le message
Si la bibliothèque standard de rust évolue encore tant, c'est que le langage est loin d'être mûr, et par conséquent, plein de bugs, et donc, pas safe. Au moins, pour le C et le C++, on dispose de décennies d'expérience
Si la bibliothèque standard évolue c'est que le langage évolue, ce qui est aussi le cas du C++. Le Rust aura bientôt 10 ans, et commence a avoir une utilisation assez conséquente pour échapper au procès en immaturité. Les retour sur l'utilisation du Rust montre clairement une amélioration de la sécurité et pas une dégradation.

Citation Envoyé par Freem Voir le message
les fonctions dangereuses sont bien identifiées, de nombreux outils (gratuits, donc pas de raison de pas les utiliser, mais malheureusement les systèmes de CI/CD déployés sur `git[a-z]{3}` les intègrent rarement... d'ailleurs ils vérifient jamais que chaque commit passe les tests, juste le dernier de la PR... c'est hors sujet.) aident a en éviter l'usage.Ces outils existent uniquement grâce à l'expérience accumulée par les utilisateurs de ces langages.Ces fonctions ne peuvent pas être supprimées (du standard), parce que l'historique, c'est important, quand on travaille sur un projet sérieux et pas du code jetable.
Sauf que l'efficacité des outils de vérification du C sont limitées, justement entre autre parce que le code dangereux nécessaire n'est pas correctement isolé du code sûr. Une grosse partie de la sécurité de Rust ressemble a ce que fait un analyseur statique de code C, mais le langage Rust a été conçu pour rendre cette vérification bien plus efficace.

Le C a certes développé des outils suite aux retours d'expérience, mais il ne faut pas croire que Rust serait reparti de zéro en ignorant l'état de l'art sur les autres langages. D'ailleurs, le nom de la toute première conférence qui a présenté Rust était clair là dessus : "Technology from the past come to save the future from itself".
Rust a complètement pris en compte l'expérience accumulée par d'autre langages (notamment le C et le C++). Et justement, le fait qu'il n'ait pas à gérer plusieurs dizaines d'années l'historique à permis de corriger à la racine beaucoup de problèmes qu'on peut juste essayer de mitiger en C et C++.
3  0 
Avatar de prisme60
Membre régulier https://www.developpez.com
Le 26/11/2024 à 14:57
Il n'y a pas photo. La sécurité du code Rust dépasse largement ce que l'on trouve en C et C++. Comme toute chose, il y a des marges d'amélioration, Rust reste un langage jeune, et il ne possède pas encore d'historique lourd à porter.

Le C est trop laxiste sur les appels de fonctions, gestion totalement manuelle des allocations dynamique sur le tas (malloc/free).

Le C++ a comblé quelques manques avec les différentes évolutions (regex, jthread, lambda, async/future, ranges/views), et au passage à rajouter une complexité supplémentaire (opérateur move, démultiplication des constructeurs, constraints/concepts, modules).
2  0 
Avatar de fdecode
Membre habitué https://www.developpez.com
Le 27/11/2024 à 13:45
Citation Envoyé par Freem Voir le message
Personnellement, je ne comprendrais pas l'adoption d'un outil si jeune et qui ne cesse de muter pour réaliser un projet qui serait censé être utilisé pour plus de 10 ans. Non, il ne sera plus maintenu super activement quelques années plus tard, s'il juste marche et n'est pas un projet de type "frontal", faut pas rêver.
Rust était certes un projet de recherche de Mozilla, mais a depuis quelques années des soutiens de poids:
https://foundation.rust-lang.org/members/
Je parie plutôt sur une installation progressive et ferme du langage.

Citation Envoyé par Freem Voir le message
Je suis plutôt un détracteur de rust en général, parce que le battage marketing a souvent un effet contraire sur moi
De quel battage marketing parle-t-on? Le langage est gratuit, et tout ce qui tourne autour. Le langage n'appartient pas à une grande marque. Et pour le coup, il n'a certainement pas été créé par une équipe de marketeurs.
2  0 
Avatar de imperio
Membre chevronné https://www.developpez.com
Le 27/11/2024 à 10:56
Citation Envoyé par Freem Voir le message
Ce qui m'amuse toujours énormément avec le bruit autour de Rust, c'est qu'on dirait que tous les bugs du monde sont des bugs de corruption mémoire... mais c'est loin d'être le cas.
Ce n'est ni l'objet de cet article, ni quelque chose que Rust prétend. Rust supprime les erreurs mémoires et souvent il est rappelé que cela n'impacte pas les bugs de logiques.

Citation Envoyé par Freem Voir le message
Si la bibliothèque standard de rust évolue encore tant, c'est que le langage est loin d'être mûr, et par conséquent, plein de bugs, et donc, pas safe.
On parle pas d'évolution là mais de vérification formelle. Et on ne fait pas de la vérification formelle parce que c'est buggé mais pour s'assurer que dans des conditions données, aucun bug n'a pu être détecté et donc que ce code est sûr. C'est quelque chose qui se fait aussi beaucoup dans certains projets en C.

Citation Envoyé par Freem Voir le message
Au moins, pour le C et le C++, on dispose de décennies d'expérience, les fonctions dangereuses sont bien identifiées, de nombreux outils (gratuits, donc pas de raison de pas les utiliser, mais malheureusement les systèmes de CI/CD déployés sur `git[a-z]{3}` les intègrent rarement... d'ailleurs ils vérifient jamais que chaque commit passe les tests, juste le dernier de la PR... c'est hors sujet.) aident a en éviter l'usage.
Euh ok. Donc si t'es un nouveau qui débarque en C/C++, il faut que tu apprennes tout ça par coeur pour savoir ce que tu peux utiliser. Super.

Citation Envoyé par Freem Voir le message
Ces outils existent uniquement grâce à l'expérience accumulée par les utilisateurs de ces langages. Ces fonctions ne peuvent pas être supprimées (du standard), parce que l'historique, c'est important, quand on travaille sur un projet sérieux et pas du code jetable.
Oui c'est sûr. Mieux vaut se trimballer du code dangereux parce qu'historiquement il a toujours été là.

Citation Envoyé par Freem Voir le message
Personnellement, je ne comprendrais pas l'adoption d'un outil si jeune et qui ne cesse de muter pour réaliser un projet qui serait censé être utilisé pour plus de 10 ans. Non, il ne sera plus maintenu super activement quelques années plus tard, s'il juste marche et n'est pas un projet de type "frontal", faut pas rêver. Ce n'est pas parce que c'est rust que la nature de l'humain et de la logique de marché changera: y'a pas le temps de maintenir les vieux trucs qui marchent, ça coûte trop cher et c'est trop chiant, surtout qu'on risque de casser plein de trucs a chaque changement, en pratique. Pour ce genre de points, rien ne vaut un bon vieux XKCD: https://xkcd.com/1172/
La première release de Rust date de 2015. Donc c'est relativement jeune. Cependant de plus en plus de grosses entreprises paient pour son développement donc les chances que son développement s'arrête s'amenuisent de plus en plus.

Citation Envoyé par Freem Voir le message
Tout ceci étant dit...
Je trouve très amusante cette parenthèse d'un article trouvé après avoir cherché des sources a croiser avec cet article: "if used incorrectly" (https://aws.amazon.com/blogs/opensou...ndard-library/)

Alors, pour info, tout langage est sûr, en fait, tant qu'il est utilisé correctement... Je suis plutôt un détracteur de rust en général, parce que le battage marketing a souvent un effet contraire sur moi, que le langage ne fournit pas les garanties que C++ me donne (stabilité des APIs sur le temps, support de l'historique, plusieurs implémentations, ...) mais la franchement mon détecteur de bullshit a tourné au rouge vif...
C++ ne fournit pas beaucoup de garanties à vrai dire. Le mangling n'est pas défini, chaque compilateur le gère comme il veut (super pour l'intéropérabilité). Il y a un nombre proprement effrayant de undefined behaviour. Et mon petit favori : "c'est copy ou c'est move ?". Je vois pas trop en quoi avoir plusieurs implémentations est un plus non plus. Le code Rust de 2015 compile toujours à ce jour donc pareil, je vois pas trop où est le souci. Pour faire simple : plutôt que de te braquer, si ça ne t'intéresse pas, ne lis pas ? Ou bien dans ce cas regarde ce que Rust fournit vraiment et regarde si ça correspond à tes besoins. Tout le reste c'est juste cracher gratuitement ta bile sur un sujet que tu ne connais pas.

Citation Envoyé par Freem Voir le message
Pareil, "y'a des trucs pas safe!" ben oui, c'est la base des I/Os. Les langages fonctionnels sont horribles a utiliser justement parce que les I/Os sont des plaies, justement parce qu'ils veulent être "safe". Il est important de se souvenir que la sécurité impacte systématiquement, directement et négativement l'utilisabilité.
C'est pas un problème de safety là mais bon... Si une I/O plante, c'est au programme de le vérifier avant d'utiliser les données. En Rust le langage te force à faire cette vérification pour pouvoir accéder à la donnée. En C/C++, c'est un oubli assez commun, même avec tous les meilleurs outils du monde.

Citation Envoyé par Freem Voir le message
Le rôle d'un ingénieur qui crée un outil (et c'est vrai ailleurs que dans l'informatique, hein) c'est de trouver un équilibre entre les deux, de sorte a ce que les utilisateurs ne virent pas les protections quant ils utilisent l'outil (le pare-étincelles de la meule, exemple typique d'élément de sécurité qui saute. Le truc à la con sur les briquets, encore pire, ne parlons donc pas des sécurités dans les prises, moi, je les défonce systématiquement, c'est tout sauf intelligent).
Il est donc normal que Rust, s'il souhaite rester utilisable, conserve un risque de faire des erreurs. De toute façon, y'a que ceux qui font rien qui font pas d'erreurs.
Franchement, j'accrocherai dans ma chambre le portrait de la personne qui arrive a créer un langage avec lequel il sera possible d'écrire un logiciel qui nécessite l'accès au réseau internet et dont le compilateur garanti qu'aucun incident se produisant sur le médium physique ne puisse affecter l'éco-système ou le-dit logiciel tourne.
Encore une fois à côté de la plaque. Dans le cas présent, Rust utilise du code `unsafe` surtout pour utiliser les APIs du systèmes.

Bref, j'ai l'impression que tu ne maitrises pas du tout la "safety" qui est évoquée dans cette article et que tu avais juste envie de venir cracher ta bile sur un outil que tu n'as jamais testé. Encore une fois, si ça ne t'intéresse, hé bien cesse d'interagir avec ces articles ?
1  0 
Avatar de denisys
Membre chevronné https://www.developpez.com
Le 25/11/2024 à 21:47
En d’autres termes, la faille ultime se trouverait entre la chaise et le clavier et c’est le programmeur.

Sans compter le porte monnaie du Manageur.
Hélas, hélas, hélas !!!!!
0  0 
Avatar de OuftiBoy
Membre éprouvé https://www.developpez.com
Le 26/11/2024 à 20:32


Citation Envoyé par Uther Voir le message
Ça ne ravive rien du tout. Le Rust n'a jamais prétendu empêcher tous les problèmes dans toutes les situations. Tous les gens un minimum renseignés savent que la bibliothèque standard contient des blocks unsafe (code non garanti par le compilateur) et c'est parfaitement attendu : elle doit fournir des abstraction sures aux appels systèmes fondamentalement unsafe. Ça reste toujours mieux que les lib standards de C et C++ qui n'ont pas de notion des sécurité intégrées au langage et qui laissent volontairement la possibilité d'utiliser certaines de leur abstractions de manière non sécurisée sans avertissement.
Je m'intéresse à Rust depuis un petit moment, sans l'avoir encore "adopté" cependant. Effectivement, Rust permet l'écriture d'un code plus "safe", via divers mécanismes (mais ce n'est pas le sujet). Mais comme tout langage, il se doit de posséder une librairie standard. Et comme beaucoup de langages, il s'appuie sur des librairies écritent en 'C'.

Normalement, petit à petit, je pense que l'équipe de Rust tentera de s'affranchir de ces librairies, et c'est un travail énorme qui prendra encore quelques temps. Mais cela ne retire en rien les mécanismes "safe" de Rust.

Citation Envoyé par Uther Voir le message
Que l'on essaye de vérifier formellement le code unsafe de Rust, reste quand même un plus pour pour améliorer encore la confiance que l'on peut lui accorder. Par contre, ce qui m'intrigue dans la démarche c'est qu'un code vérifié ne le reste que tant qu'il n'est pas modifié, je serais curieux de voir comment ils prévoient de gérer ça vu que la bibliothèque standard évolue en continu.
Oui, l'équipe "Rust" n'a pas la main sur tout. Peut-être faudrait-il arrêter l'évolution de la librairie standard, et faire un audit pour savoir ce qui est "safe" et ce qui ne l'est pas. D'après l'équipe "Rust" elle-même, 20 % du code de la librairie standard utilise des parties "unsafe". Ils devraient communiquer et donner la liste de ce qui est "safe" ou pas. (peut-être l'ont-ils fait, mais je n'en ai pas connaissance).

Mais, la question qui pour moi est la plus importante, c'est de savoir si l'utilisation de ces 20% de bloc "unsafe" sont utilisés pour fournir "rapidement" une librairie standard relativement complète, OU s'il est impossible de se passer de ces blocs "unsafe" pour avoir les fonctionnalités contenues dans ces 20%.

S'il s'avère que Rust ne peut pas transformer/fournir/écrire ces 20% "unsafe", ça serait dommage, car Rust a des atouts et il ne faudrait pas jeter le bébé avec l'eau du bain.

BàV et Peace & Love.
0  0 
Avatar de fdecode
Membre habitué https://www.developpez.com
Le 27/11/2024 à 15:25
Citation Envoyé par Uther Voir le message
La bibliothèque standard n'utilise aucune librairie écrite en C en mode core (sans accès à l'OS) et seulement la libc en mode std(avec accès à l'OS).
L'utilisation de la libc n'est pas faite pour économiser du travail : c'est juste parce que la plupart des OS n'ont pas de façon directe et stable de s'interfacer avec eux. La lib C est juste utilisée comme interface stable avec l'OS.
En l'occurrence, Redox OS développe sa rlibc écrite en Rust:
https://github.com/redox-os/relibc
0  0 
Avatar de NotABread
Membre habitué https://www.developpez.com
Le 29/11/2024 à 12:59
Citation Envoyé par fdecode Voir le message
En l'occurrence, Redox OS développe sa rlibc écrite en Rust:
https://github.com/redox-os/relibc
Il me semble que me but initial, c'était la portabilité avec les programmes Linux et BSD vers Redox en refaisant la libc en Rust (et avoir en passant une alternative à libc écrit en Rust pour Linux). C'est devenu le medium pour implémenter une ABI stable pour Redox en chemin. Je me demande s'il sera possible pour Redox de passer à une ABI stable Rust lorsque celle-ci sera existera
0  0 
Avatar de Freem
Membre émérite https://www.developpez.com
Le 27/11/2024 à 7:03
Citation Envoyé par OuftiBoy Voir le message
Oui, l'équipe "Rust" n'a pas la main sur tout. Peut-être faudrait-il arrêter l'évolution de la librairie standard, et faire un audit pour savoir ce qui est "safe" et ce qui ne l'est pas. D'après l'équipe "Rust" elle-même, 20 % du code de la librairie standard utilise des parties "unsafe". Ils devraient communiquer et donner la liste de ce qui est "safe" ou pas. (peut-être l'ont-ils fait, mais je n'en ai pas connaissance).
Ce qui m'amuse toujours énormément avec le bruit autour de Rust, c'est qu'on dirait que tous les bugs du monde sont des bugs de corruption mémoire... mais c'est loin d'être le cas.

Si la bibliothèque standard de rust évolue encore tant, c'est que le langage est loin d'être mûr, et par conséquent, plein de bugs, et donc, pas safe. Au moins, pour le C et le C++, on dispose de décennies d'expérience, les fonctions dangereuses sont bien identifiées, de nombreux outils (gratuits, donc pas de raison de pas les utiliser, mais malheureusement les systèmes de CI/CD déployés sur `git[a-z]{3}` les intègrent rarement... d'ailleurs ils vérifient jamais que chaque commit passe les tests, juste le dernier de la PR... c'est hors sujet.) aident a en éviter l'usage.

Ces outils existent uniquement grâce à l'expérience accumulée par les utilisateurs de ces langages. Ces fonctions ne peuvent pas être supprimées (du standard), parce que l'historique, c'est important, quand on travaille sur un projet sérieux et pas du code jetable. Typiquement, les programmes `chat` et `pppd` qui sont régulièrement utilisés pour interagir avec des modems étaient encore pleins de morceaux de C K&R encore récemment, par exemple le commit 75870d7b55e36af526a0786fff94912989c73fd1 de https://github.com/ppp-project/ppp.git mentionne K&R, en 2020.

Personnellement, je ne comprendrais pas l'adoption d'un outil si jeune et qui ne cesse de muter pour réaliser un projet qui serait censé être utilisé pour plus de 10 ans. Non, il ne sera plus maintenu super activement quelques années plus tard, s'il juste marche et n'est pas un projet de type "frontal", faut pas rêver. Ce n'est pas parce que c'est rust que la nature de l'humain et de la logique de marché changera: y'a pas le temps de maintenir les vieux trucs qui marchent, ça coûte trop cher et c'est trop chiant, surtout qu'on risque de casser plein de trucs a chaque changement, en pratique. Pour ce genre de points, rien ne vaut un bon vieux XKCD: https://xkcd.com/1172/

Tout ceci étant dit...
Je trouve très amusante cette parenthèse d'un article trouvé après avoir cherché des sources a croiser avec cet article: "if used incorrectly" (https://aws.amazon.com/blogs/opensou...ndard-library/)

Alors, pour info, tout langage est sûr, en fait, tant qu'il est utilisé correctement... Je suis plutôt un détracteur de rust en général, parce que le battage marketing a souvent un effet contraire sur moi, que le langage ne fournit pas les garanties que C++ me donne (stabilité des APIs sur le temps, support de l'historique, plusieurs implémentations, ...) mais la franchement mon détecteur de bullshit a tourné au rouge vif...

Pareil, "y'a des trucs pas safe!" ben oui, c'est la base des I/Os. Les langages fonctionnels sont horribles a utiliser justement parce que les I/Os sont des plaies, justement parce qu'ils veulent être "safe". Il est important de se souvenir que la sécurité impacte systématiquement, directement et négativement l'utilisabilité.
Le rôle d'un ingénieur qui crée un outil (et c'est vrai ailleurs que dans l'informatique, hein) c'est de trouver un équilibre entre les deux, de sorte a ce que les utilisateurs ne virent pas les protections quant ils utilisent l'outil (le pare-étincelles de la meule, exemple typique d'élément de sécurité qui saute. Le truc à la con sur les briquets, encore pire, ne parlons donc pas des sécurités dans les prises, moi, je les défonce systématiquement, c'est tout sauf intelligent).
Il est donc normal que Rust, s'il souhaite rester utilisable, conserve un risque de faire des erreurs. De toute façon, y'a que ceux qui font rien qui font pas d'erreurs.
Franchement, j'accrocherai dans ma chambre le portrait de la personne qui arrive a créer un langage avec lequel il sera possible d'écrire un logiciel qui nécessite l'accès au réseau internet et dont le compilateur garanti qu'aucun incident se produisant sur le médium physique ne puisse affecter l'éco-système ou le-dit logiciel tourne.
0  3