- uvm32 est un sandbox de machine virtuelle minimaliste pour les environnements à ressources limitées comme les microcontrôleurs, composé d’un unique fichier C et fonctionnant sans allocation mémoire dynamique
- Basé sur un émulateur RISC-V, il exécute des applications bytecode écrites en C, Zig, Rust et assembleur, avec une conception asynchrone qui empêche le blocage de l’hôte
- Il peut fonctionner avec moins de 3 KB de flash et moins de 1 KB de RAM ; la sécurité étant prioritaire, un code incorrect ne fait pas planter l’hôte
- Il fournit divers exemples d’hôtes VM et des applications d’exemple par langage, ce qui permet une intégration dans des contextes variés comme l’embarqué, le jeu ou les plugins
- Publié sous licence MIT, il peut être utilisé librement dans la recherche, les produits et les appareils embarqués
Aperçu de uvm32
- uvm32 est un sandbox de machine virtuelle léger sans dépendances, conçu pour les microcontrôleurs et les appareils aux ressources contraintes
- Structure en un seul fichier C, basé sur le standard C99, conception asynchrone, sans mémoire dynamique
- Fonctionne sous le seuil de 3 KB de flash / 1 KB de RAM sur STM32L0 (ARM Cortex-M0+)
- Il repose sur un émulateur RISC-V et inclut une interface d’administration ainsi que des outils efficaces de build du code
Principaux cas d’usage
- Remplacer des moteurs de script embarqués comme Lua, Duktape, MicroPython
- Isoler du code non fiable via un environnement sandbox
- Permettre le développement avec des langages système modernes comme Rust et Zig
- Réduire la maintenance multi-plateforme selon le principe “Write once, run anywhere”
Caractéristiques principales
- Inclut des exemples de bytecode écrits en C, Zig, Rust et assembleur
- La conception non bloquante empêche un code anormal d’arrêter l’hôte
- Aucune hypothèse sur les E/S de l’hôte, avec un modèle d’exécution simple et cohérent
- Fournit une FFI minimale et sûre
- Peut exécuter aussi bien de petits scripts que des applications complexes
- Conception orientée sécurité : les erreurs internes à la VM n’endommagent pas l’hôte
- Basé sur un émulateur CPU complet, mais pas destiné à la simulation matérielle
Comparaison avec les alternatives
- Empreinte mémoire plus réduite que les moteurs de script embarqués existants
- Prise en charge de langages largement utilisés comme C, Rust et Zig
- Intégration facile avec les logiciels existants
- Prise en charge de divers paradigmes comme event-driven, polling et multiprocesseur
- Grande robustesse face à du code VM anormal
- En revanche, les appels FFI directs, l’efficacité maximale, une expérience de scripting simple et l’intégration d’une bibliothèque standard ne sont pas des objectifs
Build et exécution (Docker)
- Peut être buildé avec un simple compilateur C, avec un environnement Docker fourni
- Configuration de l’environnement avec les commandes
make dockerbuild, make dockershell
- Après avoir exécuté
make dans le shell Docker,
il est possible de lancer ./hosts/host/host apps/helloworld/helloworld.bin
- La commande
host -h permet de voir toutes les options
Licence
- Licence MIT
- Utilisable librement pour la recherche, les produits et les appareils embarqués
Aucun commentaire pour le moment.