⚠️ This post is archived from my phlog in Gopherspace. Please read my post on the Gopher Protocol to get started!
I wanted to find the absolute floor.
We know that abstractions cost resources, but I wanted to quantify exactly
how much. So, I wrote a fully functional Gopher server in pure i386
assembly with zero dependencies—no libc, no runtime, just raw int 0x80
syscalls.
The result is GASM.
By manually managing the ELF headers, disabling page alignment, and
using the legacy Linux socketcall interface, the final efficiency
metrics are distinct:
- Binary Size: 1,512 bytes (static, stripped)
- RAM Usage: 24 KB (Verified RSS via pmap)
- Deps: None.
It serves Directory listings (Type 1), Text (Type 0), and Binary (Type 9). It implements bounds checking and traversal blocking manually, without the overhead of a standard library.
Because it targets the original i386 instruction set, it runs natively on everything from a 1985 386DX to a modern Ryzen 9.
It is not a replacement for Nginx. It is a study in how much computer you actually need to serve a file.
The source is available for audit.
Source Code and Download (GitHub)
Original content in gopherspace: gopher://gopher.someodd.zip:70/0/phlog/gasm-tiny-gopher-runs-on-trash.gopher.txt