La Maison-Blanche exhorte les développeurs à abandonner C et C++ pour Rust
Le 04 mars à 06h59
2 min
Sécurité
Sécurité
« La Maison-Blanche exhorte les développeurs à abandonner C et C++ », titre Le Monde Informatique.
Les entreprises IT « peuvent empêcher l’introduction de multiples vulnérabilités dans l'écosystème numérique en adoptant des langages sécurisés », explique en effet l'Office of the National Cyber Director (ONCD) de la Maison-Blanche. Il invite les développeurs à réduire le risque de cyberattaques en utilisant des langages protégés contre les débordements de mémoire tampon, les lectures hors limites (out-of-bounds reads) et les fuites de mémoire.
LMI relève que des études récentes de Microsoft et de Google indiquent en effet « qu'environ 70 % de toutes les failles de sécurité sont dues à des problèmes de sécurité de la mémoire », et qu'une fiche d'information de la NSA sur la cybersécurité datant de novembre 2022 mentionne, en plus de Rust, les langages C#, Go, Java, Ruby et Swift, comme sécurisés.
Dans son rapport de 19 pages, l'ONCD cite le C et le C++ comme deux exemples de langages présentant des vulnérabilités en matière de sécurité de la mémoire, et qualifie Rust comme sûr.
L'un des objectifs du rapport de l’ONCD serait de « transférer la responsabilité de la cybersécurité des particuliers et des petites entreprises vers les grands groupes, les entreprises IT et le gouvernement américain ». Ils sont, souligne le communiqué de presse de la Maison-Blanche, « plus à même de gérer une menace en constante évolution ».
L'abandon du C et du C++ sera « long et difficile », estime Josh Aas, directeur exécutif et cofondateur de l’Internet Security Research Group (ISRG), à l'origine de Let's Encrypt. « Il faut un effort soutenu pour amener les gens à penser autrement, et des communications comme celle-ci contribuent à rappeler l’importance de la sécurité », a ajouté le dirigeant.
« Il est clair que nous devons écrire et déployer de nouveaux codes, mais pour y parvenir, nous avons besoin de ressources et que des dirigeants à tous les niveaux, du gouvernement au secteur privé, en fassent une priorité », a-t-il insisté. « Les dirigeants concernés doivent être sensibilisés à ce problème et savoir qu'ils seront soutenus s'ils cherchent à le résoudre ».
Le 04 mars à 06h59
Commentaires (158)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousModifié le 04/03/2024 à 07h21
La Maison Blanche devrait aussi mieux trier chiffons et serviettes à mélanger des langages tournant sur des interpréteurs/VM à bytecode/nativement (on écrit comment ce qui permets aux 2 premiers de simplement exister sans avoir les derniers).
Bon, ça serait pas le 1er langage à vouloir bouter le C (le C++ serait sans doute déjà plus réaliste)... l'avenir nous dira ce qu'il en est mais vu la masse de boulot il est en tout cas fort lointain!
Le 04/03/2024 à 07h59
Ça ne résoud pas tous les problèmes induits par l'interface chaise-clavier mais au moins ces problèmes très "technico-techniques" de gestion de mémoire.
Le 04/03/2024 à 09h29
Ce n'est pas bien compliqué de se représenter les cycles de vie de la donnée et de sa représentation en mémoire. Si tu sais faire ça, il est alors possible d'avoir un binaire opérationnel dès la 1ere compil.
Mais bon, aujourd'hui, on apprend à paramétrer des framework et non à programmer.
Modifié le 04/03/2024 à 09h56
Je ne vois pas pourquoi il faudrait privilégier Ada plutôt que Rust du coup, j'imagine que les deux ont la même fiabilité, un écosystème similaire et que les devs vont naturellement vers ce qui les effrait le moins (oui, les devs sont des créatures qui ne veulent pas toujours faire de gros efforts d'adaptation, comme les humains en général d'ailleurs).
Le 04/03/2024 à 13h52
Le 04/03/2024 à 14h51
Le 04/03/2024 à 14h49
L'utilisation d'ADA n'empêche pas la destruction de fusée(s) Ariane ...
J'ai de bons souvenirs de la fac concernant ADA : rigueur, définition de types au micro poil. Mais aussi des souvenir de "lourdeur", qui s'expliquent par les origines, surtout la syntaxe/structure très Pascal.
Sinon, dites moi les codeurs C/C++, si Rust vous fait le même effet que moi : j'ai commencé deux fois le tuto sans jamais réussir à le terminer. Mon cerveau bloque sur des éléments de syntaxe et fait des nœuds.
Bon, après, faut dire que je suis vieux, je manque de souplesse ...
Le 04/03/2024 à 14h54
Modifié le 04/03/2024 à 11h19
-Il est admin, banco dans tous les cas.
-Il ne l'est pas et il faut trouver une faille qui peut permettre de le devenir et pourra exploiter un bug de gestion mémoire ou autre.
Dans le second cas, note que notre étourdi qui clique sur n'importe quoi va en premier lieu se faire poutrer via le programme qu'il installe (imparable) ou des données spécialement construites visant son applicatif (avec une préférence pour ce qui est en frontal réseau: Navigateur, client mail/messageries diverses... oh, tiens-tiens, Rust vient de Mozilla... et ensuite, ce qui permet d'extraire/visualiser ces données, comme une visionneuse d'images).
C'est pourquoi je disais que le C++ (une grande part de l'applicatif compilé) est sans doute plus réaliste que le C (démarrage/OS/drivers-modules). Et en prime cela suffirait sans doute à faire le job.
D'ailleurs la remarque sur l'origine de Rust n'est pas innocente.
Mais même pour de l'applicatif, attention au combo language encore jeune qui évolue/dépendances fondation de pans entiers de nos systèmes/cycles de maintenance de ces derniers:
https://ariadne.space/2021/09/16/the-long-term-consequences-of-maintainers-actions/
C'est de 2021, mais le constat demeure.
Le 04/03/2024 à 11h55
Le 04/03/2024 à 11h26
Le 04/03/2024 à 20h12
Sans que ça fasse tout le travail, ça pourrait peut-être en faire 80%, non ?
Le 06/03/2024 à 11h27
Le 04/03/2024 à 08h16
D'un point de vue pratique, ce n'est pas au législateur de s'occuper de ça (coup de bol pour eux, pour une fois, ils n'ont pas dit une grosse connerie). Sinon, en France, tout le monde serait équipé du pare-feu OpenOffice...
Le 04/03/2024 à 09h32
Je n'ai jamais entendu parler du fait que Rust serait plus rapide que le C !?
Et pour faire plus rapide que le C, c'est l'assembleur ... et là, les « framework for monkeys » y'en a pas.
Le 04/03/2024 à 09h39
Le 07/03/2024 à 00h21
Le 04/03/2024 à 09h56
Pas toujours. En tout cas, pour sur les architectures modernes. Les processeurs sont tellement compliqués, avec les pipelines, et tout le tralala qu'un code C optimisé par compilateur est souvent plus performant qu'un code assembleur écrit à la main.
Le 04/03/2024 à 13h15
En revanche en code parallèles (type calculs scientifiques/ingé), Rust est jusqu'à x10 (d'après mon expérience) que du C/C++. Non pas en raison du compilateur mais du modèle mémoire qui n'est pas fait pour des tâches de type fork-join de manière efficace.
Le 04/03/2024 à 14h09
Effectivement, le benchmark que j'avais vu, c'était principalement du code séquentiel (comme la grande majorité des benchmarks)
Le 04/03/2024 à 21h05
Le 05/03/2024 à 00h55
Le 05/03/2024 à 08h59
Modifié le 05/03/2024 à 10h03
J'ai un client qui a préféré voir sa facture être multiplié par 3 parce qu'il a préféré une lib écrite en C++ qu'en Fortran pour du calcul d'algèbre linéaire. Alors qu'à la fin il ne fait qu'un appel à cette lib (donc il s'en fiche de la techno tant que l'ABI est stable). Mais dans sa tête Fortran sentait les cartes perforées...
Dans le milieu académique, on trouve encore du Fortran (qui plus est sous sa forme moderne). Même si les doctorants ne l’apprennent plus en cours, en général ils deviennent accros une fois qu'ils ont compris que, pour des problèmes s'exprimant avec l'algèbre linéaire, Fortran est génial. J'ai souvenir d'un étudiant de M2 qui ne jurait que par le C++. Et puis, lorsqu'il a découvert Fortran pour ses calculs de mécaniques quantiques en thèse, il a vite changer son fusil d'épaule.
Le 05/03/2024 à 09h57
OpenMP n'est pas compatible avec Rust nativement en raison de son modèle mémoire. MPI aurait un sens, mais il est souvent implémenté en C. Je ne vois dès lors peu l’intérêt de l'adjoindre à Rust. Un MPI en Rust (je ne sais pas si ça existe) aurait dès lors plus un sens. Mais bon, faire une réduction en Rust avec son modèle mémoire sur un supercalculateur, faut avoir de l'argent à perdre.
Le 04/03/2024 à 11h30
Faut voir que dans l'industrie, bien souvent un produit tout neuf exploite déjà le matériel à 80% à sa sortie (sinon, on sera mal placé vs concurrence à avoir surdimensionné et on vendra rien). Dès un petit milieu de vie on sera au delà des 95% après l'ajout des features définitives et on cherchera encore à grappiller pour ce qui n'était pas prévu au départ mais que les clients demandent.
Donc les qq % de pénalité de Rust posent déjà problème et comme c'est les industriels qui raquent et/ou contribuent...
Le 04/03/2024 à 13h18
Après de quelle industrie parle-t-on aussi. Perso, les contrats qu'on me file à exécuter en ce moment, c'est des grands groupes qui ont besoin de ré-optimiser des codes mal écrits ou mal fichus et soit disant vendu pour être performant.
Le 04/03/2024 à 10h45
Le 04/03/2024 à 11h35
Là où un remplacement par partie de l'existant peut se faire lors d'une transistion C => Rust, cela sera beaucoup plus difficile à mettre en oeuvre dans le cadre d'une transition C++ => Rust, sauf à remplacer d'un bloc tout un applicatif.
Remplacer un applicatif entier, cela présente de nombreux risques. Le faire uniquement parce que l'applicatif est écrit en C++, c'est une "mauvaise raison". Cela fait prendre d'énormes risques à court, moyen et long terme, pour des avantages qui ne se verraient potentiellement qu'à très très long terme.
Le 04/03/2024 à 11h43
Le 04/03/2024 à 12h34
En partant de là, ce genre de recommandation pourrait avancer et venir influencer le cadre décisionnel pour par exemple
- s'intégrer aux critères d'appel d'offre de l'état fédéral
- s'appliquer aux développements faits par des agences fédérales (p.ex. Nasa, les services postaux, ...)
Le 04/03/2024 à 13h30
Particuliers et PME pouvant se retourner contre leurs fournisseurs... Le pb historique Liability => Foolproof des USA. Et ils sont capables d'y aller très vite, ce ne serait pas une première fois. Seule de grosses faillites induites par une légalité douteuse pouvant alors les arrêter.
Le 04/03/2024 à 14h47
En U.E. la mozilla foundation, ou dans certains cas des contributeurs, pourraient se faire poursuivre par les utilisateurs lésés par une vulnérabilité.
Il ne sera plus possible de s'abriter derrière une clause de type "ce logiciel est mis à votre disposition tel quel, utilisez-le à vos risques et périls"
De ce que j'ai lu de l'approche US sur la question, on reste dans un cadre moins dangereux pour les petits acteurs, les contributeurs du libre, ...
Le 04/03/2024 à 14h57
Modifié le 04/03/2024 à 15h27
Aussi le coup de l'EIDAS où on oblige les navigateurs à faire confiance aux les autorités de certification étatique en mode "tu nous fais confiance, sinon...", au lieu de laisser les navigateurs gérer le sujet avec des critères qualitatifs objectifs, ça ne rassure pas. Ils sont occupés à changer l'U.E. en république ex-soviétique.
Et les projections concernant les votes pour les élections européennes tendent à montrer qu'on ne va pas vers une amélioration de l'intelligence des gens qui nous dirigent... bien au contraire...
Le 04/03/2024 à 08h34
Le 04/03/2024 à 08h34
Moi ça me rassure pas, car lorsqu'on qualifie un truc comme "sûr", on a tendance à relâcher son attention. Et donc à la fin, à faire de la merde quand même en reposant sur la supposée sûreté by design.
Je ne suis pas développeur et suis incapable de dire si tout ceci est vrai ou pas pour Rust. Peut-être que oui et tant mieux. Mais j'aime pas les arguments du style "utilisez Machin car c'est plus sûr", ça me rappelle trop les "utilisez Linux c'est plus sécurisé" scandé tel un dogme alors que c'est au mieux de la superstition. La sécurité magique by design, à ma connaissance, ça n'existe pas. Ca demande du travail dans tous les cas. Si le produit facilite ce travail et évite de faire des erreurs basiques, tant mieux. Mais perso je considère qu'il ne faut pas non plus trop s'endormir sur ces arguments.
Le 04/03/2024 à 08h59
Un point que je trouve quand même relativement intéressant c'est que le but pour le gouvernement américain (visiblement) est de déplacer la responsabilité
Je ne sais pas si c'est la meilleure des solutions mais c'est un choix qui s'entend s'ils arrivent à trouver des solutions alternatives qui palient à 99% au problème initiale mentionné dans l'article.
Le 04/03/2024 à 09h24
Pour ce qui est de Rust, le langage est effectivement memory safe sauf que... pour une raison qui m'échappe, il est prévu des opérations unsafe telles que déréférencer un pointeur.
Le 04/03/2024 à 09h58
Le 04/03/2024 à 10h27
Le 04/03/2024 à 11h30
Le 04/03/2024 à 10h45
C++ est plus "safe" que C, mais C++ n'empêche pas de faire de la merde non plus avec des cascades de conséquences plus importante.
Le 04/03/2024 à 12h52
https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf
Qui ammenait à travers l'exemple du C (et Rust n'y pourrait rien non plus, le pb étant de taper le code généré, y compris le compilo des générations suivantes!) à ce bilan:
"In demonstrating the possibility of this kind of attack, I picked on the C compiler.
I could have picked on any program-handling program..."
Demeure!
Le problème étant que la parade imaginée bien plus tard (au delà du pb de poule et d'oeuf de compilo de confiance posé par la DDC, cf "Here’s Wheeler’s trick" ici: https://www.schneier.com/blog/archives/2006/01/countering_trus.html) ne vise pas les interpréteurs (ou autre bytecode généré à la volée) côté utilisateur.
Décliner le concept du natif/compilé, ce qui est imaginable, poserait en effet un problème existentiel à ce type de langage: Multiplier, à chaque exécution ou 1ère exécution et chez chacun, la pénalité unique de build côté développeur du natif... Ouille!
Le 04/03/2024 à 14h45
Pour simplifier un peu: Rust empêche intrinsèquement les erreurs "non intentionnelles" les plus fréquentes parce que le programmeur est obligé de déclarer son intention de manipuler/partager un espace mémoire.
Rust n'empêche pas les erreurs grossières mais tellement communes "je fais comme ça pour l'instant et je corrigerai plus tard" qui n'est jamais corrigé, ni le fait qu'une bibliothèque vérolée pourrisse un produit, ni une conception trop légère sur la sécu...
Modifié le 04/03/2024 à 15h29
Par ex. le modèle d'event-loop de NodeJS basé sur libuv permet de meilleurs perfs avec un serveur web NodeJS que Apache.
Il faut vraiment avoir des besoin de calcul à haute performance spécifiques pour que NodeJS ou Python ne conviennent pas.
S'il n'y a pas de besoin de perf en calcul, NodeJS ou Python sont de bien meilleur choix que du code C/C++ pour une application industrielle.
Pour les autres cas il y a Rust ou Go.
Si on se repose sur une peur permanente du dev pour "ne pas relâcher son attention", la partie est déjà perdue. L'attention mise sur des problèmes de gestion mémoire ne sera pas mise sur d'autres aspects.
Par ailleurs, on peut détruire l'efficacité d'un programme C/C++ plus facilement qu'en NodeJS.
Particulièrement en C++, c'est vraiment facile de copier des structures entières et tous leurs enfants en une ligne de code. Comme une std::map(std::string,std::string) passé en argument par valeur.
Ou de rajouter des blocages et des ralentissements significatifs avec des mutex et des locks, alors que NodeJS a une architecture lock-free.
Le 04/03/2024 à 16h34
En l'occurence, je vois 2 gros points noirs qui viennent complètement fausser la comparaison :
- Apache + PHP, et non Apache + FastCGI/PHP (un context PHP est recréé à chaque requête, forcément, ça fait mal)
- A une époque pas si lointaine, les serveur nodeJS n'étaient jamais en front, toujours derrière un reverse proxy comme... Apache (les choses ont peut être changées depuis, d'où l'usage du passé). Quand on commençait à vouloir faire de la mise en cache, de la compression gzip à la volée ou même tout simplement du SSL/TLS, nodeJS était nul, sans compter sur l'explosion de la mémoire nécessaire.
Le 04/03/2024 à 17h05
Après, ma remarque trollesque sur NodeJS (mais les explications données ensuite étaient très intéressantes, merci aux intervenants) venait surtout du point de vue de quelqu'un qui ne comprend pas pourquoi il faut démarrer un serveur web qui exécute le moteur Javascript de Chromium pour faire un éditeur de texte sur son PC.
C'est une caricature, mais à un moment, je me dis qu'on a foiré une étape en chemin. Sans parler de la surface d'attaque qui s'élargit forcément car on empile les runtimes et les dépendances.
Certes, ça permet aussi de faire des applications extrêmement portables, VSCode en version Web c'est très pratique (GitHub Codespace reposant là dessus) et Diagram.net est un formidable outil. Mais y'a toujours un truc qui me gêne avec cette techno et la multitude de produits désormais basés dessus. Un peu comme les appImage qui pullulent sous Linux pour compenser la multiplicité des distribs en préférant ramener des bulldozers de 45 tonnes pour le moindre logiciel avec une régression monumentale en terme de gestion de packages (en gros, aucune).
Modifié le 04/03/2024 à 08h53
Le 04/03/2024 à 11h07
Le 04/03/2024 à 09h10
La Maison-Blanche exhorte les développeurs à utiliser des langages de programmation "memory safe".
Donc effectivement d'abandonner C/C++ comme à titré le Monde Informatique.
Mais pas de passer à RUST comme titre NXI.
C'est dingue de constater que Le Monde Informatique a mieux compris l'information que NXI.
Le 04/03/2024 à 09h36
Il y a un paragraphe entier intitulé « Rust cité en exemple », qui précise « Dans son rapport de 19 pages, l'ONCD cite le C et le C++ comme deux exemples de langages présentant des vulnérabilités en matière de sécurité de la mémoire, et qualifie Rust comme sûr. »
La source précise effectivement « there are dozens of memory safe programming languages that can – and should – be used », mais seul Rust est nommément cité.
Modifié le 04/03/2024 à 09h48
Voila. ni plus ni moins.
Idem dans la note de la NSA:
Les langages sont simplement cités dans l'ordre alphabétique, sans indiquer de préférence. De plus, la note indique que les fabricants doivent en évaluer plusieurs. Donc pas foncer tête baisser vers RUST.
Le 04/03/2024 à 11h32
Le 04/03/2024 à 09h37
Normalement, un dev sait comment un ordi fonctionne, sait comment un processus vit en mémoire, sait comment le code et les données sont agencées dans l'espace mémoire du process et sait comment le langage ordonne les données en mémoire.
A quoi bon bouffer des perfs en compil et en execution pour faire des contrôles inutiles dans la mesure où le dev a déjà fait le travail ?
Modifié le 04/03/2024 à 10h19
Ca ne sert pas à grand chose d'utiliser un langage très rapide pour une application qui n'en a pas besoin plus que ça (sans tomber dans l'excès inverse non plus), surtout si l'équipe de développement doit longtemps galérer à corriger des bugs abscons (les bugs de gestion mémoire c'est assez horrible à tracer, il faut déjà s'apercevoir que c'en est un) parce qu'on sait qu'elle n'a pas les compétences pour maîtriser ce langage. Ceci dit sans vouloir juger, l'équipe a certainement d'autres compétences et je ne dirai pas qu'elles sont moins bonnes, il faut juste s'adapter aux points forts et aux points faibles, y compris de ceux pour qui on développe quand on doit livrer les sources.
Donc par exemple (choisis vite faits), OK pour mettre du C avec des vrais morceaux d'assembleur dans un encodeur vidéo, mais certainement pas dans un logiciel de gestion de quelque chose en entreprise où on ne mettra sans doute même pas du C++ mais plutôt un des langages "sécurisés" cités dans l'article, quand c'est pas carrément du Web (bon ça c'est surtout pour la facilité d'accès depuis n'importe où).
Le 04/03/2024 à 10h09
Le 04/03/2024 à 16h22
C'est l'humain le soucis et c'est l'idée de se baser sur la capacité d'un dev à ne pas commettre d'erreur qui est une erreur.
Le 05/03/2024 à 09h41
Modifié le 05/03/2024 à 16h58
Rust pour le coup serait un très bon langage pour ces personnes-là en leur forçant à réexaminer le code que le compilateur refusera et de voir où les possibilité de condition de course ou d'aliasing interviennent, ce leur serait d'un grand apprentissage. Mais malheureusement leur ego, qui n'a d'égale que leur sentiment d'excellence, ne leur permet pas ce genre de remise en question.
Si tu es dans cette catégorie, je te souhaite de courage pour gérer les bugs sur le field. Mais je sais, ça ne doit jamais t'arriver ;)
Le 04/03/2024 à 10h14
Avec ce rapport, les autorités US rappellent aux fabricants que ca existe et qu'ils doivent donc les utiliser.
Le 04/03/2024 à 10h15
Et c'est tellement facile d'utiliser un pointeur après avoir libéré la mémoire dans un programme à états.
Le 04/03/2024 à 11h33
Le 04/03/2024 à 13h13
Va falloir inventer le langage de programmation inclusif, piquant les yeux à l'écrit et imprononçable à l'oral, imposant d'oublier "l'accord" qui ferait écrire "developpeur-euse" sonnant trop "develop-peureuse" et bouclerait la boucle de l'inclusif au stigmatisant!
Bon, sur le fond du problème on en revient à des préoccupations très typiques des USA: Liability menant au Foolproof (littéralement: "A l'épreuve des cons"), par conception et/ou parades/avertissements.
Les conséquences chez eux allant du "Objects in the mirror are smaller than they appear" (sans déconner!) gravé sur les rétros de bagnole à des matériels conçus pour presque tout pardonner niveau erreurs de l'utilisateur. Quand c'est trop difficile voir impossible (aviation...), cela peut mener à la faillite des constructeurs sur un seul évènement. Y'a bien que le sacro-saint flingue qui chez eux échappe au concept.
Modifié le 04/03/2024 à 16h35
Le 05/03/2024 à 10h15
Depuis l'EFS écrit de nouveau en français. Un bilan qui vaut sans doute bien des sondages.
Le 05/03/2024 à 16h51
Je ne supporte pas ta façon de raisonner mais pourtant je considère que tu as le droit de t'exprimer. Tu ne me portes pas irrespect comme le commentaire plus haut ne te porte atteinte en aucune manière.
Le 06/03/2024 à 09h42
Ce qu'oublient les adorateurs de l'écriture inclusive excluante, c'est qu'en plus d'excluer totalement les non-binaires, elle n'est aucunement prononcable à l'oral. Alors que l'écriture n'est là QUE pour coucher l'oral, et rien d'autre.
Le 06/03/2024 à 10h50
Modifié le 06/03/2024 à 12h11
In-fine, comme ils ne viennent pas, l'EFS ne pouvait pas se permettre d'irriter ceux qui viennent pour quelques fio qui aiment visiblement plus râler que les piqures!
Et de ré-écrire en français lisible et même prononçable...
Le 11/03/2024 à 12h19
Ha mais tu réussis vraiment bien à montrer que le problème que tu as avec cette comm' se situe au niveau de la langue française et pas un problème viscéral contre ces personnes
Le 12/03/2024 à 14h37
Je dirais que ça a démarré avec la gay-pride: Franchement, qui a envie en croisant cela dans Paris avec ses gosses de leur expliquer pourquoi 2 mecs/nanas se paluchent, ou ce que la grande folle en talons cambrée comme la vache qu'on amène au taureau a logé dans le fion?
Et ça c'était avant qu'ils ne demandent la PMA (le M c'est pour médical, rappelons le) pour toutes (sans logique vs des préférences sexuelles rendant l'affaire normalement impossible) en attendant la mère porteuse pour tous, par souçi d'égalité...
Il y a un moment ou cela pose en effet un problème qui peut devenir viscéral, mais merci de ne pas confondre cause et conséquence.
Modifié le 12/03/2024 à 17h47
J'ose espérer qu'ils peuvent s'exprimer suffisamment librement que pour pouvoir te poser des questions hautement plus intimes que ça sans avoir à sentir qu'il y a un problème parce que ça dérange papa ou maman.
Le 15/03/2024 à 08h35
Le 05/03/2024 à 17h49
Le 06/03/2024 à 09h43
Modifié le 06/03/2024 à 10h22
Victor Hugo
Mais tu considères aussi qu'un bon dev est un dev qui ne fait jamais d'erreur malgré le fait d'être un humain. Ca ne doit pas te sembler impossible d'arrêter le soleil non plus
Le 06/03/2024 à 12h26
Maintenant, c'est mon avis. Le sien on ne l'aura jamais et je ne me permettrait certainement pas de me raccrocher à ses écrits pour soutenir mes propres opinions.
Le 06/03/2024 à 12h04
et puis bon, directement les grands mots, comme "détruire la langue" ... que de balivernes. On est dans un monde qui bouge et change, et s'efforcer de garder la langue au 17è siècle n'est pas lui faire honneur, et ce n'est pas non-plus faire confiance à celleux qui la pratiquent.
Modifié le 04/03/2024 à 20h34
https://github.com/TNZfr/watchfreq
Edit : Eh bé ... 22 clones du dépôt en 5 heures. :)
Modifié le 06/03/2024 à 10h41
Il ne démontre aucune compréhension spécifique de l'architecture d'un ordinateur. Faire des malloc, utiliser le keyword "register" ou savoir comment récupérer les fréquence du CPU via sysfs ça n'est pas de la compréhension du fonctionnement d'un ordinateur. Tu sais coder en C et utiliser certaines API du système Linux.
La remarque de Stéphane sur le fait d'être un Dieu s'attache plutôt à critiquer la remarque qui était que si tu sais comment l'ordinateur fonctionne, alors il est à ta charge de gérer l'intégrité de la mémoire et que, au final, c'est facile de ne jamais faire de bourde puisque tu sais comment ça fonctionne.
Tu es inhumain si tu es capable de guarantir que tu ne commetras aucune erreur de distraction qui aboutiront à des problèmes de mémoire si tu n'as pas l'assitance d'outils (et il en existe en C aussi).
Là aussi ton projet ne démontre rien, sa complexité est trop basse pour prouver que tu as cette qualité qu'on trouve inhumaine ;)
Modifié le 06/03/2024 à 22h13
Et pour peu que tu aies compris les mécanismes codés ... lire 3 lignes et reconnaître une arborescence linux et un ou 2 mots-clés du langage ne fait pas de toi un critique crédible. Tu as regardé la surface et tu es passé à côté de l'algo.
Le 06/03/2024 à 22h50
- fonction GetNbCore() : aucune vérification sur l'accès au pipe, ni aucune gestion des erreurs.
- fonction read_freq() :
- idem, aucune vérification quant aux accès au système de fichiers
- pas de vérification de la valeur de retour des appels à malloc
- je ne vais pas dire que la mémoire n'est pas libérée, puisque ton application à juste besoin d'allouer de la mémoire au début une fois pour toute au début de l'application. Une fois qu'on est dans la boucle principale, aucune allocation n'est faite.
Je m'arrête là pour l'analyse. Un attaquant aurait de quoi largement faire avec ce petit programme ^^ Surtout qu'il y a d'autres problèmes (mais pas lié au langage lui-même).
Le 06/03/2024 à 23h59
Contrôle du système de fichiers : surtout sur une arborescence mémoire montée par le noyau (et donc mécaniquement présente sinon tu n'aurais pas même pu te connecter à la machine).
Un contrôle de malloc unitaire sur des tailles maîtrisées (dépendant du nombre de cores/threads et non d'un paramètre utilisateur) ... t'es gentil. Tu passerais ton temps à faire des malloc / realloc dans des boucles et/ou des malloc dépendants de paramètres utilisateur (donc potentiellement déconnants), là, oui le contrôle des valeurs retournées est obligatoire.
Et au jeu des vérifications, j'ai aussi oublié de contrôler l'espace disque disponible (ben oui puisqu'il y a des fopen), les T° CPU / carte mère (ben oui, ça boucle) et l'âge du capitaine.
Effectivement, tu fais bien d'arrêter ... parce qu'enfoncer les portes ouvertes des « bonnes » pratiques trouvées sur wikipedia, n'importe quel script-kiddie en est capable. Tu n'as même pas essayé de comprendre l'algo (d'ailleurs personne n'en a parlé) et pourquoi les contrôles que tu dénonces manquants ne sont pas nécessaires.
Maintenant, puisque tu as trouvé des « failles », je te propose de mettre à jour le bout de code et de nous montrer comment il devrait être. Toutefois, il faut que :
* ça compile sans warning,
* ça reste maintenable CàD compréhensible par quelqu'un qui découvre le code pour la 1ere fois (ça c'est pas simple)
* les perfs ne soient pas dégradées : CàD une conso CPU qui ne polluera pas les mesures.
Enjoy !
(d'où le fameux « keep it simple, stupid ! »)
Le 07/03/2024 à 08h53
Et puis, pas de bol, je ne parlais pas de ça (du aoti). Je parlais d'aller lire un flux sans même savoir s'il est ouvert correctement ou pas.
Il est effectivement impossible d'avoir un programme tournant dans un environnement "sécurisé" comme les conteneurs, un chroot, ou dont l'accès à cette partie du système de fichier est interdite via des règles de gestion fine. De même qu'il est impossible que la limite du nombre de descripteur de fichiers ouverts soit atteinte. Tant de certitude...
Es-tu certains à 100% que les appels à malloc soient maitrisés ? Moi non. Le premier dépend de la valeur de retour du programme "nproc" : le premier programme "nproc" trouvé qui sera dans le PATH (c'est ça la faille qui ne dépend pas du langage : utilisation d'un programme sans préciser son chemin absolu, permettant de le substitué très facilement). Ton nproc renvoi 100000000 et boum.
En gros, ton programme, je peux lui faire consommer 4Go très facilement si j'en ai envie. Toujours maitrisé donc ?
De plus, tu sembles considérer des ordinateurs avec une mémoire de plusieurs Go. Sache que Linux tourne sur de nombreux terminaux. Par exemple, des routeurs. Celui que j'ai et sur lequel tourne OpenWRT ne dispose plus que de quelques ko (oui oui, quelques ko !).
Que d'arrogance.... Que répondre à ça, si ce n'est que tu ne sembles même pas comprendre les bases de la sécurité informatique dans les programmes...
En toute honnêteté, on s'en fiche de ton algo. C'est pas le but de la discussion. Le but c'est l'apport d'un langage comme le Rust par rapport au C.
Et moi je maintiens qu'ils sont nécessaires. Pas pour le cas "normal" (on est d'accord la-dessus). Mais un attaquant qui cherche à exploiter une faille n'en à rien à faire du cas normal. Ce qui l'intéresse, ce sont les effets de bords exploitables.
Et désolé de te le dire, mais ton programme, pourtant court, présente de nombreuses failles que ton orgueil refuse de considérer.
Pas de souci. Je peux. Où puis-je t'adresser mon devis ?
Le 07/03/2024 à 10h10
Tu nous fais le chapitre du programmeur absolu qui ne sait pas contextualiser. Et justement, la contextualisation permet d'ajuster le code avec ce qui est nécessaire. C'est un ensemble. Pour faire tourner une application dans un datacenter la composante plateforme de production est très importante (puissance de calcul, système d'exploitation ...) dans la conception du code.
Je vais faire le vieux con et j'aime pas ça : un programme ne tourne pas tout seul, il lui faut un OS et une machine pour fonctionner. Si tu ne tiens pas compte de ces paramètres, aucun programme ne pourra être dans les clous des règles de programmation, à part HelloWorld, et encore, y'a des fois où certains arrivent à faire de la m*rde avec ce dernier. Mais bon, pour ça, il faut avoir un peu plus de bagages que des formations médailles en chocolat de paramétrage de frameworks en java. Tout le monde sait qu'avec Java, on a pas besoin de machine et de système d'exploitation !
Le 07/03/2024 à 10h33
Et il est vrai que tu ne campes pas sur tes positions non plus
C'est là où tu fais une énorme erreur. Ce n'est pas que je ne sais pas contextualiser. C'est que ton outil, il est dispo en ligne et en open-source. Tu ne peux pas savoir COMMENT il sera utilisé, ni par QUI. (En fait, je ne devrais pas dire open source, car il n'y a pas de licence. Il est en source available).
Ne sachant ni comment, ni par qui, tu ne peux pas savoir s'il va être utilisé ou pas pour y exploiter des failles. Et je t'ai donné l'exemple d'une faille qui est présente.
Justement ! (sur la partie en gras). Un programme ne tourne pas tout seul. Ton cas d'usage perso, pour lequel tu l'as développé, c'est peut être OK pour toi. Maintenant, je le répète :ton programme est en ligne. Du coup, tu ne peux pas savoir s'il est utilisé ou non, ni comment, ni par qui, ni dans quel environnement.
Ne sachant pas tout ça, tu dois protéger au maximum pour éviter les problèmes et les failles. Ton programme ne serait utilisé que par toi, sur ton serveur avec 16Go RAM utilisant une Debian12 à jour dont le seul accès est un SSH par clé 4096bits en utilisateur simple. Oui, ton programme suffit tel qu'il est. Sauf que ce cas d'utilisation, tu ne peux pas le garantir. C'est aussi simple que ça, et c'est ça qu'a priori, tu ne comprends pas.
Hmmm, mon trollomètre détecte une attaque ad hominem. Et si tu apportais une réponse précise sur des bases techniques, au lieu de vouloir t'attaquer aux compétences de ton interlocuteur ?
Le 08/03/2024 à 11h33
char Buffer[16] = "";
ça garantit juste que Buffer[0] est le caractère nul, mais ne dit rien des 15 autres, qui vont simplement récupérer ce qui traîne sur le stack.
Modifié le 09/03/2024 à 13h29
Mais, quand tu regardes ce pourquoi la variable va être utilisée, la plage de valeurs recues est très limitée. A vrai dire, j'aurai pu réduire la taille de la variable car la valeur la plus grande est sur 10 caractères, donc un Buffer[11] aurait fait le job.
Et pour finir avec les strings, la commande donnée au popen retourne une string, donc une série de caractères terminée par un 0 binaire. Du coup, je suis sûr d'avoir une string en bon et dûe forme dans le atoi ...
C'est dingue ce que le manque d'XP et une croyance universitaire crasse peuvent faire dire.
Modifié le 10/03/2024 à 14h22
Non, passer Buffer à 11 ou une quelconque autre valeur ne changera rien à l'affaire (et je passe sur le fait que tu hard-codes la taille du buffer au lieu d'utiliser une constante...) . Le simple fait que tu le proposes prouve que tu n'as rien compris. Le problème ce n'est pas le fread qui va écrire trop loin, ce n'est pas un buffer potentiellement trop petit, c'est le atoi qui va lire trop loin car rien ne garantit que le buffer sera terminé par un zéro binaire.
Car non, la commande passée à popen ne renvoie pas une string, elle renvoie un stream de bytes que fread va mettre dans la variable Buffer. Mais cela ne constitue pas une "string" au sens C car le stream ne contient pas de zéro binaire en fin, et fread n'en mettra pas. Pour mettre un tel byte nul en fin, il eut fallu faire un truc du genre (de tête et quick-n-dirty, et pas portable car suppose que sizeof(char) == 1, mais obligé vu que tu n'as pas jugé utile de définir un constante pour la taille du buffer) :
Buffer[fread(Buffer,1,sizeof(Buffer)-1,fd)] = '\0';
Note à quel point c'est différent de ce que tu as écrit, notamment il faut lire au maximum 15 éléments de taille 1, et non 1 élément de taille 15 de façon que fread renvoie le nombre de bytes lus histoire qu'on puisse accoler un NUL en fin.
Ou alors... utiliser fgets() ???
Tout ceci prouve que tu n'as jamais écrit du code qui fonctionne autrement que par hasard et sur ta propre machine. Donc, au niveau expérience, évite de voir la paille dans l'oeil de ton voisin, ça t'évitera de passer pour un noob.
Modifié le 10/03/2024 à 21h12
Effectivement, si la commande lancée par le popen aurait retourné un stream sans fin de ligne ni 0 binaire, cela aurait été pris en compte (avec un p'tit memset). Cette approche plus dépouillée sert la maintenabilité. Et ta proposition est juste, mais n'aide pas la maintenance.
Mon code fonctionne car les procédures appelées forment un ensemble.
PS : surconfiance avec + de 20 ans d'XP sur le sujet ... mais bien sûr.
Modifié le 10/03/2024 à 21h01
12
$ nproc|od -c
0000000 1 2 \n
0000003
$ nproc|wc -c
3
Donc les 3 caractères sortis par nproc sont : 1 2 et \n (=0x0a)
Pas de 0 "binaire" (comme tu l'appelles) de lu en fin de chaîne quand tu lis ces 3 caractères avec ton fread.
Ce qui suit les caractères lus par le fread est indéterminé. Ce n’est pas pour rien que le fread retourne le nombre de caractères lus.
Par contre, c'est le atoi qui te sauve non pas parce que la chaîne est terminée par un 0 mais parce qu'elle est terminée par un 0x0a et que le atoi s'arrête au premier caractère différent d'un chiffre après avoir détecté le début d'un nombre.
Et ici, si la lecture du pipe s'est bien passée (ce que tu ne vérifies pas), tu auras bien ton nombre.
Le 10/03/2024 à 20h55
Le 10/03/2024 à 21h03
Le 10/03/2024 à 21h24
S'il y avait eu utilisation des strings dans un printf par exemple, oui, il y aurait eu un memset.
Le 11/03/2024 à 08h40
Maintenabilité
Le 11/03/2024 à 10h36
La maintenabilité justement, c'est en environnement zOS où j'ai pu voir passer les pires trucs pondus par des « barbus-plein-d'XP ».
Dans ce genre de contexte de travail, les documentations projet tiennent sur une page : Cf Machin-pas-loin-de-la-retraite-ou-déjà-parti. Et les DSI derrière qui attendent en embuscade le départ en retraite pour tout décommissionner en urgence afin que cela ne leur pète pas au nez.
Une fois, des vieux programmes Z ont été rachetés à un client et la prise en main des bouzins a été longue et dure. Plusieurs mois de reverse-engenering pour s’apercevoir qu'on aurait plus vite fait de repartir de la page blanche.
La maintenabilité efficace, par ordre de priorité pour moi :
1. Programmation structurée
2. Capacité à comprendre pour un dev extérieur et accessoirement par l'auteur lui-même
3. Cohérence d'écriture globale : va maintenir un source avec 5 ou 6 styles d'écriture différents et avec du C, ça peut faire très vite mal à la tête.
4. Mail et/ou N° de téléphone de la personne qui a l'histoire du programme en tête : mieux vaut demander à un qui sait plutôt qu'à 2 qui cherchent
Le 11/03/2024 à 11h04
Tu m'expliques pourquoi tu castes explicitement le résulat de atoi vers un long ? Outre que c'est inutile, ça rend le programme difficile à comprendre car celui qui le lit va devoir se demander pourquoi tu fais ça.
C'est pour la faciliter la compréhension que tu lis une string avec fread au lieu de fgets ?
C'est pour la cohérence que la variable "Buffer" commence par une capitale, contrairement à toutes les autres variables ?
Je confirme, ton code est indigeste
Woaw... Bien sûr.
Le 11/03/2024 à 17h44
Chapeau pour tes 20 ans d'XP, tu les caches vraiment bien.
Le 10/03/2024 à 21h18
- avoir des conventions cohérentes : un coup de PascalCase, un coup du camelCase, un coup du snake_case
- nommage qui laisse sérieusement à désirer ;
- utilisation de constantes en dure, au lieu de les définir via un #define ou une variable const ;
- utilisation de la virgule au lieu du point virgule pour séparer des instructions (oui, c'est valable en C, je sais, mais cela n'en est pas moins une très mauvaise pratique, surtout pour éviter de définir un bloc d'instructions dans un if ou else par exemple)
Comme je te l'ai déjà dit dans un précédent commentaire : ton code fonctionne pour toi, dans ton cas d'utilisation. Mais il est public (tu l'as publié sur github) et tu ne sais pas dans quelles conditions il sera utilisé.
Ton code est du pain béni pour n'importe quel hacker, mais ça, tu n'en as que faire. Pire, tu refuses ne serait-ce que de le concevoir.
Argument d'autorité + attaque ad hominem (encore). Peux-tu rajouter la victimisation la prochaine fois stp, histoire de varier les procédés rhétoriques ?
Ou plus simplement, avoir de vrais arguments pour défendre ton point de vue. Merci d'avance ;)
Le 10/03/2024 à 21h42
Je n'ai pas utilisé les conventions normées.
Oui, c'est publié sur github et tous les script-kiddies de passage vont l'utiliser pour coller le boxon sur internet parce que c'est pas dans les normes des gardiens de la méthode.
Le 10/03/2024 à 21h55
Et le comble, c'est que ton programme se termine par un beau segmentation fault à l'exécution.
Current Minimum Maximum
Core 0 : Khz Khz Khz
Core 1 : Khz Khz Khz
Core 2 : Khz Khz Khz
Core 3 : Khz Khz Khz
Core 4 : Khz Khz Khz
Core 5 : Khz Khz Khz
Core 6 : Khz Khz Khz
Core 7 : Khz Khz Khz
Total : Khz Khz Khz
Average : Khz Khz Khz
Nb Mini :
Nb Maxi :
Extr. Min: Khz Khz Khz
Extr. Max: Khz Khz Khz
Segmentation fault
(tu m'excuseras, je me suis contenté d'un copier/coller de la console, je n'ai pas envie de m'amuser à héberger une image pour ensuite la coller ici).
Alors, tu peux dire tout ce que tu veux de ton programme, tu ne peux pas lutter contre les faits.
Le plus drôle dans tout ça, c'est que j'ai trouvé un buffer overflow exploitable, et que je voulais justement le compiler/tester pour vérifier, mais que je n'ai même pas eu à le faire, car ton programme plante de lui-même.
J'applaudie, à 2 mains, les 20 ans d'expérience mis avec tant de valeur dans ton commentaire précédent
Le 10/03/2024 à 22h01
Le 10/03/2024 à 22h14
Ce que j'essaie de te dire (et d'autres aussi), c'est que ton comportement arrogant vis-à-vis de ton programme est une des plaies quant à la sécurité des programmes d'aujourd'hui. Rust (que je n'apprécie pas vraiment, je trouve sa syntaxe illisible) empêche, de par sa conception, les principaux pièges qui constituent la majorité des failles (une étude révélait, par exemple, que la majorité des failles de sécurité dans des programmes C étaient dues à des buffer overflow).
Le pire, c'est que non seulement tu n'arrêtes pas de dire que ton programme est bien pensé, mais qu'en plus, tu te montres plutôt méprisant (pour ne pas dire insultant) envers celles et ceux qui ne seraient pas d'accord avec toi.
Du coup, je ne peux qu'abonder dans le sens du commentaire 14 de Stephane Bortzmeyer (sauf le côté virilisme que je n'ai pas trop compris dans son propos), où, désolé de te le dire, ton comportement est l'archétype même de ceux qu'il dénonce.
Le 10/03/2024 à 22h52
Au quotidien, je tourne en GCC 13.
« Le pire, c'est que non seulement tu n'arrêtes pas de dire que ton programme est bien pensé, mais qu'en plus, tu te montres plutôt méprisant (pour ne pas dire insultant) envers celles et ceux qui ne seraient pas d'accord avec toi. »
Je reste dans le ton des commentaires qui ont été faits. L'arrogance dont tu me crédites n'est ni plus ni moins que celle avec laquelle tu as entamé les débats.
Pour le virilisme, bien vu, je n'avais pas rebondi sur son commentaire.
Disons que le monsieur ferait bien d'aller faire un stage dans une équipe projet au sein d'une ESN pour voir comment ça se passe dans la vraie vie.
Non, tous les devs ne sont pas nuls (y'en a quand même), les conditions de réalisation des projets, par contre, sont pour beaucoup dans la dette technique des applis (et donc les CVEs créées ou non corrigées ...). Dans ces conditions de réalisation, de manière non exhaustive, on y trouve les comptables gérant à date d'échéance, un turn-over de compétition, des affectations de développeurs sur des périmètres dépassant leur niveau d'expérience, un client girouette, etc ...
Le 10/03/2024 à 23h09
Si tu crois que j'ai "recherché" un environnement vétuste... ben non. J'ai juste pris la première VM que j'avais sous la main (car oui, ma machine principale est sous Windows )
On pourra se la jouer court de récré, car bizarrement, en relisant nos premiers échanges, je n'ai pas du tout la même interprétation que toi. Je t'avoue qu'après un "script kiddy" et "une médaille en chocolat dans le paramétrage Java", j'ai commencé sans doute à être un peu moins sympa, sans pour autant tomber dans des attaques ad hominem. Je préfère toutefois laisser aux lecteurs se faire leur propre opinion à ce sujet.
Pour ma part, je pense que l'on peut clore la discussion, le tour ayant été fait sur le sujet.
Modifié le 11/03/2024 à 07h01
Une VM en WSL je suppose ?
Le 11/03/2024 à 08h02
Le 11/03/2024 à 18h01
%d
dans unprintf
pour formater deslong
) j'ai pas été plus loin. De toute évidence, sur son architecture les long et les int ont la même taille... C'est probablement pour cela que sur sa machine à lui il n'y a aucun warning. Et comme "pas de warning = programme OK", tout roule.Et puis comme dit si bien alex.d ailleurs dans le thread, y'a pas de vulnérabilité dans printf
Le 11/03/2024 à 18h24
Plus sérieusement, tant qu'il y aura des dev avec ce genre de mentalité, les CVE ont de beaux jours devant eux
Le 11/03/2024 à 08h20
"Cette approche dépouillée" mon dieu... Ce n'est pas une approche dépouillée/
Quant à la ligne suivante où tu castes explicitement le résultat de atoi vers un long, tout ça pour retourner le nombre de processeurs (qui ne devrait en toute logique pas dépasser 65535 dans le meilleur des cas...) oui de fait ça respire 20 ans d'expérience... Vingt ans de cut-n-paste de code que tu ne comprends pas.
Le 04/03/2024 à 09h38
Le 04/03/2024 à 09h44
Le 04/03/2024 à 09h33
Il parle aussi de "Memory Safe Hardware" (CHERI est cité en exemple: est-ce que Next a déjà fait un article sur le sujet?)
et de "Formal Methods".
Le 04/03/2024 à 09h46
Modifié le 04/03/2024 à 10h16
Le 04/03/2024 à 10h37
Le 04/03/2024 à 10h57
1. C/C++ est vulnérable aux risques d'une mauvaise gestion mémoire.
2. C/C++ est invulnérable aux risques d'une mauvaise gestion mémoire.
Votre réponse: ___
Le 04/03/2024 à 10h58
Le 04/03/2024 à 10h13
Le 04/03/2024 à 11h36
Le 04/03/2024 à 11h50
Après, il faut utiliser le bon outil pour la bonne tâche. Le C n'est pas la bonne solution dans tous les cas, mais il est erroné de vouloir déconseiller l'usage du C dans tous les cas.
Le 11/03/2024 à 09h04
Le 11/03/2024 à 09h33
Le 11/03/2024 à 11h12
gets() est une vulnérabilité exclusivement due à la librairie standard (il manque 'juste" la longueur du buffer dans les arguments - problème que n'a pas fgets)
Par contre le fait d'avoir des arguments quelconques sans aucun contrôle de type (ni même d'implémentation portable avant l'avènement de la notation va_args) pour permettre le fonctionnement de printf (ou scanf si tu y tiens vraiment...) est bien une caractéristique du langage.
Le 11/03/2024 à 12h34
Le 11/03/2024 à 12h49
Modifié le 04/03/2024 à 10h12
- langage proche du matériel
- délais exécution à timing déterministe (adapté au temps-réel, pas de garbage collector)
- gestion sécurisée de la mémoire
On peut considérer que:
Le premier critère disqualifie les langages interprétés comme Js, Python, Java, ...
Le second exclue C#, go, V, et tous les langages utilisant impérativement un garbage collector
Le troisième exclue l'assembleur, c et c++
Rust est juste cité comme un exemple de langage correspondant à ces trois critères mais n'ayant pas encore fait ses preuves dans l'aérospatial.
D'autres alternatives intéressantes, correspondant à ces critères mais non citées sont par exemple ADA (vénérable langage très implanté dans l'aérospatiale), D (si on désactive le GC) , Zig, Swift, Ordin
Le 04/03/2024 à 18h13
Le 04/03/2024 à 19h13
Pour le GC de Java il y a Epsilon, mais je n'ai pas encore pu me faire une opinion...
Faire des mécanismes similaires à Rust en Java? non, impossible, la notion de borrow qui est cruciale dans le modèle Rust et qui oblige les devs à explicitement gérer le cycle de vie des variables quand elles sont passées à des fonctions casserait tout.
Pour le reste l'objectif n'est pas de gérer la mémoire sois-même, c'est même tout le contraire.
Le 04/03/2024 à 10h32
Le 04/03/2024 à 10h36
Modifié le 05/03/2024 à 13h39
Le 04/03/2024 à 11h40
Le 04/03/2024 à 11h44
==> Vers l'infini
Le 04/03/2024 à 12h38
Si les dispositifs de verrouillage ne sont pas suffisamment implémentés dans un langage, c'est peut-être au développeur de faire un peu plus propre, d'effort. Et d'en finir avec les bêtises du genre "(en Java) ho non faut pas utiliser GC!". Et ce n'est pas la seule qu'on peut entendre.
Ce qui me fait tiquer ce n'est pas la promotion déguisée de ces langages c'est pourquoi la maisons blanche s'immisce dans ces affaires. Y'a pas de fumé sans feu.
Le 04/03/2024 à 12h48
Le 04/03/2024 à 16h43
Le 05/03/2024 à 15h25
Le 06/03/2024 à 08h51
J'arrête pas de le dire autour de moi : tu veux de la sécu ? Soit à jour !
Le 04/03/2024 à 12h46
Le 04/03/2024 à 12h47
Le 04/03/2024 à 14h03
(Politique) Idéologie prônant la virilité comme valeur supérieure pour le genre masculin
??
Le 06/03/2024 à 00h38
Rien d'insultant ou de provocateur, c'est juste factuel. Mais bon, d'habitude, le fait de dire ça fait justement réagir cette même communauté de manière très virulente !
Le 06/03/2024 à 10h01
Comme disait Brassens, "le temps ne fait rien à l'affaire".
Je te laisse trouver le reste des paroles.
Modifié le 06/03/2024 à 13h13
Au bout d'un moment, stoppons tout de suite la mauvaise foi. On retrouve toujours les mêmes personnes en commentaire, et l'estimation qu'on peut se faire se confirme à chaque fois qu'une actualité nostalgique apparaît et où ça balance des âges ou des anecdotes datées (toi y compris).
Encore une fois, rien de méchant ou d'incisif, je souhaite pas vous voir partir hein, merci d'être là et de soutenir Next même. C'est juste dommage de ne pas avoir une communauté plus hétéroclite, avec des expériences et des générations autant représentées à parts égales, surtout sur un thème comme le numérique ou ce serait largement faisable.
Suffit de voir les réaction déjà à mon message pour voir que je ne suis (heureusement) pas le seul à penser ça. Next avait parlé de travailler la vidéo en 2024 pour essayer de rajeunir un peu la communauté. J'attends ça avec impatience.
PS : pour finir sur un aspect taquin, tu cites du Brassens. Si ce n'est pas suffisant comme élément pour définir le côté boomer...
Le 06/03/2024 à 15h22
Perso, je suis dans le camp de ceux qui pensent que le C (et donc le C++) posent des problèmes liés à l'utilisation de la mémoire et que le rapport de la Maison Blanche est pertinent.
Je suis sûr qu'il y a ici plusieurs personnes plus jeunes que moi qui disent le contraire.
Mais j'ai vu trop de logiciels qui ne libéraient pas leur mémoire après usage, entraînant des fuites, trop d'utilisation d'un pointeur après libération de la mémoire, trop d'écritures au delà de la mémoire allouée et j'en passe pour penser que le C est un bon langage sur ces points.
Alors, oui, c'étaient peut-être de mauvais développeurs comme diraient certains ici, ils étaient plutôt moyens mais un langage doit être robuste à la moyenne des développeurs.
Le 06/03/2024 à 16h07
Modifié le 04/03/2024 à 13h03
Quand j'ai commencé dans l'informatique ON parlait (sans exhorter) du COBOL en fin de vie, Aujourd'hui retraité (moi) mais le canard (Cobol) est toujours vivant !
Dans une trentaine d'années ON parlera toujours de l'abandon du C ! (Comme pour le Cobol, il y a trop de milliards de lignes de C en service pour prendre le risque de démarrer des campagnes de changements)
Le 04/03/2024 à 13h17
Le 04/03/2024 à 15h54
Mais bon, écrire un driver d'imprimante Windows en COBOL, faut aimer le sport.
Le 06/03/2024 à 11h21
DATA DIVISION.
77 CURRENT-LINE PIC X(132).
Le reste c'est juste un détail...
Le 04/03/2024 à 13h56
La France a même pris une mesure EXCEPTIONNELLE de passer la retraite à 64 ans pour conserver ses programmeurs
Le 04/03/2024 à 16h46
Il n'est pas nécessaire de modifier tous les logiciels, seulement ceux critiques, comme les noyaux de systèmes d'exploitation, les connecteurs réseaux, le décodage logiciel des codecs vidéo/audio, enfin tous ce qui concerne une entré/sortie réseau ou une interprétation d'un code importé (navigateur web, TCP/IP, TLS)
Il n'est pas du tout nécessaire de tous refaire. Par exemple, le noyau Linux à ajouté le support de Rust, pour le moment cela est utile pour quelques pilotes nouvellement développés.
Le 04/03/2024 à 17h54
Le dépassement de tampon (ou celui de tas) peut se produire dans tout logiciel qui traite des données qui viennent de l'extérieur et ça fait un sacré paquet de logiciels !
Mais comme dit par d'autres, le conseil de changer de langage de programmation est pour les nouveaux logiciels. Il n'est pas de tout réécrire.
Le 04/03/2024 à 21h03
Mais bon ok, sauf qu'un programme c'est souvent des librairies externes et je ne pense pas qu'elles puissent toutes être remplacées si simplement.
Puis réécrire un programme... Faut avoir la chance d'avoir ou du code hyper bien commenté ou/et de la doc fonctionnelle vraiment à jour et bien écrite.
M'enfin y'aura bien une IA pour nous convertir du code directement non ?
Le 04/03/2024 à 21h25
En C/C++, on risque des effets de bords à cause de pointeurs "unsafe". Il y a des analyseurs statiques qui permettent de suivre un peu ces erreurs, et de bonnes pratiques à acquérir.
En Javascript, on risque ... les erreurs liées à la portée, et beaucoup d'erreur de synchro/parallélisme/exécution dans un ordre pas forcément voulu + des problèmes de mémoire qui enfle, au pire l'injection directe de code.
En C#/Java, voici ce que j'ai pu subir: l'utilisation de la sérialisation/désérialisation à outrance ... y compris en stockant dans les cookies... Magnifique travail, CVE car on peut injecter ce qu'on veut comme code dans le cookie, et il est exécuté par le serveur sous son login de serveur web.
Niveau faille, je dois avouer que tout langage a les siennes. Les programmeurs sont (souvent par fainéantise/pression du temps) très prolifiques.
Mais je trouve tout de même que Rust a de très bon atouts pour forcer de bonnes pratiques. Il est un bon compromis de principe déjà éprouvés dans d'autres langage (d'où le nom il me semble d'ailleurs). Mis à part la syntaxe de %$§!, c'est un bon produit.
Le 06/03/2024 à 15h52