Skip to content
UlteSoftPublic

About

WebAssembly-based ROS Powered by UWVM2

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

uwvm2-ros robot logo

UlteSoft WebAssembly Virtual Machine 2 for ROS

DEV V2.0.3.0

Introduction

UlteSoft WebAssembly Virtual Machine 2 for ROS

Features

WASM Feature Extensions

Most wasm standards are supported. See feature.md. For detailed changes in each WebAssembly release, see wasm-release.md.

Supports multiple platforms

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.

Runtime execution backends

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, secure, and highly scalable standard parser

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.

WASI host extensions

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.

Plugin-facing host APIs

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.

ROS 1 and ROS 2 runtime 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.

Flexible linear memory models

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.

Commandline interface

  • 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 ...

How to build

  • 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

Releases

Support / Donations

If you find this project useful, you can support its development with a crypto donation. See donations.md

About

WebAssembly-based ROS Powered by UWVM2

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages