The Drift Log · Determinism and model independence
Locking Byte-for-Byte Reproducibility in Release Archives
2 September 2026 · 3 min read · 490 words · established

Compilers and archivers inject timestamps and host paths into binaries by default. Standardising build epochs and sorting yields byte-for-byte verifiable releases.
Check out a commit from three months ago. Run your build command. Compute the SHA-256 hash of the resulting binary or tarball, then compare it against the hash published in that version's release notes.
In most production pipelines, the hashes do not match.
Nothing in your code changed. The logic is identical. But the build artifact is legally and cryptographically a different file. If you cannot produce the exact binary twice from identical source trees, you cannot prove that what is running in production matches what you reviewed, tested, and signed.
Reproducible builds are not an aesthetic preference. They are the baseline requirement for supply chain verification. Without them, provenance is an assertion rather than a fact.
Where archive entropy originates
Compilers, packagers, and linkers inject environmental noise into the binary stream by default. Three common inputs corrupt reproducibility across builds:
- Timestamps. Compilers embed the current system time into object headers and debug sections. Archive utilities like
tarandziprecord the modified timestamp (mtime) of every file. A build executed at 10:00:00 will produce different bytes than one executed at 10:00:01. - File ordering. Directory traversal order depends on the underlying filesystem and inode allocation. If your packaging step globs files without an explicit sort, the archive tool bundles them in whatever arbitrary order the operating system kernel returns.
- Build paths. Compilers frequently embed absolute paths from the host machine into debug symbols (such as DWARF or PDB tables). If developer A builds in
/home/alice/srcand CI builds in/builds/runner-1/src, the output bytes diverge.
Fixing this requires standardising build environments against a fixed epoch, stripping host paths, and enforcing deterministic sorting before packaging.
## Set a deterministic timestamp from the latest git commit
export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
## Package with fixed metadata, explicit sorting, and static ownership
tar --sort=name \
--mtime="@${SOURCE_DATE_EPOCH}" \
--owner=0 --group=0 --numeric-owner \
--pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \
-czf release.tar.gz ./dist
Reproducibility versus runtime determinism
A byte-for-byte reproducible archive proves that a specific source tree yielded a specific artifact. It guarantees packaging integrity, but it does not guarantee that the software behaves deterministically once executed.
If an application depends on ambient runtime state, unpinned remote endpoints, or probabilistic model outputs, the artifact is fixed while the execution remains variable. True deterministic software requires both properties: a build pipeline that produces exact, verifiable bytes, and runtime logic that operates without stochastic variance. The archive checksum seals the packaging; model-independent code seals the behaviour.
How SHPBL seals releases
At SHPBL, model independence at runtime is matched by byte-for-byte archive reproducibility at release.
No AI model runs inside our software, and no component's behaviour depends on a model's output at runtime. That eliminates stochastic drift and hallucination surface at execution. To eliminate supply chain ambiguity at distribution, every release artifact in the engineered catalog is built in a pinned environment and sealed with a published SHA-256 checksum.
Before an artifact is distributed, our certification harness executes it and records a reproducible verdict: CERTIFIED, PROVISIONAL, INCONCLUSIVE, or FAILED. The published checksum guarantees that the archive you fetch matches the exact bytes evaluated by the harness. You receive owned, model-independent code with cryptographic proof of what was built.
This post supports the longer argument in Why Model Independence Is an Engineering Posture.
Keep reading
Next in the log
- Why Model Independence Is an Engineering Posture
Replacing parsers with runtime LLM calls trades deterministic invariants for statistical tendencies. Logic must be owned at runtime.
- Seeding Clocks and Entropy in Production Test Suites
Eliminate flaky test runs by treating physical clocks and random number generators as explicit, seedable inputs rather than ambient global state.
- Vendoring Code Without a Paper Trail Is Unsecured Debt
Inlining unverified code severs upstream security alerts and license tracking. Provenance must be captured at intake, not guessed by SBOMs.
The Strategic Master Library · written and reviewed under the house's own epistemic rules: nothing claimed that we cannot show.