Sign in

Michael Stapelberg 🐧🐹😺

@zekjur.bsky.social
384 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
There’s a lot of activity in the #rsync space: tridge rsync has an upcoming release actively in testing, kristaps is merging Apple’s changes into openrsync, which by the way seem to have been done by Klara, inc. (a BSD consultancy), so in total we have 3 (4?) active projects!
000
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
Thanks for the tip, I am aware of that feature, but use different ways for different situations :)
000
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 · 05/12/2025
I have a few more 🙈 Good luck with fixing the broken ones!
000
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 · 21/07/2025
That’s the miekg/dns default, apparently 🤔
100
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 21/07/2025
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:
wireshark screenshot showing how the DNS response for login.tailscale.com is truncated
100
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
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?
110
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 11/05/2025
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.
110
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 11/05/2025
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
gist.github.com
Thunderbolt Networking Setup
Thunderbolt Networking Setup. GitHub Gist: instantly share code, notes, and snippets.
120
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
Bonus pic: stage setup up close
synthesizers on stage (Tangerine Dream 2025)
010
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
1181942215536
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 17/04/2025
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)
020
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 17/04/2025
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)
youtube.com
Go Meetup April 2025 - YouTube
Go Meetup April 2025, held at Google Zürich
110
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
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
030
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
If you want to learn more about the server: michael.stapelberg.ch/posts/2021-0... If you want to learn more about the FTTH connection: michael.stapelberg.ch/posts/2022-0...
michael.stapelberg.ch
25 Gigabit Linux internet router PC build
init7 recently announced that with their FTTH fiber offering Fiber7, they will now sell and connect you with 25 Gbit/s (Fiber7-X2) or 10 Gbit/s (Fiber7-X) fiber optics, if you want more than 1 Gbit/s....
032
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
1. Identify unnecessary work and eliminate it (go test -trace) 2. Move tests into their own packages: michael.stapelberg.ch/posts/2024-1... 3. Ensure Go’s test cache works: michael.stapelberg.ch/posts/2024-1... My tests now run 10x more quickly! See github.com/gokrazy/rsyn... #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...
020
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
RAM, M.2 SSD, CPU and fan backplate done. Rest tomorrow
030
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 15/01/2025
it’s time
250
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 12/01/2025
How did I notice this? A formerly working transfer of mine broke (starting an rsync daemon via SSH). If you google for “macOS 15 sequoia rsync”, you’ll find plenty of other breakages.
020
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 12/01/2025
When you run “rsync”, a wrapper will inspect your command and dispatch to either /usr/libexec/rsync/rsync.samba or rsync.openrsync: github.com/apple-oss-di... If you need one version over the other, select them explicitly — and probably rsync.samba will disappear eventually…
github.com
100
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 · 05/01/2025
Fair question! The idle power consumption on Intel platforms is still lower overall than on AMD platforms. Also, while not benchmarking the best in all workloads, the Intel CPU actually does benchmark very well for the use-cases that matter to me (compilation, browsing, etc.)
000
Michael Stapelberg 🐧🐹😺 @zekjur.bsky.social · 04/01/2025
Oh, I have tried it, and I use an ARM laptop frequently. But for this machine, amd64 is the better choice. There are obvious reasons like the absence of google-chrome for arm64 and more subtle reasons like CPU performance counters and other microarch details being compatible with what I work on
010