- Un moteur JavaScript allégé basé sur PrimJS, compilé en WebAssembly pour offrir sécurité et excellente portabilité
- Une architecture de sandbox robuste, avec sécurité mémoire, restrictions sur les fonctionnalités JavaScript et une philosophie « fail-fast » pour garantir sécurité et extensibilité
- Capable d’exécuter en parallèle des centaines de VM sur une seule machine, avec des limites configurables sur la mémoire et la quantité de calcul (
gas) des scripts
- Peut être embarqué sur presque toutes les plateformes sous la forme d’un unique fichier
.wasm, sans build complexe ni FFI, avec une taille très réduite d’environ 800 KB
- Des performances jusqu’à 28 % supérieures à QuickJS, et une vitesse d’exécution proche du natif dans les environnements JIT
Hako : un moteur JavaScript petit, rapide et sûr
Qu’est-ce que Hako ?
- Un moteur JavaScript portable, orienté sécurité et haute performance développé à partir de PrimJS
- Le nom Hako vient du japonais et signifie « boîte »
- Un moteur basé sur WebAssembly, conçu pour pouvoir être facilement embarqué par n’importe qui dans n’importe quel environnement
Sécurité : sécurité mémoire et restriction des fonctionnalités
- Écrit en C/C++ mais compilé en WebAssembly → garantit la sécurité mémoire et l’isolation d’exécution par sandbox
- Les fonctionnalités JavaScript elles-mêmes peuvent aussi être restreintes :
- suppression de fonctions spécifiques
- interdiction de l’allocation mémoire
- limites sur le temps d’exécution, l’utilisation mémoire, le gas, etc.
- Via
VMContext, il est possible d’identifier les utilisateurs malveillants et de contrôler les ressources
- Une stratégie fail-fast permet d’interrompre tôt le code instable ou consommant trop de ressources
Facilité d’embarquement : un simple .wasm suffit
- N’utilise pas Emscripten → peut être embarqué avec n’importe quel runtime WebAssembly moderne
- Pas besoin de wrappers FFI pour différents langages → utilisable sans processus de build complexe
- Exemple : exemple d’intégration de Hako en Go
- La build de release se compose d’un unique fichier
.wasm de seulement 800 KB
Performances : plus rapide que QuickJS
- De la même façon que PrimJS est plus rapide que QuickJS, Hako offre lui aussi un gain de performance moyen de 28 % par rapport à QuickJS
- Les optimisations SIMD et l’amélioration de certains hot paths maximisent les performances
- Le passage par WebAssembly n’entraîne pas de perte de performance — sur V8, Wasmtime et JavaScriptCore, les optimisations JIT permettent d’atteindre un niveau presque natif
- Des API de mesure des performances et de profiling sont également intégrées
Limites et feuille de route
- Certaines fonctionnalités utilisées dans PrimJS (interpréteur de templates, snapshots GC) ne sont pas encore totalement prises en charge
- L’outil de snapshot de ByteDance n’étant pas encore open source, le développeur implémente actuellement son propre outil
- Le projet est encore au stade bêta initial, et les retours sont très importants pour stabiliser l’API/ABI
- GitHub - hako
2 commentaires
https://github.com/fernvenue/hako-go-example
semble être un lien inexistant. L’exemple d’intégration Go est probablement
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
.
Ah, il semble que cela ait changé. Je l’ai corrigé. Merci.