# uvm32 - C로 작성된 초소형 VM 샌드박스, Rust·C·Zig 앱 실행 지원

> Clean Markdown view of GeekNews topic #25072. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25072](https://news.hada.io/topic?id=25072)
- GeekNews Markdown: [https://news.hada.io/topic/25072.md](https://news.hada.io/topic/25072.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-12-15T07:36:21+09:00
- Updated: 2025-12-15T07:36:21+09:00
- Original source: [github.com/ringtailsoftware](https://github.com/ringtailsoftware/uvm32)
- Points: 11
- Comments: 3

## Summary

**uvm32**는 단일 C 파일로 구성된 초소형 **가상 머신 샌드박스**로, 동적 메모리 없이 3KB 이하 플래시와 1KB 이하 RAM에서도 동작합니다. RISC-V 에뮬레이터 기반으로 C·Rust·Zig 등 다양한 언어의 바이트코드를 실행하며, 비동기 설계를 통해 비정상 코드가 호스트를 멈추지 않도록 설계되었습니다. **MIT 라이선스**로 공개되어, 임베디드 장치나 플러그인 시스템에서 신뢰성 높은 코드 격리 환경을 구현하는 데 활용할 수 있습니다.

## Topic Body

- **uvm32**는 마이크로컨트롤러 등 **제한된 자원 환경**용의 미니멀한 **가상 머신 샌드박스**로, 단일 C 파일로 구성되고 동적 메모리 할당 없이 동작  
- **RISC-V 에뮬레이터** 기반으로, C·Zig·Rust·어셈블리로 작성된 바이트코드 앱을 실행하며, 비동기 설계로 **호스트 정지 방지**  
- **3KB 이하 플래시, 1KB 이하 RAM**으로 동작 가능하며, 안전성을 우선시해 잘못된 코드가 호스트를 **크래시시키지 않음**  
- 다양한 **VM 호스트 예제**와 언어별 샘플 앱을 제공해, 임베디드·게임·플러그인 등 다양한 환경에 통합 가능  
- **MIT 라이선스**로 공개되어 연구, 제품, 임베디드 장치에서 자유롭게 활용 가능  
  
---  
  
### uvm32 개요  
- **uvm32**는 의존성 없는 **경량 가상 머신 샌드박스**로, 마이크로컨트롤러 및 자원 제약 장치용으로 설계  
  - 단일 C 파일 구조, **C99 표준** 기반, **비동기 설계**, **동적 메모리 미사용**  
  - STM32L0(ARM Cortex-M0+) 기준 **3KB 플래시 / 1KB RAM** 이하로 동작  
- **RISC-V 에뮬레이터**를 기반으로 하며, 관리 인터페이스와 효율적 코드 빌드 도구를 포함  
  
### 주요 활용 목적  
- **Lua, Duktape, MicroPython** 등의 임베디드 스크립트 엔진 대체  
- **샌드박스 환경**을 통한 신뢰할 수 없는 코드 격리  
- Rust, Zig 등 **현대 시스템 언어**로 개발 가능하게 지원  
- **“Write once, run anywhere”** 원칙으로 다중 플랫폼 유지보수 최소화  
  
### 주요 특징  
- **C, Zig, Rust, 어셈블리**로 작성된 바이트코드 예제 포함  
- **논블로킹 설계**로 비정상 코드가 호스트를 멈추지 않음  
- **호스트 I/O 가정 없음**, 단순하고 일관된 실행 모델  
- **안전한 최소형 FFI** 제공  
- **소형 스크립트**부터 **복잡한 애플리케이션**까지 실행 가능  
- **안전성 우선 설계**, VM 내부 오류가 호스트를 손상시키지 않음  
- 완전한 CPU 에뮬레이터 기반이지만, **하드웨어 시뮬레이션 목적 아님**  
  
### 대안들과의 비교  
- 기존 임베디드 스크립트 엔진 대비 **작은 메모리 풋프린트**  
- **C, Rust, Zig** 등 널리 사용되는 언어 지원  
- **기존 소프트웨어와의 통합 용이성**  
- **이벤트 기반·폴링·멀티프로세서** 등 다양한 패러다임 지원  
- **비정상 VM 코드에 대한 강인성** 확보  
- 반면, **직접 FFI 호출**, **최대 효율성**, **간단한 스크립팅 경험**, **표준 라이브러리 내장**은 목표하지 않음  
  
### 빌드 및 실행 (Docker)  
- **C 컴파일러만으로 빌드 가능**, Docker 환경 제공  
  - `make dockerbuild`, `make dockershell` 명령으로 환경 구성  
  - Docker 셸 내부에서 `make` 실행 후,  
    `./hosts/host/host apps/helloworld/helloworld.bin` 실행 가능  
- `host -h` 명령으로 전체 옵션 확인 가능  
  
### 라이선스  
- **MIT License** 적용  
- 연구, 제품, 임베디드 장치 등에서 자유롭게 사용 가능

## Comments



### Comment 47725

- Author: neo
- Created: 2025-12-15T07:36:21+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46249538)   
- 코드를 살펴보니 정말 **컴팩트한 구조**였음  
  직접 컴파일하거나 실행해보진 않았지만, RISC-V 32비트 정수·곱셈·원자 명령 확장을 포함하고 있음  
  부동소수점 연산은 에뮬레이터가 아니라 컴파일러(gcc 등)가 소프트웨어 함수로 에뮬레이션함  
  여러 컴파일러에서 지원된다는 점이 매우 **영리한 설계**라고 생각함  
  실제 명령어 세트를 구현한 기반 프로젝트는 [mini-rv32ima](https://github.com/cnlohr/mini-rv32ima)임  
  
- 이 프로젝트가 WASM처럼 **공통 실행 환경**을 만들려는 시도와 비슷한 영역에 있는 것 같음  
  다만 기반이 RISC-V라는 점이 다름  
  각 접근 방식의 한계나 장점을 더 알고 싶지만, 어쨌든 애플리케이션이 공통 VM 위에서 동작하는 미래로 가고 있는 듯함  
  현대 웹이 그에 가장 가까운 예시라고 생각함  
  - 예전에 WASM과 libriscv를 간단히 비교해봤는데, **브라우저 호환성** 때문에 WASM을 선택했음  
    libriscv도 멋지고 인상적인 프로젝트임  
    참고로 관련 토론 링크는 [여기](https://news.ycombinator.com/item?id=24900376)에 있음  
  - [Google 오픈소스 블로그의 Wasefire 글](https://opensource.googleblog.com/2025/11/secure-by-design-firmware-development-with-wasefire.html)을 보면, 코드 풋프린트가 더 작아 보임  
    다만 RISC-V는 이런 용도에는 적합하지 않을 수도 있음  
    예를 들어 **즉시값 디코딩**을 소프트웨어로 처리하면 느려지지만, 하드웨어에서는 빠름  
    그래도 RISC-V는 안정적이고 단순하게 구성할 수 있는 타깃임  
  
- 코드가 정말 깔끔하고 **단일 C 파일 구조**가 마음에 듦  
  예제 실행을 위해 Docker를 쓰는 방식도 임베디드 환경에서 매우 편리함  
  테스트 커버리지도 좋아 보이고, 메트릭을 보는 것도 흥미로울 것 같음  
  의료기기에 스크립팅 기능을 추가할 때, 핵심 코드를 매번 재검증하지 않아도 되는 장점이 있을 듯함  
  [WASM Micro Runtime](https://github.com/bytecodealliance/wasm-micro-runtime) 같은 임베디드용 WASM 인터프리터와 비교해보면 흥미로움  
  Cortex M4F 기준으로 56.3K로 훨씬 큼  
  아마 WASM이 최소 RISC-V 프로파일보다 **복잡한 명령어 집합**이기 때문일 것임  
  - wasm-mvp는 부동소수점 명령을 제외하면 매우 단순함  
    하지만 WAMR은 [GC, JIT, WASI, 스레드, 디버거 지원](https://github.com/bytecodealliance/wasm-micro-runtime?tab=readme-ov-file#wasm-post-mvp-features) 등 다양한 확장을 포함함  
  
- “Just add rats”라며 [ZigDoom 예제](https://github.com/ringtailsoftware/uvm32/tree/main/apps/zigdoom)를 소개함  
  
- 타이밍이 절묘함  
  임베디드 **펌웨어 테스트용 경량 에뮬레이터**를 찾고 있었는데, 대부분의 대안은 너무 무겁거나 불안정했음  
  메모리 매핑된 IO 시뮬레이션을 지원하면, 실제 하드웨어 없이 IoT나 마이크로컨트롤러 드라이버 테스트에 유용할 것 같음  
  - 이건 쉽게 구현 가능함  
    에뮬레이터 코어가 이미 메모리 매핑 IO를 지원하지만, uvm32는 이를 호스트의 추가 RAM 블록(프레임버퍼나 별도 힙 등)으로만 사용함  
    쓰기 트랩은 [이 부분](https://github.com/ringtailsoftware/uvm32/blob/main/uvm32/uvm32.c#L452), 읽기 트랩은 [이 부분](https://github.com/ringtailsoftware/uvm32/blob/main/uvm32/uvm32.c#L417)에서 처리 가능함

### Comment 47760

- Author: balthasar
- Created: 2025-12-15T14:13:05+09:00
- Points: 2
- Parent comment: 47725
- Depth: 1

마지막에 피싱 어쩌구는 대체 어느 댓글에서 나온건지 모르겠네요

### Comment 47766

- Author: xguru
- Created: 2025-12-15T14:32:41+09:00
- Points: 1
- Parent comment: 47760
- Depth: 2

그 댓글은 스팸으로 flag 되어서 사라져버려서 답댓글만 남아서 이상해진것 같아요. 지워 두겠습니다.
