Compare

MOS4 vs Balena

Balena ships Docker containers to a fleet. MOS4 is a typed micro service runtime with native protobuf IPC, cgroups v2 OCI lifecycle, and vehicle and industrial domain primitives. The two can operate alongside each other.

Balena container fleet on the left, MOS4 typed micro service runtime on the right, joined by a dashed handshake — amber on the handshake

Boundary

Container fleet management vs typed micro service runtime.

Balena composes containers communicating over TCP and Unix sockets. MOS4 composes typed micro services communicating over a native protobuf bus.

flowchart LR
  subgraph Bal["Balena — container fleet"]
    B1[Container A]
    B2[Container B]
    B1 <-.TCP / sockets.-> B2
  end
  subgraph M["MOS4 — typed micro services"]
    M1[Micro service A]
    M2[Micro service B]
    M1 <-->|protobuf bus| M2
  end

Side-by-side

Capability comparison.

IPC model Balena Container-to-container communication over TCP or Unix sockets. Schema is application-defined at runtime. MOS4 Typed protobuf bus. Schema checked at build time by buf lint and cargo build. A micro service that miscalls an interface fails at compile time, not after a container restart.
OCI lifecycle Balena BalenaEngine manages container pull, start, stop, and restart. MOS4 mos-container-manager (MCM): crun production runtime, cgroups v2 CPU/memory/IO limits enforced as a contract at start time, container supervision via /metrics polling.
System-layer updates Balena Base-image update requires a customer container rebuild and redeploy. MOS4 System layers: operator bumps a single digest in system-layers.toml; MCM substitutes the annotated layer at compose time for all customer containers. No customer action required.
Vehicle / industrial primitives Balena Domain-agnostic. Customers bring their own protocol libraries inside containers. MOS4 obdstacks-v2 (16 protocols: CAN, CAN-FD, DoIP, UDS, J1939, ISOBUS, and more), mos-gnss, mos-modem, mos-ai-runtime, and 48 additional domain micro services ship with the platform — 52 in the production catalog.
Component lifecycle Balena Container restart and image swap. MOS4 on_start / on_stop / on_idle_in / on_idle_out lifecycle hooks, dependency-ordered startup, watchdog enforcement, hot-swap — live component replacement without restarting the bundle.
Fleet OTA Balena BalenaCloud: phased rollout of container images. Update unit is the container. MOS4 mos-update: Ed25519-signed delta packages, A/B partitions, automatic rollback via bootcount, retry count persisted across power cycles. Cohort and canary OTA via the Munic cloud companion. Update unit is a single component.
Container budget envelope Balena Container runtime overhead per workload, dependent on the container engine and image size. MOS4 MCM container budget envelope: under 5% CPU/RAM overhead and approximately 10 MB RSS per container, per SDK reference profile.
On-device CLI Balena balena CLI for remote fleet operations. MOS4 mcm on-device CLI (static binary): pull, GC, config inspect, OCI spec dry-run. Operates without the MOS4 daemon — useful at manufacturing test and post-mortem stages.

Source — Balena from balena.io; MOS4 from /architecture.

SDK

Five languages, CI-enforced image budgets.

MCM ships ready-to-deploy OCI containers in Python, Rust, Go, C, and C++ covering streaming service call, request-response, and event pub/sub against a GNSS MQTT bridge. Each language-scenario pair has a CI-enforced image-size budget — 15 matrix cells, tested reference starting points.

FAQ

The questions we hear most.

  • Can MOS4 run inside a Balena container?

    Running MOS4 inside a Balena-managed container is a coexistence pattern that teams have explored. It is not a Munic-supported deployment topology. The recommended path is MOS4 as the primary runtime with its own OCI workload management. Talk to engineering to discuss your specific topology.

  • Why use typed protobuf IPC instead of container-to-container TCP?

    Schema is checked at build time by buf lint and cargo build, not at runtime after a container restart. A component that miscalls an interface fails at compile time. The wire format is the same whether the components run on one device or across devices.

  • Do I lose container isolation with MOS4?

    No. mos-container-manager (MCM) enforces CPU, memory, and I/O limits per container via Linux cgroups v2 as a contract at start time. Container supervision polls each container /metrics endpoint. Linux namespaces remain available.

  • How does fleet OTA compare?

    Balena ships container images — the update unit is the full container. mos-update ships per-component delta packages: Ed25519-signed, A/B partitions, automatic rollback via bootcount. The smallest replaceable unit is a single service, not a full image. Cohort and canary OTA via the Munic cloud companion.

  • Is MOS4 the right answer if I only need container fleet management?

    If you only need to ship Docker images to a fleet, Balena is the simpler answer. MOS4 is the right answer when the programme needs typed component IPC, vehicle or industrial domain primitives, on-device AI inference, or component-granularity OTA.

  • Can I reuse existing Docker Compose files?

    Yes. MCM parses Docker Compose v3 files, so teams with existing Compose-based development workflows can bring them to embedded targets without learning new configuration syntax.

Keep your fleet manager, add a typed runtime.

A 30-minute call with engineering. We will map MOS4 onto your existing embedded Linux devices.

Building on MOS4?

One reply from engineering, ~24h. No deck, no NDA.

Talk to engineering