12 points par xguru 2025-05-09 | 2 commentaires | Partager sur WhatsApp
  • 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

 
secret3056 2025-05-09

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
.

 
xguru 2025-05-09

Ah, il semble que cela ait changé. Je l’ai corrigé. Merci.