UlteSoft WebAssembly Virtual Machine 2 for ROS
Most wasm standards are supported. See feature.md. For detailed changes in each WebAssembly release, see wasm-release.md.
Supports over 100 triplet platforms, including DOS series, POSIX series, Windows 9x series, Windows NT series, and the Host C Library Series. Runtime execution is deliberately limited to the full-translation UWVM interpreter and the full-module LLVM AOT mode; lazy and tiered execution are not part of this fork. See support.md for details.
UWVM2 retains two explicit runtime backends: the full-translation interpreter and full-module LLVM AOT. See runtime compiler documentation. For the u2 interpreter (“register-ring stack-top cache”) architecture, see u2 interpreter documentation.
The ROS LLVM backend builds its own pinned LLVM 23.1.1 stable release with
the downstream MIPS R6 repair. It does not use system LLVM, LLVM_CONFIG, or
an llvm-config executable; dependency information comes directly from CMake.
The first LLVM-enabled xmake configuration needs CMake and Ninja; see
bundled LLVM provenance and build instructions.
The maintenance rationale explains
the version, FP, ABI, module and cache constraints; the
verification record distinguishes
completed test snapshots from remaining platform/build coverage.
High-performance, spec-compliant WebAssembly binary parser built on concept-oriented C++26 with SIMD-aware design and extensive fuzzing for safety and robustness. See readme.md for details.
WebAssembly System Interface Preview 1 (WASI P1) host bindings for wasm32-wasip1 and wasm64-wasip1 targets, built on the same cross-platform runtime as UWVM2 and exposing file-system and related services to WebAssembly modules. UWVM2 can route WASI P1 through global defaults, anonymous single-module targets, or named shared groups that apply to the main module, preloaded Wasm modules, native preload dynamic libraries, and weak-symbol modules. See imported/readme.md and WASI Commands for details.
Preload modules (dynamic libraries / weak-symbol plugins) can consume a stable host-side API for linear-memory access, and can optionally consume the UWVM2 WASI Preview 1 host API as well. The WASI table is disabled by default and must be explicitly enabled from the command line. When enabled for a single target or named group, plugin-facing WASI calls are resolved against that target's WASI environment rather than one process-wide table. Native dynamic libraries still execute as host code and must be treated as trusted host extensions.
Optional Linux interpreter extensions expose independently configured ROS 1 and ROS 2 capabilities through separate native Gateways. Each Wasm instance receives its own capability table; explicit Global, Single and Group configuration controls Topic, Service, Parameter, Graph, Action, TF, Time, Logging and ROS 2 Lifecycle access. The core build requires no ROS libraries. See the ROS 1 CLI, ROS 2 CLI and numbered ROS test suites.
The uwvm2-ros SDK is maintained in a separate MIT-licensed repository. It provides language bindings, platform SDKs, Xmake examples, bilingual manuals and precompiled development inputs distributed with Git LFS. This repository provides the underlying virtual machine. See the SDK review documents for qualified language and platform scopes. SDK construction grants no ROS authority.
See the platform SDK build and test guide for explicit vendor selections, source-only imports and numbered test entry points.
uwvm2 provides three host-side models for implementing WebAssembly linear memory (mmap-based, multi-threaded allocator-based, and single-thread allocator-based backends), allowing efficient execution on platforms with or without virtual memory support. See readme.md for a detailed description.
The executable and Xmake target are named uwvm2-ros to allow installation alongside upstream uwvm2. Build with xmake build uwvm2-ros and run with xmake run uwvm2-ros --version.
- Get version information
$ uwvm2-ros --version- Get a list of commands
$ uwvm2-ros --help- Running uwvm2 virtual machine
$ uwvm2-ros <param0> <param1> ... --run <wasm:path> <argv1:str> <argv2:str> ...
$ uwvm2-ros <param0> <param1> ... <wasm:path> <argv1:str> <argv2:str> ...When --run, -r, or -- is omitted, trailing plain arguments are treated as the Wasm path and guest argv.
- WASI mount dir (wasip1)
$ uwvm2-ros --wasip1-mount-dir <wasi dir> <system dir> ... --run ...- Windows (aka. unknown-windows-msvc). See windows.md
- MinGW (aka. unknown-windows-gnu, unknown-w64-mingw32). See mingw.md
- Linux (aka. unknown-linux-unknown). See linux.md
- Darwin (aka. unknown-apple-darwin). See darwin.md
- FreeBSD (aka. unknown-freebsd(Version)). See freebsd.md
- WASM-WASI (self-hosting) (aka. [wasm32|wasm64]-[wasip1|wasip2]-(threads)). See wasm-wasi.md
- Other platforms: See how-to-build
- Dev: branch
master - Release V2.0.2.1: branch
V2.0.2 - Beta V2.0.1.1: branch
V2.0.1
If you find this project useful, you can support its development with a crypto donation. See donations.md