Repository navigation
Releases
v0.7.0
Date: 2026-11-06
Previous release: v0.6.0
Container contract 1.4: additions only, every v0.6.0 consumer keeps working.
Added
- The version document says whether the image is an independent
implementation (independentEngine); every adapter here declarestrue,
andresults.jsontakesindependentfrom it. - OT Fabric's own stack, go-canbus, behind the same contract:
ghcr.io/otfabric/canbus-interop-otfabric(adapterotfabric), so other
stacks can test against it. It is not a reference and not in this release:
the manual Own stack (go-canbus) workflow builds it from the latest
go-canbus release, tests it against the reference images of the latest
release and publishes it under go-canbus versions
(own/go-canbus/README.md). scripts/lib.sh(image_of,ADAPTER_IMAGE_<adapter>) and
scripts/interop.sh <adapter>..., the entry point of the cross-stack
self-test (make interop;make selfteststays as its alias).- The
dbcsuite checks any further codec against both oracles: each result
must equal that of cantools or canmatrix. - REQUIREMENTS.md (R1, repository isolation), checked by CI.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/canbus-interop-canutils:v0.7.0 |
sha256:3e4205d83fbef4cae75d3cfbce62acad8ba7fa630fc92d813cd601cb47de8711 |
ghcr.io/otfabric/canbus-interop-pythoncan:v0.7.0 |
sha256:856630670a2555c33f08d668c7c1d60dab1520f6fb9ec997a349aa98492892fb |
ghcr.io/otfabric/canbus-interop-socketcanrs:v0.7.0 |
sha256:b276be238c81d9ba07ebf98990ede1662dfa1934cc67d3d6e6153d1e1e8643c0 |
ghcr.io/otfabric/canbus-interop-scapy:v0.7.0 |
sha256:7a00c77fe0f9053d3c9e0599b6acdcc7173230663bd402a1cb9348747db6f011 |
ghcr.io/otfabric/canbus-interop-pythoncanisotp:v0.7.0 |
sha256:fac7bc71813f5b07353604ca70b6ef2bca87700c8f88a328d8c6750d371ac73f |
ghcr.io/otfabric/canbus-interop-cantools:v0.7.0 |
sha256:baf73da0bce6dda31ed6f262d94065e471935ebae2e96b54f6d08dde96c5478e |
ghcr.io/otfabric/canbus-interop-canmatrix:v0.7.0 |
sha256:1139bf9dba5717c27254764aa6a703a8bb9bb4a94f7ceacdc57af8834bb093ed |
manifest.json lists the images by digest for pinning. The images contain MIT, BSD, LGPL-3.0 and GPL-2.0 software and are for interoperability testing; see THIRD_PARTY_NOTICES.md.
v0.6.0
Date: 2026-10-31
Previous release: v0.5.0
Added
- Adds
results.jsonin the interop-result-v1 format. - Policy 1.2: build output in
bin/andrelease/, and shared CI at v3.3.0.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/canbus-interop-canutils:v0.6.0 |
sha256:647a2f8a0155bb322a5069c63d0158097f504675553090c0c439fd5c0fdf95f4 |
ghcr.io/otfabric/canbus-interop-pythoncan:v0.6.0 |
sha256:22f466b4ca9591cad3e483669b275bfa6cc4b340cb8288cbaa037c66be7af0df |
ghcr.io/otfabric/canbus-interop-socketcanrs:v0.6.0 |
sha256:2c525da8ec4119faa42462f8e968a73f1ff968042085d93ebe20c46684d6b204 |
ghcr.io/otfabric/canbus-interop-scapy:v0.6.0 |
sha256:53bad2e5d29c4bdd4be46cfdf48014c15e32669f344c34341221f97275a24d1e |
ghcr.io/otfabric/canbus-interop-pythoncanisotp:v0.6.0 |
sha256:5874f0531ad02cd1efc619020f22034cda842bc64eeb0ff175630b4fe70c28ba |
ghcr.io/otfabric/canbus-interop-cantools:v0.6.0 |
sha256:5489f766adcf54b2b1fb986b1e70fcaafff5ac3fcd57c67577aa0ce43a965c80 |
ghcr.io/otfabric/canbus-interop-canmatrix:v0.6.0 |
sha256:b41694fac10643f9e345b6191eb1156fe4bb325e2905702e6df6f36f52148647 |
manifest.json lists the images by digest for pinning. The images contain MIT, BSD, LGPL-3.0 and GPL-2.0 software and are for interoperability testing; see THIRD_PARTY_NOTICES.md.
v0.5.0
Date: 2026-10-28
Previous release: v0.4.0
Container contract 1.3: additions only, every v0.4.0 consumer keeps working.
- CAN XL (canutils): frame documents
marked"xl": true(priority, VCID, SEC and RRS flags, SDT, acceptance
field, 1..2048 data bytes),--xlonsend,receiveandcapture,
capabilityxl. can-utils v2025.01's cansend and candump carry the frames
on an interface with the CAN XL MTU, passing VCIDs through; this needs
Linux ≥ 6.9 (cansend refuses CAN XL interfaces without
CAN_RAW_XL_VCID_OPTS). The other adapters refuse--xlas
unsupported(socketcanrs now recognises--xlto do so rather than
rejecting an unknown flag). - Fixture
fixtures/frames/xl.jsonl: six CAN XL frames (priorities 0
and 0x7FF, SEC and RRS, SDT, AF, VCIDs 0x42 and 0xFF, 1 to 2048 bytes). - Self-test suite
xl, onvcanxl0(mtu 2060, created bymake vcan):
the fixture between every pair with the feature, CAN XL frames hidden from
a receiver without--xl,--xlon an interface without the CAN XL MTU
(exit 4), refusal by adapters without the feature (exit 2). - canutils receive and capture count the frames they accept instead of
usingcandump -n: candump also counts CAN FD and CAN XL frames that a
receiver without--fdor--xldrops, so such a receiver could end
with fewer frames than asked for. candump now runs with-L(flushed log
lines on stdout);capturewrites the accepted lines.
v0.4.0
Date: 2026-10-28
Previous release: v0.3.0
Fixtures only: container contract 1.2 and every image are unchanged in
behaviour (rebuilt and re-tagged).
fixtures/arxml/multiplexed.arxml: twoMULTIPLEXED-I-PDUs — a 4-bit
Intel selector with a static part and three dynamic alternatives (one
initial), an 8-bit Motorola selector with two — with decode vectors for
every selector code plus an undescribed one, and encode vectors.
Generated byscripts/gen-arxml-fixtures.py.- Oracle coverage. cantools 45.1.1 reads multiplexed PDUs (selector
<frame>_selector1, alternatives multiplexed bySELECTOR-FIELD-CODE, the
static part always present); canmatrix 1.3.3 reads only the selector. The
self-test checks each oracle against three probe frames worked out by
hand:arxml-multiplexed-cantoolsmust pass,arxml-multiplexed-canmatrix
is recorded as known. See docs/FIXTURES.md. scripts/validate-fixtures.pyfollows multiplexed PDUs when it checks the
encode vectors' signal names.
v0.3.0
Date: 2026-10-28
Previous release: v0.2.0
Container contract 1.2: additions only, every v0.2.0 consumer keeps working.
- slcan interfaces (pythoncan):
sendandreceiveaccept--interface slcan:<url>, python-can 4.6.1's slcan interface (LAWICEL ASCII, the
protocol of CANable-type serial adapters) over a pyserial URL such as
slcan:socket://127.0.0.1:20000. A consumer plays the adapter on a TCP
port (go-canbus's slcan transport does) and checks frames both ways
without a CAN interface. CAN FD asd/D/b/Brecords. slcan has no
error state indicator, error frames, echo or filters: those requests end
with exit 2 (unsupported). Capabilityslcan. - The pythoncan image adds pyserial 3.5 (BSD-3-Clause, pinned like every
package). - The pythoncanisotp adapter gives its CAN socket a 1 MiB receive buffer:
a 4095-byte message at STmin 0 (585 frames) overflowed the default one in
a slow microVM (self-testmf-4095, intermittent). - Self-test suite
slcan: two python-can slcan clients joined by a TCP
relay exchange the standard, extended, remote, CAN FD and burst
fixtures; ESI and error frames are refused.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/canbus-interop-canutils:v0.5.0 |
sha256:589652cdd8ec347904102c3780e53134927f9d9f88d4bae5fc4ccc8d1a43e533 |
ghcr.io/otfabric/canbus-interop-pythoncan:v0.5.0 |
sha256:e908aae2c571163d875d9a03dacad0758ce6794a404f9223ac43d34acc464080 |
ghcr.io/otfabric/canbus-interop-socketcanrs:v0.5.0 |
sha256:a2b5996e6ef57cb6b004193f582e375ac0fb9330f1002fc57bae90994763d104 |
ghcr.io/otfabric/canbus-interop-scapy:v0.5.0 |
sha256:2d4a2b6598e43db1732e7dd9f817dae6b61e2ae5d974d0fef06cd9f07f9e38a5 |
ghcr.io/otfabric/canbus-interop-pythoncanisotp:v0.5.0 |
sha256:7f2e8d9f22c71d757b13ddc0e804b6ef39a23a720f9d80bd5cf71a42de1c88ae |
ghcr.io/otfabric/canbus-interop-cantools:v0.5.0 |
sha256:b4cca620e311b57d4bd26df45ab7b9153b8a784e57f037a99ca8cf6e658a5434 |
ghcr.io/otfabric/canbus-interop-canmatrix:v0.5.0 |
sha256:428cdbdb832148c93a95c18bc274a9293fcd2e4f311362ee61b430fa6e7ffeda |
manifest.json lists the images by digest for pinning. The images contain MIT, BSD, LGPL-3.0 and GPL-2.0 software and are for interoperability testing; see THIRD_PARTY_NOTICES.md.
v0.4.0
Date: 2026-10-28
Previous release: v0.3.0
Fixtures only: container contract 1.2 and every image are unchanged in
behaviour (rebuilt and re-tagged).
fixtures/arxml/multiplexed.arxml: twoMULTIPLEXED-I-PDUs — a 4-bit
Intel selector with a static part and three dynamic alternatives (one
initial), an 8-bit Motorola selector with two — with decode vectors for
every selector code plus an undescribed one, and encode vectors.
Generated byscripts/gen-arxml-fixtures.py.- Oracle coverage. cantools 45.1.1 reads multiplexed PDUs (selector
<frame>_selector1, alternatives multiplexed bySELECTOR-FIELD-CODE, the
static part always present); canmatrix 1.3.3 reads only the selector. The
self-test checks each oracle against three probe frames worked out by
hand:arxml-multiplexed-cantoolsmust pass,arxml-multiplexed-canmatrix
is recorded as known. See docs/FIXTURES.md. scripts/validate-fixtures.pyfollows multiplexed PDUs when it checks the
encode vectors' signal names.
v0.3.0
Date: 2026-10-28
Previous release: v0.2.0
Container contract 1.2: additions only, every v0.2.0 consumer keeps working.
- slcan interfaces (pythoncan):
sendandreceiveaccept--interface slcan:<url>, python-can 4.6.1's slcan interface (LAWICEL ASCII, the
protocol of CANable-type serial adapters) over a pyserial URL such as
slcan:socket://127.0.0.1:20000. A consumer plays the adapter on a TCP
port (go-canbus's slcan transport does) and checks frames both ways
without a CAN interface. CAN FD asd/D/b/Brecords. slcan has no
error state indicator, error frames, echo or filters: those requests end
with exit 2 (unsupported). Capabilityslcan. - The pythoncan image adds pyserial 3.5 (BSD-3-Clause, pinned like every
package). - The pythoncanisotp adapter gives its CAN socket a 1 MiB receive buffer:
a 4095-byte message at STmin 0 (585 frames) overflowed the default one in
a slow microVM (self-testmf-4095, intermittent). - Self-test suite
slcan: two python-can slcan clients joined by a TCP
relay exchange the standard, extended, remote, CAN FD and burst
fixtures; ESI and error frames are refused.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/canbus-interop-canutils:v0.4.0 |
sha256:ff087fe538519f3b0635484309862b84e60f939b73d2a6f4c06bdf04b0c2918c |
ghcr.io/otfabric/canbus-interop-pythoncan:v0.4.0 |
sha256:25d4a94710202e0cd3def0b637b8fdf9493a943a0609a43cad405307109d893b |
ghcr.io/otfabric/canbus-interop-socketcanrs:v0.4.0 |
sha256:79e7a52cf1a7a5474e84afb3ccfb531b75549c6f1d388b5de3f6f9a4e3be1b6b |
ghcr.io/otfabric/canbus-interop-scapy:v0.4.0 |
sha256:2e1b8871a4d08e32ee80411af338edc968771911eaf1fdec358b6fa4861e529c |
ghcr.io/otfabric/canbus-interop-pythoncanisotp:v0.4.0 |
sha256:e7cdfa55e1e465f622ccfa524ba5da4f62a677689e606be1df523f8f05663720 |
ghcr.io/otfabric/canbus-interop-cantools:v0.4.0 |
sha256:f93f9e1ab882aa8a323c91df77936e64c355ec621e241cb37bac4fe0c37193bc |
ghcr.io/otfabric/canbus-interop-canmatrix:v0.4.0 |
sha256:1afbf9eb61f3d7c9400bbc1f8d2b23e4af6c3fe6ecd666d2df32d3cfe6180e54 |
manifest.json lists the images by digest for pinning. The images contain MIT, BSD, LGPL-3.0 and GPL-2.0 software and are for interoperability testing; see THIRD_PARTY_NOTICES.md.
v0.3.0
Date: 2026-10-28
Previous release: v0.2.0
Container contract 1.2: additions only, every v0.2.0 consumer keeps working.
- slcan interfaces (pythoncan):
sendandreceiveaccept--interface slcan:<url>, python-can 4.6.1's slcan interface (LAWICEL ASCII, the
protocol of CANable-type serial adapters) over a pyserial URL such as
slcan:socket://127.0.0.1:20000. A consumer plays the adapter on a TCP
port (go-canbus's slcan transport does) and checks frames both ways
without a CAN interface. CAN FD asd/D/b/Brecords. slcan has no
error state indicator, error frames, echo or filters: those requests end
with exit 2 (unsupported). Capabilityslcan. - The pythoncan image adds pyserial 3.5 (BSD-3-Clause, pinned like every
package). - The pythoncanisotp adapter gives its CAN socket a 1 MiB receive buffer:
a 4095-byte message at STmin 0 (585 frames) overflowed the default one in
a slow microVM (self-testmf-4095, intermittent). - Self-test suite
slcan: two python-can slcan clients joined by a TCP
relay exchange the standard, extended, remote, CAN FD and burst
fixtures; ESI and error frames are refused.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/canbus-interop-canutils:v0.3.0 |
sha256:8536bd28851f9d410a96583247d829d1eff1b4aba4fcb881d55f1a115493bfaf |
ghcr.io/otfabric/canbus-interop-pythoncan:v0.3.0 |
sha256:995a174dd744c99059846633830f33531fb680dc2d41bf54bf93d11f973b7281 |
ghcr.io/otfabric/canbus-interop-socketcanrs:v0.3.0 |
sha256:266666c1e97c743c645eea31898e2bf66c553e8b848b9d2b386f5cc1929e43ef |
ghcr.io/otfabric/canbus-interop-scapy:v0.3.0 |
sha256:87066ad2c5379a66b4b4a6c40df3548c562e576d7af12699701b7a6e4e34a223 |
ghcr.io/otfabric/canbus-interop-pythoncanisotp:v0.3.0 |
sha256:7a0e7b7af8d74a2f23a2ee355aacbe10b29d341e87e00c3bfd9754b9f89b612e |
ghcr.io/otfabric/canbus-interop-cantools:v0.3.0 |
sha256:e802d2dd12322ada13b61bc9867067cd98c7319c7c14425206be1121f7ac00dc |
ghcr.io/otfabric/canbus-interop-canmatrix:v0.3.0 |
sha256:90bdd6c2735064dad211c1154ada5171fd6f16865a08378a4b0b2ebd9f850466 |
manifest.json lists the images by digest for pinning. The images contain MIT, BSD, LGPL-3.0 and GPL-2.0 software and are for interoperability testing; see THIRD_PARTY_NOTICES.md.
v0.2.0
Date: 2026-10-28
Previous release: v0.1.0
Container contract 1.1: additions only, every v0.1.0 consumer keeps working.
log-convert(pythoncan): CAN traces through python-can 4.6.1's own
readers and writers: Vector ASC, Vector BLF, PEAK TRC, CSV, candump, and
the contract's frame documents (.jsonl, lossless). Capabilities
logAsc,logBlf,logTrc,logCsv. What each format keeps is measured
in docs/LOG_FORMATS.md: BLF is lossless; ASC, TRC,
CSV and python-can's candump writer lose the frame kinds listed there.
New fixturesfixtures/logs/: frames written by python-can as ASC, BLF
and TRC with python-can's reading of each.- ARXML: cantools and canmatrix decode and encode AUTOSAR 4 ARXML
(--db *.arxml, capabilityarxml), canmatrix converts it to DBC. New
fixturesfixtures/arxml/(generated byscripts/gen-arxml-fixtures.py):
Intel and Motorola signals, standard, extended and CAN FD frames, LINEAR,
TEXTTABLE, SCALE_LINEAR_AND_TEXTTABLE and IDENTICAL compu methods, signed
(2C) base types, init values. Both oracles agree on every vector. Neither
applies a PDU's START-POSITION inside its frame (fixture
pdu-offset.arxml, reported asknown). - Pins: cantools 45.1.0 → 45.1.1. New weekly Upstream workflow
(scripts/latest-upstream.py): keeps the issue "Upstream releases: pins
behind the latest" open while a pin or a base image digest is behind;
never changes a pin. - Self-test: suites
dbc(now with the ARXML fixtures) andlogs
(new).scripts/chroot-runruns the exported image file systems with
chroot where no Docker daemon is, andscripts/microvm-isotp.shruns the
ISO-TP suite in a virtme-ng microVM with a stock Ubuntu kernel: see
TESTING.md.
Images (multi-arch, linux/amd64 and linux/arm64):
ghcr.io/otfabric/canbus-interop-{canutils,pythoncan,socketcanrs,scapy,pythoncanisotp,cantools,canmatrix}:v0.2.0.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/canbus-interop-canutils:v0.2.0 |
sha256:f50df2dedd63575a1b91b58b379bfe2cc266ff0a9ca1058f7b497a742ed7b7cb |
ghcr.io/otfabric/canbus-interop-pythoncan:v0.2.0 |
sha256:f29e20aa79d889166e6f35277907ee33b3c01b32b6f726a86c0648319f8ec204 |
ghcr.io/otfabric/canbus-interop-socketcanrs:v0.2.0 |
sha256:cf07b3b0ba34204c61aa95ec6cca63ef4c863f5a97bf77d141e35998ac878ff2 |
ghcr.io/otfabric/canbus-interop-scapy:v0.2.0 |
sha256:2e3d8136f97a0ca764c80796673da77a501fb9783b55f8f9476f414ae10b16c0 |
ghcr.io/otfabric/canbus-interop-pythoncanisotp:v0.2.0 |
sha256:e71401d61e289d0f3ab2248791d19d439498a42188facf93ca997543891251b2 |
ghcr.io/otfabric/canbus-interop-cantools:v0.2.0 |
sha256:56baa64227ad282296bd62e25a01298f0d492a71fb218388a1a4a9e7bd47f0ee |
ghcr.io/otfabric/canbus-interop-canmatrix:v0.2.0 |
sha256:8024a5c03911116bd27492ae8c237a9f79855105e46518180eb983813dfb7a33 |
manifest.json lists the images by digest for pinning. The images contain MIT, BSD, LGPL-3.0 and GPL-2.0 software and are for interoperability testing; see THIRD_PARTY_NOTICES.md.
v0.1.0
Date: 2026-10-27
Previous release: none
First release of canbus-interop.
- Container contract 1.0 (docs/CONTAINER_CONTRACT.md) and JSON Schemas 1.0.
- Images:
canbus-interop-canutils(can-utils v2025.01; kernel CAN_RAW and
CAN_ISOTP),-pythoncan(python-can 4.6.1),-socketcanrs(socketcan
4.0.0),-scapy(Scapy 2.8.0),-pythoncanisotp(python-can-isotp 2.0.7),
-cantools(cantools 45.1.0),-canmatrix(canmatrix 1.3.3), for
linux/amd64 and linux/arm64. - Fixtures: frames (standard, extended, remote, every FD length, ESI, error
frames, a 2000-frame sequence), seven DBC databases with decode and encode
vectors, a KCD network. - Self-test on vcan: raw CAN pairs, filters, loopback, receive-own, error
frames, multi-consumer, capture/replay, malformed input, interface
down/up; ISO-TP kernel ↔ python-can-isotp; cantools ↔ canmatrix.
Images
| Image | Digest |
|---|---|
ghcr.io/otfabric/canbus-interop-canutils:v0.1.0 |
sha256:c4d541a178b7bedec714136c3b01897a722a06cefad4c39d6fde3afbe8b7f6de |
ghcr.io/otfabric/canbus-interop-pythoncan:v0.1.0 |
sha256:11178bac2eb2432acb1f9620dcb4f6945ceaacaf8472056783b776cf6efd99f9 |
ghcr.io/otfabric/canbus-interop-socketcanrs:v0.1.0 |
sha256:2d620fbb94e2af90ba10616bff8a3abbc6c500309ee9042e495ef1d8a15a0d97 |
ghcr.io/otfabric/canbus-interop-scapy:v0.1.0 |
sha256:3eb6de2ca15c7849f2a4a76d21d79e297d92d29355c1e092686b2e0b2103a751 |
ghcr.io/otfabric/canbus-interop-pythoncanisotp:v0.1.0 |
sha256:130e54cab8e665dd917ce577ffced6d9870d6769e2f80d8beeb87ae9ff2c2492 |
ghcr.io/otfabric/canbus-interop-cantools:v0.1.0 |
sha256:67265f75d15d9155e877e50e92e51c530d88dce63600df24ad993e2717fa9c93 |
ghcr.io/otfabric/canbus-interop-canmatrix:v0.1.0 |
sha256:42f14775360e86ff710496be5c1eae2397ae089ec02d2c4a6082c8dba0798878 |
manifest.json lists the images by digest for pinning. The images contain MIT, BSD, LGPL-3.0 and GPL-2.0 software and are for interoperability testing; see THIRD_PARTY_NOTICES.md.