Advertisement Ā· 728 Ɨ 90

Posts by Michael Stapelberg 🐧🐹😺

screenshot of the first page of my ā€œStamp It! All Programs Must Report Their Versionā€ blog post:

Recently, during a production incident response, I guessed the root cause of an outage correctly within less than an hour (cool!) and submitted a fix just to rule it out, only to then spend many hours fumbling in the dark because we lacked visibility into version numbers and rollouts… šŸ˜ž

This experience made me think about software versioning again, or more specifically about build info (build versioning, version stamping, however you want to call it) and version reporting. I realized that for the i3 window manager, I had solved this problem well over a decade ago, so it was really unexpected that the problem was decidedly not solved at work.

In this article, I’ll explain how 3 simple steps (Stamp it! Plumb it! Report it!) are sufficient to save you hours of delays and stress during incident response.

[…]

screenshot of the first page of my ā€œStamp It! All Programs Must Report Their Versionā€ blog post: Recently, during a production incident response, I guessed the root cause of an outage correctly within less than an hour (cool!) and submitted a fix just to rule it out, only to then spend many hours fumbling in the dark because we lacked visibility into version numbers and rollouts… šŸ˜ž This experience made me think about software versioning again, or more specifically about build info (build versioning, version stamping, however you want to call it) and version reporting. I realized that for the i3 window manager, I had solved this problem well over a decade ago, so it was really unexpected that the problem was decidedly not solved at work. In this article, I’ll explain how 3 simple steps (Stamp it! Plumb it! Report it!) are sufficient to save you hours of delays and stress during incident response. […]

screenshot of the last page of my ā€œStamp It! All Programs Must Report Their Versionā€ blog post: 

Conclusion: Stamp it! Plumb it! Report it!
My argument is simple:

Stamping the VCS revision is conceptually easy, but very important!

For example, if the production system from the incident I mentioned had reported its version, we would have saved multiple hours of mitigation time!

Unfortunately, many environments only identify the build output (useful, but orthogonal), but do not plumb the VCS revision (much more useful!), or at least not by default.

Your action plan to fix it is just 3 simple steps:

Stamp it! Include the source VCS revision in your programs.
This is not a new idea: i3 builds include their git-describe(1) revision since 2012!
Plumb it! When building / packaging, ensure the VCS revision does not get lost.
My ā€œVCS rev with NixOSā€ case study section above illustrates several reasons why the VCS rev could get lost, which paths can work and how to fix the missing plumbing.
Report it! Make your software print its VCS revision on every relevant surface, for example:
[…]

screenshot of the last page of my ā€œStamp It! All Programs Must Report Their Versionā€ blog post: Conclusion: Stamp it! Plumb it! Report it! My argument is simple: Stamping the VCS revision is conceptually easy, but very important! For example, if the production system from the incident I mentioned had reported its version, we would have saved multiple hours of mitigation time! Unfortunately, many environments only identify the build output (useful, but orthogonal), but do not plumb the VCS revision (much more useful!), or at least not by default. Your action plan to fix it is just 3 simple steps: Stamp it! Include the source VCS revision in your programs. This is not a new idea: i3 builds include their git-describe(1) revision since 2012! Plumb it! When building / packaging, ensure the VCS revision does not get lost. My ā€œVCS rev with NixOSā€ case study section above illustrates several reasons why the VCS rev could get lost, which paths can work and how to fix the missing plumbing. Report it! Make your software print its VCS revision on every relevant surface, for example: […]

New blog post 🄳

Stamp It! All Programs Must Report Their Version

In this article, I’ll explain how 3 simple steps (Stamp it! Plumb it! Report it!) are sufficient to save you hours of delays and stress during incident response.

Read more: michael.stapelberg.ch/posts/2026-0...

#nix #golang #linux

2 weeks ago 11 3 2 0

Thanks for the tip, I am aware of that feature, but use different ways for different situations :)

3 months ago 0 0 0 0
Preview
Can I finally start using Wayland in 2026? Wayland is the successor to the X server (X11, Xorg) to implement the graphics stack on Linux. The Wayland project was actually started in 2008, a year before I created the i3 tiling window manager fo...

New blog post: Can I finally start using Wayland in 2026?

[…] I don’t want to be stuck on deprecated software, so I try to start using Wayland each year, and this articles outlines what keeps me from migrating to Wayland in 2026.

michael.stapelberg.ch/posts/2026-0...

#linux #sway #wayland #i3wm

3 months ago 14 0 3 0

I have a few more šŸ™ˆ Good luck with fixing the broken ones!

4 months ago 0 0 0 0
Preview
Development shells with Nix: four quick examples I wanted to use GoCV for one of my projects (to find and extract paper documents from within a larger scan), without permanently having OpenCV on my system. This seemed like a good example use-case to...

New blog post! 🄳

Development shells with Nix: four quick examples

→ Read more: michael.stapelberg.ch/posts/2025-0...

#Nix #NixOS

8 months ago 8 1 0 0

