Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Per-RMW Feature Matrix

One table per question the capability pages used to answer in contradictory prose. Derived from the backend sources — the C vtables (vtable.c (XRCE-DDS), vtable.cpp (Cyclone DDS), vtable.cpp (uORB)) and the zenoh shim’s trait overrides — so a backend gaining or losing a slot moves this page in the same commit or fails the gate.

wired = the backend implements it. — = not wired: the runtime surfaces UNSUPPORTED or falls back where a fallback exists (the vtable comments name which). A slot filled with a function that only returns UNSUPPORTED (uORB’s service stubs) is —, not wired. Status events count as wired whether the backend calls back (*_event_init) or the runtime polls it (*_take_event). The rows below the parity marker are slots declared in the ABI whose backend wiring is still landing; all-dash rows there mean declared, not yet wired anywhere, and they flip automatically as backends land implementations.

Session / entity capabilities

CapabilityZenohXRCE-DDSCyclone DDSuORB
Publish / subscribewiredwiredwiredwired
Services (server side)wiredwiredwired—
Service clientswiredwiredwired—
Server-availability probewired—wired—
Status events (deadline / liveliness / lost)wiredwiredwired—
Matched / incompatible-type events (Iron+)wired—wired—
Manual liveliness assert——wired—
Event-driven wake (set_wake_callback)wiredwiredwiredwired
Deadline hint (next_deadline_ms)wiredwired——
Zero-copy loan APIwired———
Batch receive (take_sequence)wired—wired—
Streamed publishwiredwired——
Connectivity pingwiredwired——
Identity / feature probe————
Publisher GIDwiredwiredwired—
Matched-endpoint counts——wired—
Actual-QoS read-backwiredwiredwiredwired
Wait-for-acked————
Take-with-infowiredwiredwired—
Entity new-data callbackswiredwiredwired—
Graph introspection (names/types/counts)wired—wired—
Service-graph counts (count_clients / count_services)wired—wired—
Client GIDwiredwiredwired—
Event-kind probe (event_type_is_supported)wiredwiredwired—

Node-layer features

These live in nros-node on top of pub/sub + services — they are not backend slots, so a backend has them exactly when it has those. tested = at least one Runtime cell for that backend and workload in matrix::CELLS or interop::CELLS (packages/testing/nros-tests/src/); untested = available, but no runtime cell runs it; — = the backend lacks pub/sub or services, so the feature cannot exist there.

FeatureZenohXRCE-DDSCyclone DDSuORBRule
Actionstestedtestedtested—Built in nros-node on pub/sub + services (goal / cancel / result services + feedback / status topics).
Parameters (+ param services)testedtestedtested—Node-layer services; available wherever services are.
Lifecycle (REP-2002)testeduntesteduntested—Node-layer state machine + services (lifecycle-services feature).

QoS policies

A backend advertises the policies it can enforce via supported_qos_policies(); requesting an unadvertised policy fails entity creation loudly (INCOMPATIBLE_QOS) — no silent downgrade. Each column is that backend’s OWN answer: the zenoh shim’s Session::supported_qos_policies, and for a C backend the function its vtable puts in the supported_qos_policies slot. Per-policy semantics: RMW vs upstream §7.

PolicyZenohXRCE-DDSCyclone DDSuORB
RELIABILITY✓✓✓✓
DURABILITY_VOLATILE✓✓✓✓
DURABILITY_TRANSIENT_LOCAL✓✓✓—
HISTORY✓✓✓✓
DEPTH✓✓✓✓
DEADLINE✓✓✓—
LIFESPAN✓—✓—
LIVELINESS_AUTOMATIC✓—✓—
LIVELINESS_MANUAL_BY_TOPIC✓—✓—
LIVELINESS_MANUAL_BY_NODE————
LIVELINESS_LEASE✓—✓—
AVOID_ROS_NAMESPACE_CONVENTIONS—✓——