À propos du projet

Wago est un runtime WebAssembly écrit entièrement en Go. Plutôt que d'interpréter le Wasm, il compile les modules directement en code machine natif, ce qui permet de l'intégrer dans des programmes Go sans CGO, simplifiant ainsi les builds Go ordinaires et la compilation croisée. Le projet se présente comme rapide, compact et extensible, et précise qu'il est encore en version bêta, ce qui signifie que les API et les artefacts .wago générés peuvent changer. Caractéristiques mises en avant par le projet : - Pure Go : l'intégration ne nécessite pas de chaîne d'outils C. - Axé sur les standards : le runtime passerait la suite de tests officielle WebAssembly, ainsi que le fuzzing et des corpus du monde réel. - Extensible : WASI, le Component Model et d'autres capacités hôtes résident en dehors du runtime central sous forme de plugins. - Exécutables autonomes : un fichier .wasm peut être compilé en un petit binaire natif, ce qui, selon le README, est utile pour les outils CLI. - Plateformes : Linux, macOS et Windows sur amd64 et arm64, la couverture des fonctionnalités WebAssembly variant selon le backend. Un fichier de matrice de fonctionnalités documente la couverture exacte. Installation Sur macOS et Linux, la commande documentée télécharge un script d'installation et l'envoie vers sh ; sur Windows, les utilisateurs de PowerShell exécutent une commande irm équivalente. Ceux-ci installent un gestionnaire, qui installe ensuite un runtime. Le site de documentation couvre d'autres méthodes d'installation, des canaux de version et des builds à partir des sources. Exécution de modules Après l'installation, un module peut être exécuté directement : l'exécution d'un petit fichier Wasm Fibonacci avec un argument affiche le résultat attendu. Pour créer un binaire autonome, la sous-commande compile prend une entrée .wasm et un chemin de sortie, et l'exécutable résultant accepte les mêmes arguments. Utilisation de Wago depuis Go Les développeurs Go ajoutent le module avec go get github.com/wago-org/wago. Le dépôt fournit des exemples numérotés, dont un exemple de runtime typé qui compile un module, crée une instance et appelle une fonction exportée. Un guide de documentation distinct traite de l'intégration de Wago dans Go. Capacités hôtes et plugins Les intégrations hôtes sont délibérément maintenues en dehors du runtime central. Un projet peut être initialisé avec la commande init, et des plugins tels qu'une implémentation WASI sont ajoutés par nom, par exemple wago-org/wasi. Un site de registre de plugins est fourni pour parcourir les options disponibles. Performance Le README indique que Wago utilise quelques kilo-octets de RAM et affirme que les temps de compilation sont environ trois fois plus rapides et l'exécution environ 40 % plus rapide que wazero. Le projet renvoie vers une page de benchmarks et un répertoire de benchmarks dans le dépôt. Ces chiffres sont les mesures des mainteneurs et doivent être vérifiés avec vos propres charges de travail avant d'être pris en compte. Statut du projet et licence Wago est publié sous la licence Apache License 2.0 et développé gratuitement, le parrainage étant encouragé. Le dépôt comprend de la documentation, des exemples, une matrice de fonctionnalités, un document d'architecture, une feuille de route, des directives de contribution et un suivi des problèmes. Dans l'ensemble, Wago s'adresse aux développeurs Go qui souhaitent exécuter ou intégrer WebAssembly sans dépendance C, et qui préfèrent un cœur de runtime léger dont les fonctionnalités hôtes sont ajoutées via des plugins. Son statut bêta et le fait que les chiffres de benchmark proviennent du projet lui-même sont les principaux points à considérer avant son adoption.