That’s the miekg/dns default, apparently šŸ¤”

9 months ago 0 0 1 0
wireshark screenshot showing how the DNS response for login.tailscale.com is truncated

wireshark screenshot showing how the DNS response for login.tailscale.com is truncated

Yes, I am seeing otherwise: querying 8.8.8.8 via UDP results in a truncated response packet. Probably the reply you’re looking at is already the TCP-retry response.

I emailed you the pcap I show in this screenshot:

9 months ago 0 0 1 0
screenshot of login.tailscale.com resolving to 64 IP addresses

screenshot of login.tailscale.com resolving to 64 IP addresses

@bradfitz.com Maybe you all want to stop serving *all possible IP addresses ever* for login.tailscale.com to make it fit into a UDP response? :)

9 months ago 2 0 1 0
Preview
Migrating my NAS from CoreOS/Flatcar Linux to NixOS In this article, I want to show how to migrate an existing Linux server to NixOS — in my case the CoreOS/Flatcar Linux installation on my Network Attached Storage (NAS) PC. I will show in detail how t...

New blog post published 🄳

Migrating my NAS from CoreOS/Flatcar Linux to #NixOS

In this article, I want to show how to migrate an existing Linux server to NixOS — in my case the CoreOS/Flatcar Linux installation on my Network Attached Storage (NAS) PC.

michael.stapelberg.ch/posts/2025-0...

9 months ago 10 0 1 0
Advertisement
Five dudes on a stage: Michael Pratt, Damien Neil, Michael Stapelberg, and Jonathan Amsterdam from the Go team, with Mat Ryer fielding questions

Five dudes on a stage: Michael Pratt, Damien Neil, Michael Stapelberg, and Jonathan Amsterdam from the Go team, with Mat Ryer fielding questions

Panel with the Go team at @gopherconeu.bsky.social !

#GopherconEU #Gophers #Golang

10 months ago 8 3 0 0
Preview
How I like to install NixOS (declaratively) For one of my network storage PC builds, I was looking for an alternative to Flatcar Container Linux and tried out NixOS again (after an almost 10 year break). There are many ways to install NixOS, an...

New blog post! 🄳

How I like to install NixOS

There are many ways to install NixOS, and in this article I will outline how I like to install NixOS on physical hardware or virtual machines: over the network and fully declaratively.

michael.stapelberg.ch/posts/2025-0...

#linux #nixos

10 months ago 6 1 0 0
Preview
Go Cryptography Security Audit - The Go Programming Language Go's cryptography libraries underwent an audit by Trail of Bits.

"Go Cryptography Security Audit" by Roland Shoemaker — go.dev/blog/tob-crypto-audit

#golang

11 months ago 38 6 0 0
Preview
GitHub - gokrazy/rsync: rsync in Go! implements client and server, which can send or receive files (upload, download, all directions supported) rsync in Go! implements client and server, which can send or receive files (upload, download, all directions supported) - gokrazy/rsync

At this week’s RIPE meeting, Simon Leinen from SWITCH talked about using my github.com/gokrazy/rsync/ memory-safe rsync implementation for diversity, reliability and security!

Find the video recording at ripe90.ripe.net/archives/vid...

#golang

11 months ago 3 0 1 0
Preview
My 2025 high-end Linux PC 🐧 Turns out my previous attempt at this build had a faulty CPU! With the CPU replaced, the machine now is stable and fast! šŸš€ In this article, I’ll go into a lot more detail about the component selection...

New blog post:

My 2025 high-end Linux PC 🐧

michael.stapelberg.ch/posts/2025-0...

Turns out my previous attempt at this build had a faulty CPU! With the CPU replaced, the machine now is stable and fast!

#linux #pc

11 months ago 1 0 0 0

I usually keep the only remaining slot free for putting a GPU in to get a monitor signal, but I suppose I could put a Thunderbolt card in there and temporarily swap it with the GPU when needed.

Do you happen to have any recommendations for known-working Thunderbolt cards with low idle power draw?

11 months ago 1 0 1 0

Unfortunately, my internet router’s mainboard only has a USB 3.2 Gen 2x1 port (10 Gbps), not a USB 3.2 Gen 2x2 port (20 Gbps), otherwise that would have been a really cool way to bring a 20 Gbps connection to a normal laptop, without bulky extra hardware like SFP+ network cards.

11 months ago 1 0 1 0
Preview
Thunderbolt Networking Setup Thunderbolt Networking Setup. GitHub Gist: instantly share code, notes, and snippets.

The obvious follow-up question is: does thunderbolt networking work with Linux, too? The answer seems to be yes: gist.github.com/scyto/67fdc9...

#linux

11 months ago 2 0 1 0
photo of the apple migration tool, showing how a thunderbolt connection can reach 3 GB/s

photo of the apple migration tool, showing how a thunderbolt connection can reach 3 GB/s

photo of the migration tool working at >> 500 MB/s

photo of the migration tool working at >> 500 MB/s

