15 years, one server, 8GB RAM and 500k users – how Webminal refuses to die

Webminal is a testament to how a minimalist system can serve half a million users for 15 years. Despite the rise of Cloud and Kubernetes, this Linux learning platform remains resilient on a single server with modest specs.
The server
webminal.org runs on a single CentOS Linux box with 8GB RAM. That’s it. No Kubernetes, no microservices, no auto-scaling. One server since 2011. It has survived:
- A datacenter fire in 2021 (we lost 150k user accounts)
- Multiple power outages in the Netherlands
- That one time in 2017 when a Spanish tech blog sent 10,000 users in one day
- My friend Freston’s insistence that Slackware is the only real distro
The idea
The idea was simple. I was sitting at my Windows machine at work, wanting to learn Linux. What if I could open a browser, practice on a real Linux terminal - no “Run” button, no “Execute” button, just a real server- gain the confidence, and then spin my chair to a real Linux machine and actually use it? No fear, no hesitation, because I already know what I’m doing.
What’s new
We just gave the entire site a redesign. Every page, from scratch. Here’s what changed:
- New modern UI - clean, fast, no Bootstrap or jQuery CDN dependencies. Self-hosted fonts, mobile responsive.
- Root Lab - practice real sysadmin skills with full root access. We use User Mode Linux to give you a complete kernel with real block devices. Practice fdisk, LVM, RAID, mkfs, systemctl, crontab, firewalld, SSH keys, awk & sed - things you can’t do on a shared terminal.
- Live command ticker - that scrolling bar on the homepage? It’s real. Powered by eBPF (execsnoop) tracing commands in real-time. 28 million and counting.
The journey
Linode → DigitalOcean → AWS → GCP → OVH → IBM Cloud → Linode
Full circle. Along the way we built: a browser IDE with VS Code/Theia, Docker-over-LXC root environments, Asciinema screencasting, a shared file pool, ttyrec-to-GIF publishing, a custom useradd binary (the default was too slow with 300k+ users), and an OpenVZ-based VM provisioning system.
The co-founder I never saw
I’m from India. Freston is from the Netherlands. We met on LinuxForums.org in 2010. Until 2015, we had never seen each other’s face — not even on Skype. All communication happened over SSH into our server in a screen session.
$ screen -x chat
$ cat > /dev/null
hey, should we add MySQL support?
That’s how an entire platform was built. No Slack, no Zoom, no Jira tickets. Just two guys writing messages in a terminal.
The tech stack nobody recommends
Python: 2.7 (yes, really)
Framework: Flask 0.12.5
Terminal: Shellinabox (abandoned in 2017, still works perfectly)
Root labs: User Mode Linux (a technology from 2001)
Monitoring: eBPF/execsnoop (the only modern thing)
Database: MySQL on a server that survived a fire
Frontend: No React, no Vue, no npm. Just HTML and inline CSS.
Every tech conference talk would tell you this stack is wrong. But it serves 500k users and has been up for 15 years.
Shellinabox vs the world
We tried replacing Shellinabox with the modern WebSocket-based terminal. It lasted a few hours in production before users reported blank screens and Firefox incompatibility. Shellinabox is from 2005. It’s ugly, it’s slow, and it works through every firewall, proxy, and corporate network on earth.
User Mode Linux — the technology nobody uses
Everyone uses Docker. We use User Mode Linux — a full Linux kernel running in userspace, created by Jeff Dike in 2001. Why? Because when a student types fdisk /dev/sdb, they need a real block device. Docker can’t give you that. UML can.
Cost
Webminal has zero revenue. No ads, no tracking, no VC funding. I pay for the server from my savings. I’ve spent more money on this project than on personal or family stuff. 500,000 people have typed their first ls on Webminal. As long as it helps a single student, Webminal will run.
Source: Hacker News











