Skip to content
AI-driventedge-dot is developed largely by AI coding agents, and it is alpha software. Check what it does before you rely on it, and report what you find.

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.

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-rstedge-dot-c
Architecturesamd64, arm64amd64, arm64, armhf
Minimum glibcnot pinned2.17 (Debian 8 / RHEL 7 era)
Binary size, all protocolsabout 12 MB, staticabout 457 KB (open62541 statically linked)
ProtocolsModbus, 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.

  1. Set up the thin-edge.io community repository (instructions). It carries tedge-dot-c and its tedge-parameter-plugin dependency, so set it up even when you install a downloaded package.

  2. Install the package.

    Terminal window
    sudo apt-get install -y tedge-dot-c
    sudo systemctl status tedge-dot

    The package depends on libmodbus5, libmosquitto1 and libcjson1 (Debian/Ubuntu names); open62541 is statically linked.

  3. 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.

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 disconnected with a reason naming the capability, while every other device keeps working.
  • The deprecated Basic128Rsa15 OPC UA policy. Basic256 and 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.