TIL: Apple’s migration tool supports Thunderbolt networking, so by connecting two Macs with a Thunderbolt cable, you can transfer data much much faster than with Gigabit Ethernet: the migration tool measures the connection with 3 GB/s peak speed (actual migration speed: >> 500 MB/s):

11 months ago 2 0 1 0
In praise of grobi for auto-configuring X11 monitors I have recently started using the grobi program by Alexander Neumann again and was delighted to discover that it makes using my fiddly (but wonderful) Dell 32-inch 8K monitor (UP3218K) monitor much mo...

New blog post! šŸŽ‰

In praise of grobi for auto-configuring X11 monitors

michael.stapelberg.ch/posts/2025-0...

#linux #golang

11 months ago 1 0 1 0
Advertisement
synthesizers on stage (Tangerine Dream 2025)

synthesizers on stage (Tangerine Dream 2025)

Bonus pic: stage setup up close

11 months ago 1 0 0 0
Tangerine Dream live in 2025

Tangerine Dream live in 2025

Went to see Tangerine Dream live tonight! Great tracks, visuals were stunning and overall a good time :)

If you haven’t heard of them: they *defined* electronic music in Germany back in the 1970s and have been active ever since. They made the sound track to GTA V! en.wikipedia.org/wiki/Tangeri...

11 months ago 7 0 1 0
Defend the Internet Archive.
Protect the Wayback Machine.
Tell the music labels: Drop the 78s lawsuit.
Sign our open letter on change.org

Defend the Internet Archive. Protect the Wayback Machine. Tell the music labels: Drop the 78s lawsuit. Sign our open letter on change.org

šŸ“¢ The Internet Archive needs your help.

At a time when information is being rewritten or erased online, a $700 million lawsuit from major record labels threatens to destroy the Wayback Machine.

Tell the labels to drop the 78s lawsuit.

šŸ‘‰ Sign our open letter: www.change.org/p/defend-the...

šŸ§µā¬‡ļø

1 year ago 19536 15675 120 457

Tom Payne shares how he fixed a #chezmoi regression in binary size and startup time with the help of Git Bisect and the Go Size Analyzer šŸ’Ŗ

Thomas Gosteli gives an overview about what’s new in Go 1.24 šŸ“£

…and Roman Sharkov teaches us about the complexities of i18n ā˜ļø (3/3)

1 year ago 2 0 0 0
Preview
Go Meetup April 2025 - YouTube Go Meetup April 2025, held at Google Zürich

All the talks from the April 2025 Zürich šŸ‡ØšŸ‡­ Go Meetup can be found in this playlist:

www.youtube.com/playlist?lis...

Denys Vitali is talking about the self-built photo booth at his wedding (implemented with #linux & #golang of course!) šŸ˜

(2/3)

1 year ago 1 0 1 0
Go Meetup April 2025 -  Go Protobuf
Go Meetup April 2025 - Go Protobuf YouTube video by Google TechTalks

My talk at the recent Zürich šŸ‡ØšŸ‡­ Go Meetup about Go Protobuf (specifically, the Opaque API) is now online:

youtu.be/QpLjj3yZ4R8?...

#golang

1 year ago 11 2 1 0
Post image

I just released go-boot v0.1!

A TamaGo unikernel implementing a UEFI Shell and OS loader allowing secure, powerful, yet easy UEFI API interaction.

100% unencumbered Go in your pre-boot environment.

github.com/usbarmory/go...

1 year ago 72 15 2 0
Preview
cmd/compile: slow escape analysis in large package in the typescript compiler Ā· Issue #72815 Ā· golang/go Go version go version go1.24.1 linux/amd64 Output of go env in your module/workspace: AR='ar' CC='gcc' CGO_CFLAGS='-O2 -g' CGO_CPPFLAGS='' CGO_CXXFLAGS='-O2 -g' CGO_ENABLED='1' CGO_FFLAGS='-O2 -g' ...

@thepudds.bsky.social is my hero

So far, up to 15x faster escape analysis for the Go compiler when compiling the TS checker package.

End to end that's an 8x faster compiler of the checker package for us, bringing it down from 50 seconds to 6 seconds.

github.com/golang/go/is...

1 year ago 143 20 2 2
screenshot of my blog post

screenshot of my blog post

New blog post: Intel 9 285K on ASUS Z890: not stable! āš ļø

I had a lot of trouble with this mainboard (?), so I am telling you what combination of hardware to avoid 😲

michael.stapelberg.ch/posts/2025-0...

1 year ago 2 0 1 0
Advertisement
photo of zurich at night, showing trains parked on tracks

photo of zurich at night, showing trains parked on tracks

#zurich SBB #trains at night

(view from Europabrücke)

1 year ago 4 0 0 0

To be clear, this isn’t starting the samba rsync program in the background or anything like that; it’s a 100% Go implementation; memory-safe and fast! Standalone and cross-architecture! šŸš€

#golang

1 year ago 3 0 0 0