11 pontos por GN⁺ 2025-12-15 | 3 comentários | Compartilhar no WhatsApp
  • uvm32 é um sandbox de máquina virtual minimalista para ambientes com recursos limitados, como microcontroladores, composto por um único arquivo C e que funciona sem alocação dinâmica de memória
  • Baseado em um emulador RISC-V, executa apps em bytecode escritos em C, Zig, Rust e assembly e, com design assíncrono, evita travar o host
  • Pode operar com menos de 3 KB de flash e menos de 1 KB de RAM e prioriza segurança para que código incorreto não derrube o host
  • Fornece vários exemplos de hosts de VM e apps de exemplo por linguagem, permitindo integração em ambientes diversos, como embarcados, jogos e plugins
  • Publicado sob a licença MIT, pode ser usado livremente em pesquisa, produtos e dispositivos embarcados

Visão geral do uvm32

  • uvm32 é um sandbox de máquina virtual leve e sem dependências, projetado para microcontroladores e dispositivos com restrição de recursos
    • Estrutura em um único arquivo C, baseada no padrão C99, com design assíncrono e sem uso de memória dinâmica
    • Em um STM32L0 (ARM Cortex-M0+), opera com menos de 3 KB de flash / 1 KB de RAM
  • É baseado em um emulador RISC-V e inclui interface de gerenciamento e ferramentas eficientes de build de código

Principais objetivos de uso

  • Substituir engines de script embarcadas como Lua, Duktape e MicroPython
  • Isolar código não confiável por meio de um ambiente sandbox
  • Permitir desenvolvimento com linguagens de sistema modernas, como Rust e Zig
  • Minimizar a manutenção multiplataforma com o princípio “Write once, run anywhere”

Principais características

  • Inclui exemplos de bytecode escritos em C, Zig, Rust e assembly
  • O design non-blocking impede que código anômalo pare o host
  • Não presume I/O do host, com um modelo de execução simples e consistente
  • Oferece uma FFI mínima e segura
  • Pode executar desde scripts pequenos até aplicações complexas
  • Design com foco em segurança, em que erros internos da VM não comprometem o host
  • Embora seja baseado em um emulador completo de CPU, não tem como objetivo simulação de hardware

Comparação com alternativas

  • Pegada de memória menor que a de engines de script embarcadas tradicionais
  • Suporte a linguagens amplamente usadas, como C, Rust e Zig
  • Facilidade de integração com software existente
  • Suporte a vários paradigmas, como baseado em eventos, polling e multiprocessador
  • Robustez diante de código de VM defeituoso
  • Por outro lado, chamadas FFI diretas, eficiência máxima, experiência de scripting simples e biblioteca padrão embutida não são objetivos do projeto

Build e execução (Docker)

  • Pode ser compilado apenas com um compilador C e oferece ambiente Docker
    • É possível preparar o ambiente com os comandos make dockerbuild e make dockershell
    • Depois de executar make dentro do shell do Docker,
      é possível rodar ./hosts/host/host apps/helloworld/helloworld.bin
  • O comando host -h mostra todas as opções disponíveis

Licença

  • Aplica-se a MIT License
  • Pode ser usado livremente em pesquisa, produtos e dispositivos embarcados

3 comentários

 
GN⁺ 2025-12-15
Comentários do Hacker News
  • Ao olhar o código, achei a estrutura realmente compacta
    Não compilei nem executei por conta própria, mas ele inclui as extensões RISC-V de inteiros de 32 bits, multiplicação e instruções atômicas
    As operações de ponto flutuante não são emuladas pelo emulador; o compilador (gcc etc.) as emula por meio de funções de software
    Acho isso um design muito inteligente, especialmente por ser compatível com vários compiladores
    O projeto-base que implementa o conjunto real de instruções é o mini-rv32ima

  • Este projeto parece estar em uma área parecida com as tentativas de criar um ambiente de execução comum como o WASM
    A diferença é que aqui a base é o RISC-V
    Queria entender melhor as limitações e vantagens de cada abordagem, mas, de todo modo, parece que estamos caminhando para um futuro em que os aplicativos rodam sobre uma VM comum
    Acho que a web moderna é o exemplo mais próximo disso

    • No passado, comparei rapidamente WASM e libriscv e acabei escolhendo WASM por causa da compatibilidade com navegadores
      O libriscv também é um projeto muito legal e impressionante
      Para referência, a discussão relacionada está aqui
    • Pelo post sobre Wasefire no blog open source do Google, a pegada de código parece menor
      Ainda assim, RISC-V talvez não seja o mais adequado para esse tipo de uso
      Por exemplo, decodificar valores imediatos em software é lento, embora em hardware seja rápido
      Mesmo assim, RISC-V é um alvo estável e simples de compor
  • O código é realmente limpo e gostei da estrutura em um único arquivo C
    A forma de usar Docker para executar os exemplos também é muito prática em ambientes embarcados
    A cobertura de testes também parece boa, e seria interessante ver as métricas
    Ao adicionar recursos de script a dispositivos médicos, isso pode trazer a vantagem de não precisar revalidar o código principal toda vez
    Seria interessante comparar com interpretadores WASM para embarcados, como o WASM Micro Runtime
    No Cortex M4F, ele é bem maior, com 56.3K
    Provavelmente porque o WASM tem um conjunto de instruções mais complexo do que o perfil mínimo do RISC-V

  • Apresentaram o exemplo ZigDoom com a frase “Just add rats”

  • Timing perfeito
    Eu estava procurando um emulador leve para testar firmware embarcado, mas a maioria das alternativas era pesada demais ou instável
    Se houver suporte para simulação de IO mapeado em memória, isso pode ser útil para testar drivers de IoT ou microcontroladores sem hardware real

    • Isso dá para implementar com facilidade
      O núcleo do emulador já suporta IO mapeado em memória, mas o uvm32 usa isso apenas como blocos extras de RAM do host (framebuffer ou heap separado, por exemplo)
      O trap de escrita pode ser tratado nesta parte, e o trap de leitura nesta parte
 
balthasar 2025-12-15

No fim das contas, não sei de qual comentário saiu aquele papo de phishing.

 
xguru 2025-12-15

Aquele comentário foi marcado como spam e acabou sumindo, então parece que só ficou a resposta e ficou estranho. Vou apagar isso.