118 wires and counting

$ follow Go

Keep up with Go in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

or

fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.

Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.

$ status

wire 2026-09-12
stories 62

© 2026 RepoJournal Home Showcase Explore How it works Privacy

$ the-wire · showcase

Go's build chain sheds its own-stdlib dependency, compiler walk state removed

By RepoJournal · Filed · About Go · Composed from the cited sources · methodology

cmd/go no longer requires being built with the stdlib it ships, and the long-lived WalkState global is gone from the compiler's walk pass.

The go command no longer depends on being built against its own standard library. The only real reason for the constraint was its use of runtime.Version, now replaced by buildcfg.Version, which gets copied in when the bootstrap go command is built [1]. buildcfg.Version omits experiment tags where runtime.Version included them, which is harmless here: hash.go already stripped experiments, so that removal code is dropped and gover.LocalToolchain() still resolves correctly [1]. For anyone who bootstraps the toolchain or builds cmd/go against a different Go install, this is the change that makes that path viable.

The compiler's walk pass lost its global. WalkState was first injected rather than held as a package-level global, then the global was deleted outright [2]. The pass now carries its state explicitly, which removes a piece of shared mutable state from cmd/compile/internal/walk. Related cleanup landed in the runtime and net/http layers the same day: pin counter updates now run on the goroutine stack, since the caller already disables preemption and the allocator switches to the system stack when needed, and the specials allocator lock rank was fixed to permit stack growth, dropping an obsolete heap-lock dependency [3]. In internal/poll, event-backed I/O that completes synchronously no longer waits for its event or re-queries the result, and the waitOnSuccess workaround is gone from the initialization fallback [4].

HTTP/2 cleanup continued across both repos now that the implementation lives in golang/go rather than x/net. In net/http/internal/http2, stale fields and nil checks left over from the move were removed, including the nil check for the case where ConfigureServer was never called, which can no longer happen [5]. The x/net side, whose old HTTP/2 package is frozen, got the matching move of the shared gzip reader implementation into internal/http3 and internal/httpcommon [6].

Two tooling fixes worth noting for daily driver use. goimports now adds a blank import of "embed" for files carrying //go:embed directives when the embedded variable's type is string or []byte, cases where the package was never referenced by name and the file previously failed to compile because the import was never added [7]. In gopls, missing-module diagnostics are preserved: an exact missing-module match now uses continue instead of break so every import in a package is scanned, and diagnostics are appended to the report slice for their target URI rather than the source go.mod report slice, which could misplace them or overwrite earlier diagnostics for the same file [8].

On golang/sys, six separate changes landed. linux/sparc64 gained assembly for syscalls, matching the shape used on other Linux architectures by jumping to package syscall implementations where they exist and trapping directly for the two NoError variants, with the trap being ta 0x6d on SPARC [9]. Stat_t on that target was also corrected to use the stat64 family: glibc and kernel stat structures differ on sparc64 as they do on mips64, and Stat_t had been generated from glibc's, so raw syscalls filled it at the wrong offsets [10]. Darwin exposed PRIO_DARWIN_* constants for setpriority to control thread scheduling on Apple Silicon [11]. Linux 6.19's listns(2), which enumerates namespace IDs with optional filtering by namespace type and owning user namespace, is now supported [12].

Action items

References

  1. [1] cmd/go: remove dependency on being built with its own stdlib ↗ golang/go
  2. [2] cmd/compile/internal/walk: clean up Walk and remove WalkState ↗ golang/go
  3. [3] runtime: remove unnecessary stack switches when pinning ↗ golang/go
  4. [4] internal/poll: skip unnecessary waits for event-backed I/O ↗ golang/go
  5. [5] net/http/internal/http2: remove stale fields and nil checks ↗ golang/go
  6. [6] internal/http3, internal/httpcommon: move gzip reader implementation ↗ golang/net
  7. [7] internal/imports: import "embed" for files with //go:embed directives ↗ golang/tools
  8. [8] gopls: preserve all missing-module diagnostics ↗ golang/tools
  9. [9] unix: provide linux/sparc64 assembly for syscalls ↗ golang/sys
  10. [10] unix: use the stat64 family and fix Stat_t on linux/sparc64 ↗ golang/sys
  11. [11] darwin: expose setpriority PRIO_DARWIN_* constants ↗ golang/sys
  12. [12] unix: add listns syscall introduced in Linux 6.19 ↗ golang/sys

Quick answers

What shipped in Go on September 12, 2026?
cmd/go no longer requires being built with the stdlib it ships, and the long-lived WalkState global is gone from the compiler's walk pass. In total, 62 commits landed.
Who contributed to Go on September 12, 2026?
13 developers shipped this update, including Michael Matloob, qmuntal, Nicholas S. Husin, Stian Halseth, Yan Zhu, Nate Bracy, Joon Lee, and Saleh, and 5 more.
What were the notable Go updates?
cmd/go: remove dependency on being built with its own stdlib, cmd/compile/internal/walk: clean up Walk and remove WalkState, and runtime: remove unnecessary stack switches when pinning.