TinyComputers.io

Sponsors

More Articles

The Doorbell That Killed the Device: Writing OpenBSD's Missing ena(4) Driver

A weeks ago I wrote about getting native OpenBSD/arm64 builds on Graviton by refusing to let OpenBSD touch AWS's network card at all — running it as a QEMU guest behind a virtio shim, because OpenBSD has no driver for Amazon's ENA adapter. This is the other half of that itch: actually writing the driver. It's the story of getting ena(4) to attach, watching the device kill itself a few microseconds after every bring-up, chasing five increasingly exotic theories for why, and finding that the real cause was the most boring thing imaginable — I initialized a queue in the wrong order. Plus the part nobody writes down: what "working" actually means, and exactly how far from "done" that still is.

The OS That Couldn't See the Network: Native OpenBSD/arm64 Builds on AWS Graviton Metal

I wanted native OpenBSD/arm64 binaries for a project that ships them, and assumed the answer was a Graviton instance. It isn't — OpenBSD's arm64 kernel has no driver for AWS's network card, so the instance boots into a void you can never reach. This is the story of getting there anyway: by refusing to let OpenBSD touch the cloud's hardware at all, running it as a KVM guest inside QEMU on a bare-metal Graviton host, and the two device-tree gotchas, the serial-console install I handed to an AI agent, and a last-mile build failure I confidently blamed on the wrong thing.

The Tunnel Was the Easy Part: Site-to-Site WireGuard Between My House and a VPC

I wanted to close a database's public port and reach it from my house as if the VPC were just another room. WireGuard did that in fifteen minutes. The other day and a half went to an IP-address collision I'd created years earlier, a load-balancing router quietly breaking the tunnel's return path, and the slow lesson that a VPN doesn't connect two networks — it makes you confront every assumption each made while pretending the other didn't exist.

Crystal by Reference: Making freeze() Mean It, Then Making It Fast

A programming language promised that frozen values couldn't change — and didn't keep the promise. The story of finding the holes, fixing them, and then collecting the reward: once immutability is actually enforced, you can stop copying immutable data and just share it. A case study in soundness, hidden bugs, and a 116x speedup, with lessons that apply well beyond one small language.

Running DiffusionGemma on AMD Strix Halo and Decade-Old Tesla P40s

Google's experimental DiffusionGemma generates text by denoising 256-token blocks in parallel instead of predicting one token at a time. The official instructions assume an H100. I got it running on an AMD Strix Halo APU and a rack of four 2016-era Tesla P40s using an unmerged llama.cpp pull request — and the integrated AMD GPU beat all four NVIDIA cards combined by a factor of two.

Topics

Reading Series

Written by Alex Jokela Software engineer by trade, tinkerer by nature, single-board computer hoarder by choice. More about me →