Developer Guide
For contributors working on the ZeroDDS codebase. Eight-section condensed handbook.
Codebase Tour
Single Cargo workspace, ~95 crates organised in nine layers:
| Layer | Topic | Crate count |
|---|---|---|
| 0 | Foundation (errors, time, monitor, observability, flatdata) | 8 |
| 1 | Transport (UDP, TCP, SHM, TSN) | 5 |
| 2 | Wire Protocol (RTPS, discovery, builtin-topics) | 6 |
| 3 | Core Services (DCPS, QoS, security, types, sql-filter) | 12 |
| 4 | Schema (CDR, IDL, per-language code generators) | 8 |
| 5 | Protocol Bridges (WS / MQTT / CoAP / AMQP / gRPC / CORBA + bridge-security) | 10 |
| 6 | Language Bindings (C / C++ / C# / Java / Python / TS / Flutter) | 11 |
| 7 | Bridging Services (ROS-2 RMW, DLRL, OPC-UA, XRCE, web, soap) | 11 |
| 8 | CORBA + CCM (full OMG CORBA 3.3 + DDS4CCM 1.1 stack) | 17 |
Cargo + MSRV
Workspace pins to Rust 1.88.0, Edition 2024 via rust-toolchain.toml. Layer-N crates may depend only on layers 0 .. N-1; cycles are detected by cargo run -p dds-lint -- check. No [workspace.dependencies] table — each crate manages its own dependency versions.
RC1 Definition-of-Done
Every crate must satisfy 13 checks before its tracker entry flips to ✅ rc1-ready. See RC1_GUARDRAILS.md:
- Cargo.toml metadata complete
lib.rs/main.rsheader with safety class + spec refREADME.mdCHANGELOG.md- Public-API audit
- Coherence audit (CONNECTED / TEST-ONLY / DEAD)
- Spec-coverage doc updated
- Forbidden-token sweep
- SPDX license headers per file
- Tests + lints + doc build green
- Review doc under
docs/release/rc1-reviews/ - Tracker entry
✅ rc1-ready - Public mirror under
github/+website/
Wire-Format Conventions
Two contracts:
- RTPS 2.5 —
crates/rtps/. Wire bytes verified against Cyclone DDS captures. Cross-vendor fixtures undercrates/discovery/tests/fixtures/cyclone-xcdr2/. - XCDR1 / XCDR2 —
crates/cdr/. Encoder + decoder for all primitive types, sequences, optionals, maps, unions, mutable structs (DHEADER + EMHEADER + PID), bitmasks. See the CDR Wire-Format Handbook.
Test Categories
- Unit — in
#[cfg(test)] mod testsalongside source. - Integration — in
tests/per crate. - Cross-vendor — gated behind
#[ignore], run against external broker / DDS implementations in CI lab. - Fuzz —
cargo fuzzharnesses infuzz/per protocol crate. - End-to-end —
tests/interop/with docker-compose for mosquitto / RabbitMQ / libcoap / omniORB / grpcurl / ros2-cyclone.
Spec-Coverage Workflow
Each OMG spec has a coverage doc under docs/spec-coverage/<spec>.md. Per section: Status ∈ {done, partial, open, n/a (informative), n/a (rejected)}, Repo link to source, Tests link to test functions. partial + open are RC1 blockers; n/a (rejected) needs an ADR under docs/adr/.
Public-Mirror Sync
Three trees in one repository:
./— internal development tree, may containllvm@llvm, internal hostnames, sprint markers.github/— public mirror after forbidden-token sweep. This is what gets pushed togithub.com/zero-objects/zero-dds.website/— Public landing pages, manuals, claims, commercial. Deployed tozerodds.org.
The forbidden-token sweep runs in CI. Anything in github/ or website/ matching the forbidden list (internal hostnames, WP X.Y.Z sprint markers, etc.) blocks the merge.
Release Process
- Audit all 90+ crates via
cargo run -p tools/cargo-dagfor publish-order. - Green CI on
main: clippy, fmt, test, dds-lint, cargo-deny. - Tag
1.0.0-rc.1on the workspace + per-crate tags. - Push
github/tree togithub.com/zero-objects/zero-dds. - Publish to crates.io in DAG order.
- Build packaging artifacts (
.deb,.rpm, AppImage, Homebrew, MSI, Docker). - Deploy
website/tozerodds.org.