Skip to content

Security Model

VyomaOS achieves strong security through a simple, layered approach. Instead of filtering dangerous operations, it prevents them from existing in the first place.

Capabilities not declared in the manifest are never wired up — no filtering layer needed.

Traditional OS security works by granting broad access and then restricting it (allow-by-default). VyomaOS inverts this: apps get nothing unless explicitly declared (deny-by-default). There’s no filter to bypass because the interfaces simply don’t exist.

Every app runs inside Wasmtime’s WebAssembly sandbox:

  • Memory isolation: Each app gets its own linear memory. No raw pointers, no address space sharing.
  • Control flow integrity: Execution follows the WASM control flow graph. No ROP/JOP gadgets.
  • Type safety: All function calls are type-checked at the bytecode level.
  • Stack overflows, buffer overruns, use-after-free — eliminated structurally.

Each app declares capabilities in its vyoma.toml manifest:

[capabilities]
stdio = true # stdin/stdout/stderr
filesystem = true # mount /data (9P)
network = true # WASI sockets (TCP)
display = true # framebuffer + VYOMA_DRAW
shell = true # @supervisor: commands
mouse = true # mouse input events

The supervisor reads this manifest and wires up only the declared WASI imports when spawning the Wasmtime process. If an app doesn’t declare network = true, there is no TCP socket interface to call — not even a filtered one.

The supervisor applies a seccomp BPF denylist to all Wasmtime child processes. Even if Wasmtime were somehow compromised, dangerous syscalls are blocked at the kernel level.

This is a defense-in-depth measure — the WASM sandbox and capability model should prevent any need for it, but it provides an additional barrier.

VyomaOS has no shell, no libc, no interpreters, no POSIX environment variables, no /proc filesystem. The entire attack surface is:

  • Linux kernel (minimal allnoconfig build)
  • Wasmtime runtime
  • Rust supervisor

That’s it. No shared libraries, no dynamic linker, no script interpreters, no package managers running as root. Every traditional userland attack vector is absent.

CapabilityWhat it providesWhat’s absent without it
stdiostdin/stdout/stderrNo console I/O
filesystemMount /data (9P, persistent)No file access
networkWASI sockets (TCP)No network interface
displayFramebuffer + VYOMA_DRAWNo screen output
shell@supervisor: commandsNo process management
mouseVYOMA_INPUT:mouse: eventsNo mouse input
watchdog_secsSupervisor kills if silent N secondsNo watchdog
ApproachVyomaOSLinux (traditional)Docker/OCIAndroid
Default accessDeny-allAllow-allHost kernelManaged runtime
FilteringNot neededseccomp, AppArmor, SELinuxseccomp, namespacesSELinux, permissions
Binary formatWASM (sandboxed)ELF (native)ELF (native)DEX + native
Capability granularityPer-interfaceFile-levelContainer-levelPermission groups