Skip to content

Platform port / Private repository / Evidence-driven

OpenBSW Rust PortFull-native Rust. Row-by-row parity.

Eclipse OpenBSW's automotive base software—lifecycle to DoIP—ported from C++ to full-native Rust and tracked row by row against a pinned upstream baseline. A row only closes as done or as a documented native replacement, never as partial.

DoIP testerethernet · doipZone FLcan · docan · ioZone FRcan · docan · ioZone RLcan · docan · ioZone RRcan · docan · ioCentral computelifecycle · uds · runtime
Zone links — bsw-can · bsw-docan · bsw-ioBackbone — bsw-ethernet · bsw-doipCentral compute — bsw-lifecycle · bsw-uds · bsw-runtime · bsw-storage · bsw-console

The verified numbers

From the repository's generated evidence files, July 2026.

37/37
mandatory parity rows closed against the pinned upstream
26
Rust crates in the workspace
≈65,000
lines of production Rust
≈10,400
lines of integration tests
1,653
test functions — 1,263 unit, 390 integration
395/395
unsafe sites inventoried and review-approved

Evidence discipline

Parity manifest
Machine-readable; the status ledger is generated, never hand-edited.
Unsafe inventory
395/395 sites recorded with invariants and a logged review approval.
SBOM
CycloneDX across the full dependency tree.
Reproducible builds
Pinned toolchain, documented release procedure.
Differential oracle
Stable output form diffed against the pinned C++ build.

Evidence-driven, safety-oriented portfolio work: these artifacts document mechanisms and audits. This is not a certification claim.

The port, running

Workflow suite — boot to run level 9, UDS over DoCAN and DoIP, clean shutdown:

$ cargo run -p openbsw-reference-app -- --workflows
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.06s
     Running `target\debug\openbsw-reference-app.exe --workflows`
startup: PASS
console-help: PASS
lifecycle-level: PASS
logging-level: PASS
simulated-io: PASS
udp-echo: PASS
tcp-echo: PASS
uds-docan-multiframe: PASS
uds-doip-shared-state: PASS
shutdown: PASS
Interactive console session — lifecycle, I/O, UDS TesterPresent (3E 00 → 7E 00)
$ printf 'help\ncan info\nlc level 5\nio adc 2048\ndiag 3e00\nstats all\nquit\n' | cargo run -p openbsw-reference-app
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.05s
     Running `target\debug\openbsw-reference-app.exe`
0: RefApp: RUNTIME: INFO: hello
0: RefApp: RUNTIME: INFO: run level 9 reached
can info|send <id> <hex>; lc level <0-9>|reboot|poweroff; stats all; logger level <debug|info|warn|error>; diag <hex>; io adc <0-4095>|gpio <0|1>; storage get|set <u32>; trace status
request=02a response=0f0
level 5
adc=2048 speed=2048 pwm=500
7e00
commands=6 diagnostics=1
Deterministic parity oracle — diffed against the pinned upstream C++ build
$ cargo run -p openbsw-reference-app -- --oracle
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.05s
     Running `target\debug\openbsw-reference-app.exe --oracle`
{
  "protocol_version": 1,
  "scenario": "reference-app-host",
  "upstream_commit": "ddbcf88a62dfcddb1eb07f868ba6412bec1ebf77",
  "records": [
    {"sequence":0,"kind":"lifecycle","source":"rust","input":"startup","output":"level-9","state":"running"},
    {"sequence":1,"kind":"console","source":"rust","input":"help","output":"command-tree","state":"running"},
    {"sequence":2,"kind":"can","source":"rust","input":"124:0102","output":"125:0102","state":"running"},
    {"sequence":3,"kind":"diagnostic","source":"rust","input":"docan:22cf01","output":"62cf01:24-bytes","state":"default"},
    {"sequence":4,"kind":"diagnostic","source":"rust","input":"doip:3e00","output":"7e00","state":"default"},
    {"sequence":5,"kind":"storage","source":"rust","input":"restart","output":"value-restored","state":"running"},
    {"sequence":6,"kind":"lifecycle","source":"rust","input":"shutdown","output":"level-0","state":"stopped"}
  ]
}

In progress: TMS570LC4357 lockstep Cortex-R5F

The same crates are coming up on a TMS570LC4357 LaunchPad: startup, SRAM/ECC initialization, and vector tables are complete as reviewed build artifacts; PLL/clock and RTI timer passed bounded RAM-only runs on the physical board. The full on-target proof—interrupts through CAN, Ethernet, and DoIP—remains open, tracked as an explicitly partial row outside the 37 mandatory ones.

The port repository is private, so this page carries no source links. All numbers come from its generated evidence files as of July 2026; the upstream contributions above are public. A guided walkthrough is available on request.

Request a walkthrough
← Back to all projects