Go toolchain provenance
What this is
When you run go build, something has to be the Go compiler. This page is
about which Go that is, where it comes from, and how we know it wasn't
tampered with. The short version: probectl builds with the official upstream
Go release, pinned to one exact patch version, downloaded and cryptographically
verified the same way any Go dependency is. There is no custom, forked, or
vendored compiler hiding in this repo.
The version is named in two places that are kept in lockstep:
go.mod—go 1.26.4. This is the language/version floor for the main module.go.work—go 1.26.4and an explicittoolchain go1.26.4line. (See "Why the explicit toolchain line" below — it is not redundant.)
How it works
Acquisition. A
godirective that names a version newer than the running Go triggers Go's toolchain management: it downloads the named toolchain from the canonical module mirror (proxy.golang.org) exactly like it fetches any module, then verifies it against the public Go checksum database (sum.golang.org) before it ever runs. A swapped, corrupted, or man-in-the-middled toolchain fails that checksum and refuses to execute — the build stops instead of silently using an untrusted compiler.Pinning. Because the directive names the exact patch (
1.26.4, not a loose1.26), every developer machine resolves to the same compiler. The workflows that build and gate shipped artifacts pin theirsetup-goto the same patch (GO_VERSION: "1.26.4"in.github/workflows/ci.ymlandrelease.yml), and thegodirective is the floor everywhere else — a machine running an older Go fetches and checksum-verifies1.26.4before it compiles anything.Why this patch level.
1.26.4is pinned forward deliberately: it carries upstream standard-library security fixes (GO-2026-5037 incrypto/x509, GO-2026-5039 innet/textproto) thatgovulncheckwould otherwise flag. Bumps land through the normal pull-request + green-CI path, never out of band.
Why it's built this way
Exact-patch pinning keeps
govulncheckhonest.govulncheckattributes standard-library vulnerabilities by Go version. A barego 1.26scans as1.26.0and would false-flag every already-patched stdlib CVE; naming1.26.4makes the scan reflect the real, patched toolchain. (This is also whygo.modcarries the patch version — see the comment at the top ofgo.mod.)Why the explicit
toolchainline ingo.work. The patched stdlib is the minimum every build must use.go.workmust not name an older Go than the modules'go.mod, or Go rejects the workspace whenever it cannot auto-resolve a newer toolchain — which is exactly the case underGOTOOLCHAIN=local, the mode the FIPS distribution build (make build-fips) and any offline or air-gapped build runs in (no network means no toolchain download — the local Go either satisfies the floor or the build refuses). Keeping thego.workgoline andtoolchainline in sync withgo.modis what stops those builds from breaking.No vendored or forked toolchain exists in this repository. Provenance is upstream-official plus checksum-database-verified — full stop. That is the point: anyone auditing the build can reproduce it from a public, signed toolchain rather than trusting a binary we shipped.