Sign in

Michael Stapelberg 🐧🐹😺

@zekjur.bsky.social
380 followers 31 following 60 posts

Mensch mit starkem Datendrang • Artisanal Open Source • latenz-unverträglich • ::) • he/him

PostsRepliesMedia
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 06/09/2026
New blog post: Debian Code Search: Fast TurboPFor with Go SIMD 🥳 This August, I deleted the last cgo dependency in DCS, thanks to Go’s recently introduced SIMD support: michael.stapelberg.ch/posts/2026-0... #golang #debian #simd
michael.stapelberg.ch
Debian Code Search: Fast TurboPFor with Go SIMD
This August, I accomplished what I wanted for many years: I deleted the last cgo dependency in Debian Code Search! This was made possible by Go’s recently introduced SIMD support, because now we can i...
051
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 09/08/2026
New blog post: Tracking down a Zsh history data loss bug 🐞 For many years, I sometimes discovered that commands I was sure I had run were no longer present in my Z shell history file (~/.zsh_history). In this article, I will show you how I tracked down the bug michael.stapelberg.ch/posts/2026-0...
screenshot of my blog post: Tracking down a Zsh history data loss bug 🐞
1181
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 28/06/2026
I just released github.com/gokrazy/rsync in version v0.3.4, which contains a couple of bug fixes 🥳 In case you’re unfamiliar: this library (and program) implements rsync client and server, which can send or receive files (upload, download, all directions supported, 100% #golang)
github.com
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
110
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 24/05/2026
New blog post 🥳 How my minimal, memory-safe #golang rsync steers clear of vulnerabilities → michael.stapelberg.ch/posts/2026-0...
michael.stapelberg.ch
How my minimal, memory-safe Go rsync steers clear of vulnerabilities
Back in January 2025, multiple different security researchers published a total of 6 security vulnerabilities in rsync, some of which allow arbitrary code execution and file leaks, so naturally I was ...
0173
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 05/04/2026
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
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:
[…]
3113
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 04/01/2026
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
michael.stapelberg.ch
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...
3140
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 27/07/2025
New blog post! 🥳 Development shells with Nix: four quick examples → Read more: michael.stapelberg.ch/posts/2025-0... #Nix #NixOS
michael.stapelberg.ch
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...
081
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 20/07/2025
@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? :)
screenshot of login.tailscale.com resolving to 64 IP addresses
120
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 13/07/2025
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...
michael.stapelberg.ch
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...
1100
Reposted by Michael Stapelberg 🐧🐹😺
Brittany Ellich @brittanyellich.com · 17/06/2025
Panel with the Go team at @gopherconeu.bsky.social ! #GopherconEU #Gophers #Golang
Five dudes on a stage: Michael Pratt, Damien Neil, Michael Stapelberg, and Jonathan Amsterdam from the Go team, with Mat Ryer fielding questions
083
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 01/06/2025
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
michael.stapelberg.ch
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...
061
Reposted by Michael Stapelberg 🐧🐹😺
Go @golang.org · 19/05/2025
"Go Cryptography Security Audit" by Roland Shoemaker — go.dev/blog/tob-crypto-audit #golang
go.dev
Go Cryptography Security Audit - The Go Programming Language
Go's cryptography libraries underwent an audit by Trail of Bits.
0376
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 18/05/2025
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
github.com
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
130
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 15/05/2025
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
michael.stapelberg.ch
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...
010
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 11/05/2025
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):
photo of the apple migration tool, showing how a thunderbolt connection can reach 3 GB/sphoto of the migration tool working at >> 500 MB/s
120
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 10/05/2025
New blog post! 🎉 In praise of grobi for auto-configuring X11 monitors michael.stapelberg.ch/posts/2025-0... #linux #golang
michael.stapelberg.ch
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...
110
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 26/04/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...
Tangerine Dream live in 2025
170
Reposted by Michael Stapelberg 🐧🐹😺
Internet Archive @archive.org · 17/04/2025
📢 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... 🧵⬇️
Defend the Internet Archive.
Protect the Wayback Machine.
Tell the music labels: Drop the 78s lawsuit.
Sign our open letter on change.org
1181943215544
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 17/04/2025
My talk at the recent Zürich 🇨🇭 Go Meetup about Go Protobuf (specifically, the Opaque API) is now online: youtu.be/QpLjj3yZ4R8?... #golang
youtu.be
Go Meetup April 2025 - Go Protobuf
YouTube video by Google TechTalks
1112
Reposted by Michael Stapelberg 🐧🐹😺
Andrea Barisani @andreabarisani.bsky.social · 19/03/2025
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...
27215
Reposted by Michael Stapelberg 🐧🐹😺
Jake Bailey @jakebailey.dev · 18/03/2025
@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...
github.com
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' ...
214119
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 19/03/2025
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...
screenshot of my blog post
120
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 14/03/2025
#zurich SBB #trains at night (view from Europabrücke)
photo of zurich at night, showing trains parked on tracks
040
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 11/03/2025
Did you know? My github.com/gokrazy/rsync module can be used as a library — both its client and its server accept the io.ReadWriter interface type :) To show that this works and to show the flexibility this enables, I put together an rsync-over-gRPC demo: github.com/stapelberg/r... #golang
github.com
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
160
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 04/03/2025
My website/blog michael.stapelberg.ch is now self-hosted from Zürich! 🇨🇭 I’m now using the Caddy web server on a machine running my router7.org (which in turn is built on my gokrazy.org) to serve the static files (previously: GitHub pages + CloudFlare) More services to follow! #golang #selfhosting
michael.stapelberg.ch
About
Michael Stapelberg’s private website, containing articles about computers and programming, mostly focused on Linux.
171
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 27/02/2025
New blog post! 🎉 Tips to debug hanging Go programs michael.stapelberg.ch/posts/2025-0... #golang
screenshot of the blog postscreenshot of panicparse
0237
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 16/02/2025
Last November, I blogged about using ephemeral PostgreSQL DBs for Go testing. It was worth digging deep into the topic, because the insights transfers well. For example, I recently optimized the gokrazy/rsync tests like so: (1/n) #golang
michael.stapelberg.ch
Testing with Go and PostgreSQL: ephemeral DBs
Let’s say you created a Go program that stores data in PostgreSQL — you installed PostgreSQL, wrote the Go code, and everything works; great! But after writing a test for your code, you wonder: how do...
130
Reposted by Michael Stapelberg 🐧🐹😺
Carlos Amédée @amedee.dev · 03/02/2025
Shoutout to @zekjur.bsky.social for showing me the way. Magit really is great.
021
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 23/01/2025
I just watched this video of Byran building a laptop from scratch and it’s truly an internet moment of the best kind 🤯 www.youtube.com/watch?v=fks3...
youtube.com
How I Made A Laptop From Scratch - anyon_e
YouTube video by Byran
010
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 15/01/2025
it’s time
250
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 12/01/2025
PSA: With macOS 15 Sequoia (released in September 2024), Apple has started shipping openrsync (created by Kristaps Dzonsons, from OpenBSD) as an alternative to the original rsync (“tridge”, from the Samba project). 🧵
github.com
140
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 04/01/2025
Any last tips or recommendations before I click order on this PC build? This will be the replacement for michael.stapelberg.ch/posts/2022-0..., i.e. mostly doing compilation, browsing and similar. Goals are: silent, low idle power, fast. (I’ll keep using my current nVidia GPU for now.) #linux #pc
180
Reposted by Michael Stapelberg 🐧🐹😺
Michael Lynch @mtlynch.io · 02/01/2025
I often see developers make mistakes in their tutorials that trip up readers, so I thought a lot about what makes some tutorials effective and what makes others frustrating.
refactoringenglish.com
Rules for Writing Software Tutorials
It's easier than you think to write an exceptional software tutorial. You can stand out in a sea of mediocre guides by following a few simple rules.
75821
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 31/12/2024
With commit github.com/gokrazy/brea..., you can use #emacs TRAMP with gokrazy.org devices 🎉 Maybe this makes other remote access solutions work, too, but I haven’t tried. Reports welcome!
github.com
try to install busybox into a tmpfs /bin (with fallback) · gokrazy/breakglass@c9528b4
This code path requires gokrazy/tools at this commit or newer: https://github.com/gokrazy/tools/commit/37e2f95c5cfc58554405cc615c5da8e4899b071a And gokrazy/serial-breakglass at this commit or newe...
120
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 19/12/2024
Did an analysis of the various go-mail packages in the #golang ecosystem. Instead of finding “the best fork”, it seems like I’ll need to switch to wneessen’s alternative (not a fork). Did I miss any significant development here?
screenshot of my notes on go-mail packages
150
Reposted by Michael Stapelberg 🐧🐹😺
Go @golang.org · 16/12/2024
"Go Protobuf: The new Opaque API" by Michael Stapelberg (@zekjur.bsky.social) — go.dev/blog/protobu...
go.dev
Go Protobuf: The new Opaque API - The Go Programming Language
We are adding a new generated code API to Go Protobuf.
19215
Reposted by Michael Stapelberg 🐧🐹😺
Filippo Valsorda @filippo.abyssdomain.expert · 16/12/2024
Did you know you that you can run Go 1.24rc1 (or any other version) by just setting an environment variable? $ GOTOOLCHAIN=go1.24rc1 go version go: downloading go1.24rc1 (darwin/arm64) go version go1.24rc1 darwin/arm64 This is supported since Go 1.21 (August 2023). go.dev/doc/toolchain
611828
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 16/12/2024
The Go Blog Go Protobuf: The new Opaque API Michael Stapelberg 16 December 2024 go.dev/blog/protobu... #golang
go.dev
Go Protobuf: The new Opaque API - The Go Programming Language
We are adding a new generated code API to Go Protobuf.
02611
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 13/12/2024
Nicely done source code music track :D www.youtube.com/watch?v=yup8...
youtube.com
NANOWAR OF STEEL - HelloWorld.java (Source Code Video) | Napalm Records
YouTube video by Napalm Records
000
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 10/12/2024
New blog post: Get a solar panel for your balcony now ☀️ A year ago, I got a solar panel for my balcony — an easy way to vote with your wallet to convert more of the world’s energy usage to solar power. michael.stapelberg.ch/posts/2024-1...
michael.stapelberg.ch
Get a solar panel for your balcony now ☀️
A year ago, I got a solar panel for my balcony — an easy way to vote with your wallet to convert more of the world’s energy usage to solar power. That was a great decision and I would recommend everyo...
070
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 01/12/2024
Found this article about a Linux gaming PC and I think this is quite a remarkable development: www.golem.de/news/aus-dem...
Screenshot of an article about a Linux gaming PC
020
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 19/11/2024
New blog post! 🎉 Testing with Go and PostgreSQL: ephemeral DBs Let’s say you created a #golang program that needs a DB — you installed PostgreSQL, wrote the Go code, and everything works; great! But how do you best provide PostgreSQL to your automated tests? michael.stapelberg.ch/posts/2024-1...
screenshot of the first page of the blog post
1123
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 15/11/2024
Here’s a great demo about a (game) dev env: www.youtube.com/watch?v=72y2... It starts with updating assets with live reload and it only gets better from here. I strongly recommend you watch this, and then compare your dev env! Maybe it will give you some inspiration/motivation!
youtube.com
Tomorrow Corporation Tech Demo
YouTube video by retrogameinternals
020
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 15/11/2024
New blog post! Debug Go core dumps with delve: export byte slices Not all bugs can easily be reproduced. Sometimes, all you have is a core dump. I had trouble figuring out how to save byte slice contents from memory into a file for further analysis with delve… michael.stapelberg.ch/posts/2024-1...
An exhibit from the MIT Museum (Core Memory Unit, Bank C (from Project Whirlwind, 1953-1959)), a core memory unit with 4 KB of capacity.
062
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 15/11/2024
Blog post: A Signal run a day keeps the un-link away When I get a message (on my phone), I want to reply to it only to discover that Signal has un-linked my laptop because of inactivity and won’t sync history, making it impossible to quote-reply to messages… michael.stapelberg.ch/posts/2024-0...
screenshot of an automated Signal run
020