Skip to content

0042. Host: the Rust applications and tools are the release from v4.0

Date: 2026-10-31

Context

By the end of October 2026 every host application had a Rust/Tauri port held to the Qt original by shared test oracles: Tag Programmer (0035), Tag Monitor (0037), Tag Calibrator (0039) and Tag View, and the command-line tools that need only the tag interface had Rust ports in tag-tools. The packages carried both lines side by side: eight applications, two implementations of seven tools, and Qt with everything attached to it (aqt in CI, macdeployqt and windeployqt, the QML import checks, the Qt notices and a GPL section in the licence index for QCustomPlot and Qt Quick 3D). The ports had been used on the bench and the duplication had become the larger cost.

The plan is host/design/proposals/rust-default-release.md.

Decision

  • The packages carry the Rust line only, from v4.0: tagprogram, tagmonitor, tagcalibrate, tagview, and the Rust tag-info, tag-start, tag-stop, tag-reset, tag-test, tag-cal, tag-dwnld, tag-flash and base-flash, with the names, output and exit status of the tools they replace.
  • C++ with no Rust equivalent stays and ships: dataprocessing, tag-txt-import, and the tagcore_c library the Rust programs link. The recovery tools stay in the default build in bin/internal.
  • One option, BUILD_LEGACY_HOST (off), builds what was replaced: the Qt applications and their libraries, and the C++ tools with Rust equivalents, which go to bin/legacy when the Rust tools are also built. It needs Qt; it is how the oracles are regenerated and the fallback if a Rust program fails in the field. BUILD_QT_APPS=ON is accepted as a deprecated alias. BUILD_RUST_APPS is on by default.
  • The release workflow installs no Qt. A manual run with the legacy input builds the legacy configuration so that it does not rot; such a run never publishes.
  • btviz is deleted; its logs open in Tag View.
  • Tag View ships without the activity filter, which stayed in the Qt layer of sensorViz; porting it into the core is open work.
  • tag-log-import is Rust and internal: built into bin/internal, not installed.
  • The Qt applications' manual pages stay for this one release under a "Legacy" heading, and go in the next with their pictures. The Rust applications' pages describe each program in full.

Alternatives considered

  • Keep shipping both lines for another release. Nothing the Qt line did was missing from the ports except the activity filter, and two of everything doubled the package, the CI time and the support questions.
  • Remove the Qt code outright. The oracles that keep the ports honest (qtmonitor's 710 configuration probe goldens, qtcalibrate's replay log, sensorViz's state dump) are regenerated by the Qt programs, and a fallback release needs them buildable; an option costs little.
  • Wait for the activity filter. It is used rarely, and the decision was to release without it rather than hold every other change.

Evidence

  • Bench checks on a BitTag V6 and the IMUTagNandBmp581, 2026-10-31: tag-start --config and --merge, tag-test on the IMUTag, tag-side-channel-check's write, unplug and start-running checks, and programming the U375 through Tag Programmer's engine with Retest, all passed (host/commandline-rs/README.md, Tag Programmer's README). They found one fault, a rare failed SWD enter on the first attach, fixed in both libraries (host/libraries/tagcore/design/investigations/2026-10-l4-attach-swd-enter.md).
  • The Rust tag-log-import writes databases byte-identical to the C++ tool's on a tagsim download.
  • On macOS a default configure without Qt builds and installs the four bundles and the shipped tools; the installed tag-info attached to the BitTag; the legacy configuration builds qtmonitor and qtcalibrate.
  • The release workflow, run by hand on 2a43d8be, passed on Linux, macOS and Windows in both configurations, including the Linux package test and the macOS check that the applications embed their pages.

Consequences

  • Qt is no longer needed to build or release the host tools. The vcpkg dependencies (libusb, protobuf, sqlite3) remain, for tagcore_c, dataprocessing, tag-txt-import and the recovery tools.
  • A station no longer needs STM32CubeProgrammer.
  • The licence index has no GPL programs; Qt, QCustomPlot and the QFlightInstruments artwork are listed as legacy only, and the Rust tools have their own notices file.
  • Changing a Qt application's behaviour, and regenerating an oracle from it, needs a tree configured with BUILD_LEGACY_HOST=ON.
  • The bench rules now name Tag Monitor as the program to detach before a power measurement.
  • The packaged applications on Windows and Linux beyond "starts and stays up" are checked in the release's own bench checklist.