Several years ago, I needed to learn how to do socket programming on UNIX. So, after a bit of reading, I decided I should write a simple server and client pair to teach myself. Being involved in my AmigaMUD project at the time, I concluded that the obvious choice was a simple MUD server and client. The client vanished (a UNIX telnet client works fine), but the server ended up being a cute little MUD server. I was amused by the small amount of code needed to do the basics of the server (as compared to a fully grown server). Since I'm also a programming-language geek, I then decided to add a programming language to my little server. Since I had never before done an interpreter that *didn't* produce some kind of internal data structure (e.g. parse trees) for the program being parsed, I decided to try that. It worked, but I definitely prefer parse trees! After that, I then needed to add some simple database code so that the server could read a world description on startup, and write out the modified one on shutdown.
With all of that done, I had a cute little MUD server that could actually be used for a semi-real MUD. It's not very efficient, and it doesn't accept very complicated commands, but it does allow online building and free online programming (although maybe not very conveniently!). All of that, and its still only about 3500 lines of ANSI C code. Having done that, I ended up calling it ToyMUD. Over time, I got it to compile and run on a variety of UNIX and non-UNIX systems.
Online here I have the README file, the full documentation (36K), and a compressed tar file (39K) of the whole system.
A couple of years ago, the innards of ToyMUD were hacked to fit in the DevMUD project. Archives for DevMUD are hosted by Jon Leonard on his machine.