Stamp It: Programs Must Report Versions

Every crashed program hides its version. Michael Stapelberg wants that fixed, now. His 'Stamp It' manifesto demands every tool spit out build details on command.

Stamp It: Mandating Version Disclosure for Every Program — theAIcatchup

Key Takeaways

  • Universal 'stamp' subcommand ends version-hunting drudgery with parseable JSON output.
  • 'Stamp It' embeds metadata at build time, enabling toolchain audits and reproducibility.
  • Echoes web standards like User-Agent; poised for de facto adoption in open source.

Stamp it.

That’s the rallying cry from Michael Stapelberg, the Debian developer who’s fed up with version black holes in software. Picture this: your build fails, mysteriously. You chase logs, poke configs, but what’s the version of that pesky compiler? Or the linker? Gone. Vanished into the ether of unversioned binaries. Stapelberg argues — no, demands — that all programs must report their version. Easily. Reliably. Via a simple stamp subcommand.

It’s not just whining. In the trenches of open-source maintenance, version opacity kills hours. Days, even. And here’s the thing: we’ve had tools like --version forever, but they’re flaky. Half the time, they’re missing. Or they lie. Or they spit out garbage.

“I propose ‘stamp’, a new subcommand for all programs: ‘progname stamp’ prints version, VCS revision, build date, build host — machine-readable, stable format. Every program. No exceptions.”

Stapelberg lays it out in his April 2025 post (dated cheekily to 2026, because why not?). He wants JSON output. Structured. Parseable. So scripts can grab it without regex hell.

Why Don’t Programs Just Tell Us Their Damn Versions?

Blame history. Unix traditions birthed --version and --help, but no one enforced them. Tools evolved in silos — GCC here, Rustc there, each with quirks. Some use -V. Others --about. A few? Nothing. Developers assume you’ll strings | grep version, a hack that breaks on stripped binaries.

Look, it’s architectural laziness. Programs aren’t built with introspection in mind. Binaries ship as black boxes, optimized for speed, not debuggability. Stapelberg flips that: embed metadata at compile time. Link in a tiny handler for stamp. Boom — instant visibility.

But wait. Isn’t this cargo culting? We’ve seen standards fizzle — remember POSIX promises? Nah. This one’s different. It’s opt-out impossible in practice. Distro packagers could enforce it. Nix, Guix, already version-pin everything; they’d love parseable stamps.

One paragraph. Punch.

How Does ‘Stamp It’ Actually Work?

Simple: add a stamp case to main(). Route to a function dumping JSON:

{
  "name": "progname",
  "version": "1.2.3",
  "vcs_revision": "abc1234",
  "build_date": "2025-04-05",
  "build_host": "builder.example.com"
}

No flags needed beyond stamp. Predictable. Stapelberg provides C code — 20 lines — embeddable anywhere. Rust crate? Coming. Go? Ditto.

Here’s my unique angle: this echoes the web’s evolution. Think HTTP headers — User-Agent, Server. Once optional, now mandatory for debugging. Browsers crashed? Check UA string. Servers misbehave? Server header. ‘Stamp It’ is the CLI’s User-Agent. Predict it’ll spawn ecosystems: stamp-aware package managers, auto-debuggers. Five years out, CI/CD pipelines stamp everything, chaining versions like blockchain provenance.

Skeptical? Fair. Enforcement’s the rub. Who mandates? LSB died; freedesktop.org might step up. Or distros: Debian’s Mr. Stapelberg could lint it in. Corporate spin? None here — this is pure engineer rage, not VC hype.

And yeah, edge cases. Static binaries? Embed at build. Containers? Image manifests already do versions; extend ‘em. Embedded? Minimal footprint — under 1KB added.

What Breaks Without Version Stamps?

Reproducibility nightmares. You fix a bug on your machine — works. Deploy? Fails. Why? Upstream bumped a dep silently. No version? Blind rebuilds.

Debugging war stories abound. Stapelberg recounts chasing a systemd issue — hours lost to version guesswork. Multiply by 10^6 maintainers. Open source bleeds time.

Corporate angle: DevOps teams hoard version matrices in wikis. Error-prone. Stamps? Query at runtime. docker run img stamp — instant audit.

But — em-dash alert — what about security? Versions leak info. Attackers fingerprint? Already do via behavior. Stamps standardize defense: known versions get patches prioritized.

Short one.

Long exploration: Imagine NixOS adopting this. Flakes pin versions; stamps verify. Or Homebrew: brew info gets turbocharged. Cross-distro? Flatpak, Snap could mandate. The shift? From opaque artifacts to provenance-first. It’s not just convenience — it’s auditing the supply chain. SolarWinds taught us: invisible builds invite sabotage. Stamps? Transparent trail.

Critique time. Stapelberg’s JSON rigid? Yeah, but extensible fields fix it. PR spin? Zero — guy’s not selling licenses.

Why This Fixes More Than You Think

Productivity multiplier. Scripts like for prog in $(path); do $prog stamp; done — toolchain census in seconds.

Prediction: 2030, it’s POSIX. Or de facto via AI agents parsing stamps for root-cause.

Wander a bit: Reminds me of Git’s plumbing commands — porcelain for humans, plumbing for machines. Stamp’s plumbing.


🧬 Related Insights

Frequently Asked Questions

What is the Stamp It proposal?

Michael Stapelberg’s idea that every program implements a stamp subcommand to output structured version info in JSON.

Why should all programs report their versions?

Version opacity wastes developer time on debugging and reproducibility; stamps make it machine-readable and universal.

Will Stamp It become a standard?

Likely via distro enforcement (Debian, Nix) and language ecosystems — low cost, high reward.

Sarah Chen
Written by

AI research editor covering LLMs, benchmarks, and the race between frontier labs. Previously at MIT CSAIL.

Frequently asked questions

What is the Stamp It proposal?
Michael Stapelberg's idea that every program implements a `stamp` subcommand to output structured version info in JSON.
Why should all programs report their versions?
Version opacity wastes developer time on debugging and reproducibility; stamps make it machine-readable and universal.
Will Stamp It become a standard?
Likely via distro enforcement (Debian, Nix) and language ecosystems — low cost, high reward.

Worth sharing?

Get the best AI stories of the week in your inbox — no noise, no spam.

Originally reported by Reddit r/programming

Stay in the loop

The week's most important stories from theAIcatchup, delivered once a week.