Firefox 48 embarquera le premier composant écrit en Rust
Prêt pour la cour des grands ?
Le 13 juillet 2016 à 06h30
3 min
Logiciel
Logiciel
Rust, le langage lancé par Mozilla en 2009, sera utilisé pour la première fois en production par l’éditeur avec Firefox 48. Une manière pour l’entreprise d’assurer de la visibilité pour la technologie, qui sert également de base à Servo, son projet de nouveau moteur de rendu.
Le projet Rust a été lancé initialement en 2009, mais il a fallu une longue maturation pour qu’il sorte enfin en version finale, en mai 2015. Multiparadigme, le langage s’oriente très clairement vers ceux qui manipulent habituellement le C ou le C++, dont il veut garder les performances tout en apportant aux développeurs des éléments de langage de plus haut niveau.
Depuis, plusieurs versions ont été diffusées, chacune enrichissant petit à petit le langage, qui s’est créé une véritable sphère d’utilisateurs. Pour d’autres, Rust est surtout connu pour être le langage qui sert de base à Servo, le projet de moteur de rendu sur lequel travaille Mozilla pour repartir sur des bases neuves. Une préversion est d’ailleurs disponible depuis peu, mais on ne sait pas encore s’il remplacera à terme Gecko, le moteur de Firefox.
Le parser MP4 passe au Rust
Gecko, justement, va recevoir pour la première fois du code écrit en Rust. Firefox 48, qui sortira prochainement, sera la première version du navigateur à embarquer un code écrit avec ce langage pour la production. Pour Dave Herman, directeur de la recherche chez Mozilla, c’est la preuve que l’orientation de Rust n’a pas évolué d’un iota, notamment comme alternative à C++, avec à la clé une meilleure sécurité, voire de meilleures performances (sur le parallélisme des instructions notamment).
Le premier composant développé en Rust sera un parseur pour les vidéos MPEG-4 (ISO Base Media Format). Selon Herman, il s’agit d’un début logique, les vidéos étant des contenus complexes où les problèmes de sécurité peuvent être légion. De nombreuses failles ont été exploitées de cette manière, en exploitant simplement des dépassements de mémoire tampon et autres types de faille. Rust étant notamment memory safe, le parseur MP4 était un bon candidat pour un premier composant en Rust.
Sous les projecteurs
Selon Mozilla, le nouveau composant remplace l’ancien sans rien changer aux performances. Il est surtout l’occasion de publier un code Rust dans un environnement de production et de le faire utiliser par « des centaines de millions de personnes ». La version 48 concernera en effet aussi les appareils sous Android, qui profiteront du même apport.
Comme on s’en doute, il ne s’agit que d’un début. Le directeur de la recherche confirme que d’autres composants arriveront plus tard, et il est intéressant d’imaginer un Firefox converti progressivement à Rust. Les composants critiques seront sans doute les premiers concernés, ne serait-ce que pour assurer une meilleure protection contre les failles liées à la mémoire. Certains imaginent même que la structure de Firefox pourrait passer entièrement en Rust, Servo venant s’y planter comme une fleur après une longue phase de stabilisation.
L’annonce est également (et peut-être surtout) l’occasion d’envoyer un signal au sujet de Rust : que les développeurs n’hésitent plus à l’intégrer dans des composants critiques puisque Mozilla le fait avec Firefox. Pour les utilisateurs de Firefox par contre, le changement sera invisible. La version 48 de Firefox, quant à elle, est attendue pour début août.
Firefox 48 embarquera le premier composant écrit en Rust
-
Le parser MP4 passe au Rust
-
Sous les projecteurs
Commentaires (30)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 13/07/2016 à 21h58
Le 14/07/2016 à 05h56
Le 14/07/2016 à 09h02
Merci pour l’info.
Effectivement, Wired, j’ai du le mettre en whitelist apres avoir tenté de scroller lamentablement. J’ai lu l’article et j’irais plus check juste pour ca… on ne peut plus chiant.
PS: l’article est très “large public” à mon gout, je les pensaient plus technique
Le 14/07/2016 à 10h05
Le 15/07/2016 à 04h50
Le 15/07/2016 à 08h37
Je me suis mis sérieusement à rust depuis un peu plus d’une année, et le positionnement pris par rust est bien la niche C/C++, je dirais que rust se positionne plus au niveau du C (le modèle est déliberement simple pour permettre d’être à un niveau de perf le plus bas possible et n’avoir que des abstractions coût 0 et un minimum de surprises (un modèle objet n’est pas franchement envisagé)). Il suffit de jeter un coût d’œil aux api pour s’en persouader.
La transition vers rust est bien plus aisée pour des personnes venant du C ou ayant eu à faire à des problématiques bas niveau, la conception (et des limitations associés) du language pouvant paraitre assez obscure sinon.
Utiliser rust dans des cas d’utilisation similaire à java/c# serait une abération, autant faire du Go…
Le 15/07/2016 à 11h46
Le 16/07/2016 à 05h22
Le 17/07/2016 à 17h09
Le 18/07/2016 à 21h48
Le 19/07/2016 à 21h39
Le 13/07/2016 à 06h43
Tant que ça ne rouille pas, why not " />
Le 13/07/2016 à 06h46
On connaît d’autres projets qui envisagent de l’utiliser, ou le font déjà ?
Certes l’inclure dans Firefox est une bonne chose, mais j’ai l’impression (peut-être fausse) que Mozilla est le seul à y croire.
Le 13/07/2016 à 06h54
Dropbox l’utilise massivement, Rust est la base de son système de stockage, en remplacement d’Amazon Web Services.
Go avait été écarté pour une trop grande consommation de mémoire.
Le 13/07/2016 à 07h01
Ah oui effectivement Dropbox a l’air de l’utiliser. Source :
https://mozillazine-fr.org/le-saviez-vous-dropbox-est-passe-a-rust/
http://www.wired.com/2016/03/epic-story-dropboxs-exodus-amazon-cloud-empire (attention anti adblocker relou)
Le 13/07/2016 à 07h12
Peut-on expliquer ce qu’es un parser? Quel est son rôle: il lit la vidéo, détecte le codec, le format?
Le 13/07/2016 à 07h14
Intéressant ce langage. Il existe déjà de bons tutos ou livres à ce propos ?
Le 13/07/2016 à 07h23
Sur le site officiel, il y a un tuto les mains dans le cambouis et un tuto plus scolaire.
https://doc.rust-lang.org/book/README.html
Le 13/07/2016 à 07h30
Un parser, est dans ce cas, un module qui va analyser le fichier video, et récupérer toutes les informations contenues dans ce fichier (format vidéo, type de compression , données compressées …).
Il pourra alors fournir ces informations au module qui décode le mpg4, au module qui affiche, etc …
Le 13/07/2016 à 07h56
Merci " />
Le 13/07/2016 à 08h27
Le 13/07/2016 à 08h39
Pour les franciliens (et les motivés venant de plus loin), des meetups Rust sont organisés chaque mois chez Mozilla Paris où un des développeurs du langage fait presque à chaque fois un tutoriel.
Le 13/07/2016 à 09h13
Le 13/07/2016 à 09h52
Le 13/07/2016 à 11h35
Ce n’est pas une simple traduction de la doc en anglais, mais un tuto français indépendant de bonne qualité.
Le 13/07/2016 à 13h10
En bouquin, en cherchant un peu, je n’ai trouvé que “Programming Rust” édité par O’Reilly, mais qui n’existe qu’en pré-version pour le moment (11 chapitres / 20 disponibles; dispo en ePub/MOBI/PDF; estimation publication décembre 2016)
http://shop.oreilly.com/product/0636920040385.do
http://isbn.directory/book/9781491927281
Le 13/07/2016 à 14h14
Merci pour les infos " />
Le 13/07/2016 à 15h22
http://blog.guillaume-gomez.fr/Rust/ semble une bonne base
Le 13/07/2016 à 17h05
Je trouve ce langage intéressant à plus d’un titre, mais je pense qu’il y a une grave erreur de communication dans l’affaire.
Je pense que certains arguments ne vont d’ailleurs pas manquer d’irriter les aficionados de C/C++.
le langage s’oriente très clairement vers ceux qui manipulent habituellement le C ou le C++, dont il veut garder les performances tout en apportant aux développeurs des éléments de langage de plus haut niveau.
Rust étant notamment memory safe,
Sauf que ces deux caractéristiques sont complètement contradictoires.
Ceux qui utilisent C/C++ de nos jours, c’est JUSTEMENT parce qu’ils veulent un langage SANS bound checking pour avoir de meilleures performances et un maximum de contrôle.
Il faut réaliser que le bound checking est bien l’une des caractéristique clivante qui sépare les camps des langages entre des langages comme C# ou Java d’un côté et C/C++ de l’autre.
Visiblement, Rust ne se positionne pas dans le même camp que C/C++…
De nombreuses failles ont été exploitées de cette manière, en exploitant simplement des dépassements de mémoire tampon et autres types de faille.
Sauf qu’aujourd’hui, il faut relativiser…
D’abord, avec toutes les techno de protection du code natif qui ont été implémentées ces dernières années comme le DEP ou l’ASLR ou encore les protections de pile, l’exploitation de ce genre de faille n’est pas du tout facile.
Ensuite, les problèmes de dépassement de mémoire tampon étaient principalement le fait de vieux code écrit en “vieux c” quand on manipulait des buffers et des chaines avec des pointeurs presque à chaque ligne de code. Dans ce genre de programmation, on pouvait commettre une erreur lourde de conséquence presque à chaque ligne.
Enfin, c’est devenu beaucoup plus sécurisé en C++ moderne correctement écrit car les manipulations de la mémoire passent logiquement par des classes à des endroits restreints et centralisés qu’il est beaucoup plus facile de contrôler. Il est même relativement trivial d’implémenter du bound checking quand on le désire.
Au passage, implémenter un modèle de tableau avec bound checking en C/C++ est un exercice de niveau débutant.
le parseur MP4 était un bon candidat pour un premier composant en Rust.
Les utilisateurs de C/C++ utilisent ce langage car ils sont plutôt partisan d’un code bien relu, audité et stabilisé. Pour eux, le bound checking, c’est la voie de la facilité parce qu’il aura toujours un coût en matière de performance.
D’ailleurs, comme on peut le constater tous les jours avec des langages comme PHP le bound checking n’est pas non plus une recette miracle contre les failles qui permettrait pour autant de s’abstenir de sécuriser et relire son code.
(Les fonctionnalités multithread de rust)
La encore, en proposant un modèle robuste et prêt à l’emploi, Rust s’inscrit dans une logique très différente de C/C++ et va plutôt dans le sens de C# ou Java.
La philosophie en C/C++ est complètement à l’opposée : donner le maximum de souplesse au langage pour permettre d’implémenter le modèle de son choix plutôt que de proposer un modèle précis prêt à l’emploi.
IMHO, je pense que Rust pourrait être un bon concurrent de C# ou Java plutôt que de C/C++.
Le 13/07/2016 à 17h43
Merci pour l’explication.