Small and old gateways with tedge-dot-c
Many OT gateways in the field run an old distribution on a 32-bit ARM board with little storage.
A binary built on a current distribution will not even start there: a native build on
ubuntu-24.04 hard-requires glibc 2.39 on the target.
What you’ll build: a tedge-dot-c install on such a gateway, the default package, with the
same configs, flows and cloud integration as tedge-dot-rs, and a clear picture of the few
features only the Rust build has.
What the C package gives you
Section titled “What the C package gives you”tedge-dot-c is a maintained peer of the Rust implementation, not a prototype. It ships from
the same release, runs the same e2e, cloud and conformance suites, and is held to the same
OT Connector Contract.
tedge-dot-rs | tedge-dot-c | |
|---|---|---|
| Architectures | amd64, arm64 | amd64, arm64, armhf |
| Minimum glibc | not pinned | 2.17 (Debian 8 / RHEL 7 era) |
| Binary size, all protocols | about 12 MB, static | about 457 KB (open62541 statically linked) |
| Protocols | Modbus, OPC UA, CAN bus, CANopen, SNMP, AVEVA PI (preview) | the same, plus PROFIBUS-DP (preview) |
The glibc floor comes from the build: every architecture is cross-compiled with zig, which supplies the compiler and a libc pinned to 2.17, against Debian’s multiarch libraries. See Cross-compilation for the details.
Both packages install the same /usr/bin/tedge-dot, the same tedge-dot.service and the same
/etc/tedge/plugins/ot/ layout, so a config, a flow or a cloud integration built against one
works unchanged against the other. They conflict with each other: a host runs one or the other.
Install
Section titled “Install”-
Set up the thin-edge.io community repository (instructions). It carries
tedge-dot-cand itstedge-parameter-plugindependency, so set it up even when you install a downloaded package. -
Install the package.
Terminal window sudo apt-get install -y tedge-dot-csudo systemctl status tedge-dotTerminal window sudo dnf install tedge-dot-cEvery release attaches
.deb,.rpmand.apkpackages and tarballs for amd64, arm64 and armhf, with oneSHA256SUMS:Terminal window sudo apt-get install -y ./tedge-dot-c_*_amd64.debThe package depends on
libmodbus5,libmosquitto1andlibcjson1(Debian/Ubuntu names); open62541 is statically linked. -
Add devices. The service starts with no devices configured. Add
[[device]]sections to the configs in/etc/tedge/plugins/ot/, or copy a demo config from/usr/share/tedge-dot/demo/. The change is applied within a few seconds, without a restart.
Where it differs
Section titled “Where it differs”The parity table in the C implementation reference
is the single source of truth. Each gap is declared in the build and enforced by test tags, so a
test that needs a missing capability is reported as skipped for the C build rather than quietly
passing. In short, tedge-dot-c does not have:
- SNMPv3 with SHA-2 authentication or AES-192/256 privacy. MD5/SHA with DES/AES works. A
device configured with one of the others stays
disconnectedwith a reason naming the capability, while every other device keeps working. - The deprecated Basic128Rsa15 OPC UA policy.
Basic256and the current policies work. - CAN FD frames: classic CAN only.
- PROFIBUS-DP on a serial line. It speaks
tcp://to a device server or the simulator.
Two behaviours differ as well: a wedged protocol call (stall_timeout) restarts the whole
process rather than one connector, and string values are capped at 255 bytes, bytes values at
127 bytes and raw values at 256 bytes. A bytes value or an OPC UA structure body over its
limit is a bad sample that names the limit, never a truncated value. See Liveness and
Known limitations.