Uvm32
C로 작성된 초소형 VM 샌드박스, Rust·C·Zig 앱 실행 지원
About
- uvm32는 마이크로컨트롤러 등 제한된 자원 환경용의 미니멀한 가상 머신 샌드박스로, 단일 C 파일로 구성되고 동적 메모리 할당 없이 동작
- RISC-V 에뮬레이터 기반으로, C·Zig·Rust·어셈블리로 작성된 바이트코드 앱을 실행하며, 비동기 설계로 호스트 정지 방지
- 3KB 이하 플래시, 1KB 이하 RAM으로 동작 가능하며, 안전성을 우선시해 잘못된 코드가 호스트를 크래시시키지 않음
- 다양한 VM 호스트 예제와 언어별 샘플 앱을 제공해, 임베디드·게임·플러그인 등 다양한 환경에 통합 가능
- MIT 라이선스로 공개되어 연구, 제품, 임베디드 장치에서 자유롭게 활용 가능
uvm32 개요
- uvm32는 의존성 없는 경량 가상 머신 샌드박스로, 마이크로컨트롤러 및 자원 제약 장치용으로 설계
- 단일 C 파일 구조, C99 표준 기반, 비동기 설계, 동적 메모리 미사용
- STM32L0(ARM Cortex-M0+) 기준 3KB 플래시 / 1KB RAM 이하로 동작
주요 활용 목적
- 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 실행 가능
라이선스
- MIT License 적용
- 연구, 제품, 임베디드 장치 등에서 자유롭게 사용 가능