Ramblings of an aging IT geek
← Ramblings of an aging IT geek
news

everyone's posting about the same release again

Notes on the wave of excitement around Go's upcoming 1.19 release and why the unglamorous parts of a release are the ones I actually care about.

A wall of tech news headlines

Open any feed this week and it is the same story over and over: the Go 1.19 release is nearly out, the release candidate is being kicked around, and everyone has An Opinion. The headlines are all about the soft memory limit and the doc comment changes, which is fair enough, those are the bits that make a good screenshot. But the reason I clicked through is duller and, to me, more interesting.

I have been writing a lot of Go this year, mostly small services that sit in front of databases and do unexciting work very reliably. The thing I have wanted for ages is exactly the thing nobody is putting in a headline: a way to tell the runtime "you have this much memory and no more, behave accordingly". The new GOMEMLIMIT knob is precisely that. A soft limit the garbage collector will work to stay under, instead of the all-or-nothing of GOGC and the OOM-killer waiting at the end of the road.

A city skyline at dusk

If you have ever run Go in a container with a hard cgroup limit, you know the failure mode. The default GC tuning has no idea your container is capped. It cheerfully lets the heap grow towards what it thinks the machine can spare, the cgroup says otherwise, and the kernel reaps your process mid-request. The standard workaround was the third-party automaxprocs and friends, plus a hand-tuned GOGC, plus a prayer. It worked, but it was the kind of thing you had to explain to every new starter and then explain again after the next incident.

A first-party memory limit means I can set it from the same place I set the container limit, knock a sensible margin off the top, and stop thinking about it. That is the whole pitch. It will not trend, because "ops engineer slightly less anxious about OOM kills" is not a headline. But it is the change in this release that will actually alter how I deploy things.

The wider point, and the reason I am writing this down rather than just retweeting, is that release excitement is almost always pointed at the wrong feature. The flashy addition gets the blog posts. The quiet runtime change that removes a recurring 3 a.m. page gets a single line in the notes. I have learned to read release notes backwards, starting from "runtime" and "tooling" and only getting to the language features once I have checked whether anything I have been fighting for two years just got fixed.

I will hold off on the production rollout until the actual release lands and a point release or two has shaken out the inevitable rough edges; release candidates are for testing, not for the box your pager points at. But I have already got a branch updating our base images and wiring GOMEMLIMIT to the cgroup limit, ready to go the moment 1.19 is properly out. For once the thing I am most excited about is the thing nobody else is talking about, and that feels about right.