Tombstone
ZEN_NET
Nov 1999 – Dec 1999 · age 17
What it was
Jeff's first client and server system: a small online games lobby built in MFC over two milestone deadlines in late 1999. The server listened for connections, checked logins, and routed a one-letter text protocol: subscribe to a channel, echo to it, leave, ask who is here, tell a user, allocate a new channel. Channels were two characters in a two-level list. The client loaded each game as a DLL exporting eight fixed functions, copying the DLL per session so the same game could be opened twice. A custom Visual C++ wizard stamped out new game plugins from a template. Two games shipped as plugins: chat, and a full two-player chess board with drag-and-drop pieces, legal-move checks and checkmate detection. On December 3, 1999, networked chess worked end to end, and all twelve projects built clean.
Wins, for the age
- At seventeen, this primate built a server, a client, a plugin SDK, a plugin generator and two networked games, in about two weeks.
- Arrived on their own at the shape Winamp and Netscape plugin APIs had already shown: games behind a fixed export table, loaded at runtime, so the client never needed to know what a game was.
- Designed a protocol you could type by hand with telnet, the same instinct IRC had followed.
- Wrote chess check detection by reusing the move validator: is there any enemy piece that could move onto the king?
What it taught
- A system is mostly the boring glue between parts: who is connected, to what, and what happens when they leave.
- Two hard deadlines produce more than six free months. The milestones are why this finished at all.
- The rules of chess are easier to write than to verify. It shipped without castling, en passant or promotion, and Jeff did not notice for years.
- Security defaults do not arrive by accident. Passwords were stored and compared as plaintext, and the login retry limit counted down without ever being checked.
Genealogy
Ancestors: none on record. The networking line starts here. Descendants: Znetfs: client, server and protocol, scaled to swarming file transfer. Zen Risk: the next game, a board game again. Async Serialization: one channel abstraction shared by client and server. Play Workspace: a game per document, a small frame protocol, same lobby dream.
Epitaph
Here lies ZEN_NET, a games network for two, where every game was a DLL, every message fit on one line, and chess finally worked on the night of a deadline.