La version 5.0 du projet Wasmer a Ă©tĂ© lancĂ©e, dĂ©veloppant un runtime pour l'exĂ©cution de modules WebAssembly, pouvant ĂȘtre utilisĂ© pour crĂ©er des applications universelles capables de fonctionner sur diffĂ©rents systĂšmes d'exploitation. Wasmer peut Ă©galement ĂȘtre utilisĂ© pour l'exĂ©cution isolĂ©e de blocs de code non fiables dans le cadre d'applications classiques. Le code du projet est Ă©crit en Rust et est distribuĂ© sous licence MIT.
La possibilitĂ© de lancer une application sur diffĂ©rentes plateformes est rĂ©alisĂ©e Ă travers la compilation en code intermĂ©diaire bas niveau WebAssembly, qui peut ĂȘtre exĂ©cutĂ© sur n'importe quel systĂšme d'exploitation ou intĂ©grĂ© dans des programmes d'autres langages de programmation. Les programmes sont des conteneurs lĂ©gers dans lesquels est exĂ©cutĂ© le pseudo-code WebAssembly. Ces conteneurs ne dĂ©pendent pas du systĂšme d'exploitation et peuvent inclure du code initialement Ă©crit dans n'importe quel langage de programmation.
Pour exécuter le code intermédiaire WebAssembly ou le traduire en code machine de la plateforme cible, différents backends sont proposés :
- Backend basé sur le compilateur Singlepass, optimal pour une utilisation dans les blockchains.
- Backend basé sur le générateur de code Cranelift, optimal pour une utilisation lors du développement.
- Backend basé sur le compilateur LLVM, optimal pour une utilisation dans les déploiements en production.
- Backend pour l'exécution dans un navigateur web.
- Backend basé sur le moteur JavaScript JavascriptCore, optimal pour une utilisation sur la plateforme macOS.
- Backend basé sur le moteur JavaScript V8, optimal pour les applications sur les plateformes iOS et Android.
- Backend basé sur l'interpréteur Wasmi, optimal pour les blockchains et les projets Rust n'utilisant pas la bibliothÚque standard (nostd).
- Backend basé sur le runtime WAMR, optimal pour la plateforme iOS.
Les applications sont isolées du systÚme principal dans un environnement sandbox et n'ont accÚs qu'aux fonctionnalités déclarées. Pour l'isolement, un mécanisme basé sur la gestion des capacités est appliqué : pour chaque opération sur les ressources (fichiers, répertoires, sockets, appels systÚme, etc.), l'application doit recevoir les autorisations appropriées. La gestion des accÚs et l'interaction avec le systÚme sont assurées par l'API WASI (WebAssembly System Interface), fournissant des interfaces de programmation pour travailler avec des fichiers, des sockets et d'autres fonctions systÚme.
La plateforme permet d'atteindre des performances d'exécution des applications proches de celles des builds natifs. Grùce au Native Object Engine pour le module WebAssembly, il est possible de générer du code machine nécessitant un runtime minimal tout en conservant toutes les fonctionnalités d'isolation du sandbox. Une livraison de programmes précompilés avec Wasmer intégré est possible. Pour la création d'extensions et de compléments, des API Rust et Wasm-C-API sont proposées.
Pour exécuter un conteneur WebAssembly, il suffit d'installer le runtime Wasmer sur le systÚme, fourni sans dépendances externes (« curl https://get.wasmer.io -sSfL | sh »), puis de lancer le fichier nécessaire (« wasmer test.wasm »). Les programmes sont distribués sous forme de modules WebAssembly ordinaires, que l'on peut gérer avec le gestionnaire de paquets WAPM. Wasmer est également disponible sous forme de bibliothÚque, que l'on peut utiliser pour intégrer du code WebAssembly dans des programmes écrits en Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir et Java.
Les principales nouveautés de Wasmer 5.0 :
- Il est désormais possible d'utiliser des interpréteurs WebAssembly.
- Ajout d'un backend expérimental basé sur l'interpréteur léger Wasmi, permettant d'exécuter du code intermédiaire WebAssembly dans des environnements à ressources limitées.
- Ajout d'un backend expérimental basé sur le runtime WebAssembly WAMR (WebAssembly Micro Runtime), optimisé pour une consommation minimale de ressources et adapté à une utilisation sur des appareils avec peu de mémoire vive.
- Ajout d'un backend expérimental reposant sur le moteur JavaScript V8, utilisé dans les navigateurs sur la base de code Chromium. Le principal avantage de ce backend est la possibilité d'utiliser le débogueur intégré et les outils de développement web, ainsi que l'accÚs à des fonctionnalités WebAssembly avancées dans V8, telles que le traitement des exceptions et la collecte des déchets.
- Ajout d'un support expérimental pour l'architecture Loongarch64 dans le backend utilisant LLVM.
- Ajout du support pour la plateforme iOS, disponible avec les backends WAMR, Wasmi et V8.
- Le support du compilateur Emscripten a Ă©tĂ© arrĂȘtĂ©.
- Mise à jour des dépendances, y compris LLVM 18, le générateur de code Cranelift 27 et le framework rkyv 0.8.
- Optimisation des performances. Par exemple, dans les opérations de désérialisation des modules, une augmentation de performance allant jusqu'à 50 % a été observée.







Source : opennet.ru







