Hacker News 中文摘要

RSS订阅

Show HN:用C语言编写的微型虚拟机沙盒,支持Rust、C和Zig应用 -- Show HN: Tiny VM sandbox in C with apps in Rust, C and Zig

文章摘要

uvm32是一个极简、无依赖的虚拟机沙盒,专为微控制器等资源受限设备设计。它采用单文件C99实现,无需动态内存分配,异步设计,在STM32L0上仅需4KB闪存和1KB RAM。可作为嵌入式脚本引擎替代方案,用于隔离不可信代码或支持现代编程语言开发。

文章总结

uvm32 轻量级虚拟机沙箱

项目简介

uvm32 是一款专为微控制器等资源受限设备设计的极简无依赖虚拟机沙箱。其核心特点包括: - 单文件C语言实现(纯C99标准) - 无动态内存分配 - 异步设计架构 - 在STM32L0(ARM Cortex-M0+)上仅需<4KB闪存/1KB RAM

核心功能

  • 作为嵌入式脚本引擎(Lua/Duktape/MicroPython等)的轻量替代方案
  • 提供系统隔离沙箱环境,运行不可信代码
  • 支持现代系统编程语言(如Rust)在无原生编译环境的目标设备运行
  • 实现"一次编写,到处运行"的跨平台能力

技术特性

  • 支持C/Zig/Rust/汇编等多种语言的字节码示例
  • 非阻塞设计防止宿主系统卡死
  • 不依赖宿主IO能力(无stdio要求)
  • 安全的轻量级类型化FFI接口
  • 执行安全性优先于运行速度,确保错误代码不会导致宿主崩溃

比较优势

与其他嵌入式脚本方案相比,uvm32的独特定位: ✔️ 极致轻量 ✔️ 支持主流开发语言 ✔️ 易集成 ✔️ 多范式支持 ❌ 不追求极致效率 ❌ 不提供"开箱即用"的标准库

项目结构

  • 核心虚拟机实现:uvm32 单文件
  • 最小化示例宿主:hosts/host-mini
  • 包含多种语言示例应用(C/Rust/Zig/汇编)
  • 提供Docker快速开发环境

使用示例

c // 最小化宿主示例(加载预编译字节码) uvm32_state_t vmst; uvm32_init(&vmst); uvm32_load(&vmst, rom, sizeof(rom)); while(uvm32_run(&vmst, &evt, 100)){ // 处理虚拟机事件 }

典型应用场景

  • 嵌入式设备条件判断逻辑
  • 插件系统隔离
  • 跨平台应用开发
  • 教育演示项目

许可协议

MIT开源协议,可自由用于研究、产品和嵌入式设备开发。

(注:原文中的技术细节、完整示例代码和具体API说明等专业内容已保留核心信息,同时精简了部分重复性描述和过细的代码示例)

评论总结

这篇评论讨论了两个主要观点:

  1. 幽默建议
  • 评论1简短地建议"Just add rats"("只要加上老鼠"),并附上一个GitHub链接
  • 引用:"Just add rats"
  • 引用:https://github.com/ringtailsoftware/uvm32/tree/main/apps/zigdoom
  1. 技术讨论
  • 评论2认为该项目与WASM类似,都是创建通用执行环境,但基于RISC-V架构
  • 指出构建通用VM应用是长期趋势,现代web是最接近的实现
  • 引用:"in the same realm as what some people are trying to do with WASM"
  • 引用:"a future where applications are built for a common VM seems like something we've been building to for a while"

注:两则评论均未显示评分