gasm: 1.5 KB Gopher server that runs on 24 KB of RAM
_
__ _ __ _ ___ _ __ (_)
/ _` | / _` | (_-< | ' \ _
\__, | \__,_| /__/ |_|_|_| (_)
|___/
_ ___
/ | | __|
| | _ |__ \
|_| (_) |___/
_ __ ___
| |/ / | _ )
| ' < | _ \
|_|\_\ |___/
___ _
/ __| ___ _ __ | |_ ___ _ _
| (_ | / _ \ | '_ \ | ' \ / -_) | '_|
\___| \___/ | .__/ |_||_| \___| |_|
|_|
___ ___ _ _ __ __ ___ _ _
(_-< / -_) | '_| \ V / / -_) | '_|
/__/ \___| |_| \_/ \___| |_|
_ _ _
| |_ | |_ __ _ | |_
| _| | ' \ / _` | | _|
\__| |_||_| \__,_| \__|
_ _ _ _ _ _ ___
| '_| | || | | ' \ (_-<
|_| \_,_| |_||_| /__/
___ _ _
/ _ \ | ' \
\___/ |_||_|
___ _ _
|_ ) | | |
/ / |_ _|
/___| |_|
_ __ ___
| |/ / | _ )
| ' < | _ \
|_|\_\ |___/
__
___ / _|
/ _ \ | _|
\___/ |_|
___ _ __ __
| _ \ /_\ | \/ |
| / / _ \ | |\/| |
|_|_\ /_/ \_\ |_| |_|
╔─*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*─╗
║1 ........................................ 1║
║2* ........................................ *2║
║3 ........................................ 3║
║1 ...........Posted: 2026-01-15........... 1║
║2* ......Tags: linux gopher my_warez ...... *2║
║3 ........................................ 3║
║1 ........................................ 1║
╚────────────────────────────────────────────────╝
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.
(IMG) A whacky photo of me showing the file size of the gasm binary
(IMG) Whacky photo of gasm's binary size
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)[1]
## Footnotes
(HTM) [1]: Source Code and Download (GitHub): https://github.com/someodd/gasm