11 puntos por GN⁺ 2025-12-15 | 3 comentarios | Compartir por WhatsApp
  • uvm32 es un sandbox de máquina virtual minimalista para entornos con recursos limitados como microcontroladores, compuesto por un solo archivo C y que funciona sin asignación dinámica de memoria
  • Basado en un emulador RISC-V, ejecuta apps de bytecode escritas en C, Zig, Rust y ensamblador, con un diseño asíncrono para evitar que el host se bloquee
  • Puede operar con menos de 3 KB de flash y menos de 1 KB de RAM; prioriza la seguridad para que el código defectuoso no haga colapsar al host
  • Ofrece varios ejemplos de hosts de VM y apps de muestra por lenguaje, por lo que puede integrarse en entornos embebidos, juegos, plugins y más
  • Se publica bajo licencia MIT, lo que permite usarlo libremente en investigación, productos y dispositivos embebidos

Resumen de uvm32

  • uvm32 es un sandbox ligero de máquina virtual sin dependencias, diseñado para microcontroladores y dispositivos con restricciones de recursos
    • Estructura de un solo archivo C, basado en el estándar C99, diseño asíncrono y sin uso de memoria dinámica
    • En un STM32L0 (ARM Cortex-M0+) puede funcionar con menos de 3 KB de flash / 1 KB de RAM
  • Está basado en un emulador RISC-V e incluye una interfaz de administración y herramientas eficientes para compilar código

Objetivos principales de uso

  • Sustituir motores de scripting embebido como Lua, Duktape y MicroPython
  • Aislar código no confiable mediante un entorno sandbox
  • Permitir el desarrollo con lenguajes modernos de sistemas como Rust y Zig
  • Minimizar el mantenimiento multiplataforma bajo el principio “Write once, run anywhere”

Características principales

  • Incluye ejemplos de bytecode escritos en C, Zig, Rust y ensamblador
  • El diseño no bloqueante evita que código anómalo detenga al host
  • No asume I/O del host, con un modelo de ejecución simple y consistente
  • Proporciona una FFI mínima y segura
  • Puede ejecutar desde scripts pequeños hasta aplicaciones complejas
  • Diseño con prioridad en la seguridad: los errores internos de la VM no dañan al host
  • Aunque se basa en un emulador completo de CPU, no está pensado para simulación de hardware

Comparación con alternativas

  • Frente a motores de scripting embebido existentes, tiene una huella de memoria menor
  • Soporta lenguajes ampliamente usados como C, Rust y Zig
  • Facilidad de integración con software existente
  • Compatible con diversos paradigmas como basado en eventos, polling y multiprocesador
  • Ofrece robustez ante código de VM defectuoso
  • En cambio, no busca ofrecer llamadas FFI directas, máxima eficiencia, una experiencia de scripting sencilla ni biblioteca estándar integrada

Compilación y ejecución (Docker)

  • Puede compilarse solo con un compilador de C, y ofrece un entorno Docker
    • El entorno puede prepararse con los comandos make dockerbuild y make dockershell
    • Dentro del shell de Docker, tras ejecutar make,
      se puede correr ./hosts/host/host apps/helloworld/helloworld.bin
  • El comando host -h permite ver todas las opciones

Licencia

  • Aplica la MIT License
  • Puede usarse libremente en investigación, productos y dispositivos embebidos

3 comentarios

 
GN⁺ 2025-12-15
Comentarios en Hacker News
  • Al revisar el código, se veía realmente con una estructura compacta
    No lo compilé ni lo ejecuté yo mismo, pero incluye las extensiones de enteros, multiplicación y operaciones atómicas de RISC-V de 32 bits
    Las operaciones de punto flotante no las emula el emulador, sino el compilador (como gcc) mediante funciones de software
    Me parece un diseño muy ingenioso que funcione con varios compiladores
    El proyecto base que implementa el conjunto real de instrucciones es mini-rv32ima

  • Parece que este proyecto está en un terreno parecido al de los intentos de crear un entorno de ejecución común como WASM
    La diferencia es que aquí la base es RISC-V
    Me gustaría entender mejor las limitaciones y ventajas de cada enfoque, pero en cualquier caso parece que vamos hacia un futuro en el que las aplicaciones corran sobre una VM común
    Creo que la web moderna es el ejemplo más cercano a eso

    • Hace tiempo comparé rápidamente WASM con libriscv, y terminé eligiendo WASM por la compatibilidad con navegadores
      libriscv también es un proyecto genial e impresionante
      Por cierto, el enlace a la discusión relacionada está aquí
    • Si ves la publicación de Wasefire en el blog de código abierto de Google, el footprint de código parece más pequeño
      Aun así, quizá RISC-V no sea lo más adecuado para este tipo de uso
      Por ejemplo, decodificar inmediatos por software es lento, aunque en hardware es rápido
      Aun así, RISC-V es un objetivo que puede mantenerse estable y simple
  • El código está realmente limpio y me gusta la estructura de un solo archivo C
    La forma de usar Docker para ejecutar los ejemplos también es muy conveniente en entornos embebidos
    La cobertura de pruebas también parece buena, y sería interesante ver las métricas
    Al agregar capacidades de scripting a dispositivos médicos, podría tener la ventaja de no tener que revalidar el código central cada vez
    Sería interesante compararlo con intérpretes WASM para embebidos como WASM Micro Runtime
    En Cortex M4F, este último es mucho más grande, con 56.3K
    Probablemente se deba a que WASM tiene un conjunto de instrucciones más complejo que el perfil mínimo de RISC-V

  • Presentan el ejemplo de ZigDoom con la frase “Just add rats”

  • El timing es perfecto
    Estaba buscando un emulador liviano para probar firmware embebido, pero la mayoría de las alternativas eran demasiado pesadas o inestables
    Si soporta simulación de IO mapeada en memoria, podría ser útil para probar drivers de IoT o microcontroladores sin hardware real

    • Esto se puede implementar fácilmente
      El núcleo del emulador ya soporta IO mapeada en memoria, pero uvm32 solo lo usa como bloques extra de RAM en el host (como framebuffer o heap separado)
      Los traps de escritura pueden manejarse aquí, y los de lectura aquí
 
balthasar 2025-12-15

No tengo idea de en cuál comentario salió eso del phishing al final.

 
xguru 2025-12-15

Parece que ese comentario fue marcado como spam y desapareció, así que solo quedó la respuesta y por eso se ve raro. Lo borraré.