2026-05-08
Link: https://imtomt.github.io/ymawky/
HN Discussion: 1 points, 0 comments
Every few years, someone reminds the rest of us what computers actually are by stripping away every layer of abstraction we've come to depend on. This post — a personal account of writing an HTTP server entirely in aarch64 assembly — is exactly that kind of reminder, and the self-deprecating title hides what is almost certainly a technically rich walkthrough.
Writing a web server in assembly is a far harder exercise than writing one in C, and dramatically harder than in Go or Rust. The author has to confront problems that higher-level languages quietly handle:
socket, bind, listen, accept, read, write. Every syscall number, every register convention (x0–x7 for arguments, x8 for the syscall number on Linux aarch64), every errno check has to be done by hand.strlen is something you write yourself.clone? Loop synchronously? Each option teaches something different about what an OS gives you for free.Beyond the educational value, aarch64 specifically matters now in a way it didn't five years ago. Apple Silicon, Graviton, Ampere, the Pi 5, every modern Android phone — aarch64 is the architecture most working programmers will deploy to but never read instructions for. x86 assembly has decades of tutorials; aarch64 has comparatively few, and fewer still that build something tangible end-to-end.
The genre of "absurdly low-level reimplementation" — qmail in assembly, kernels in Forth, databases on bare metal — produces some of the best technical writing on the web because the author is forced to explain everything. There are no library functions to gloss over. If it works, you understand it; if it doesn't, you debug it in a register dump.
One point and zero comments is a crime for a post like this. It belongs in the same lineage as "A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux" — the kind of thing HN used to celebrate before the front page filled with funding announcements.
