A Review of MUD Tech
Long, long ago I used to play btmux and that got me curious enough to learn the software and even submit a few patches. In many ways, there is an alternate universe where the most popular application-level protocol for the Internet is derived from MUDs rather than HTTP.
I find some features of these servers interesting:
- Ordinary non-privileged users can write programs
- Transparent persistence
- Real-time I/O, not the HTTP (and 3270) form submission semantics (although this changed for the Web with AJAX)
- It's somewhat after MUDs' heyday, but there are simple protocols layered on text chat for more structured and domain-specific tasks, e.g. MCP & MSDP
Here I give some opinions on code I've looked into. Note that there are many more systems I never learned. However, consider this a hint as to where to start; it's best to avoid going down one of the many, many dead ends that have been written over the nearly 40 years of MUD development.
BTMux
Servers
I've gone through a sequence of reading & learning from the source code of several different projects. After all this my current favourite is ToastCore/ToastStunt. Rather a fundamental redesign, this is an incremental addition to LambdaMOO, which is probably the most popular "serious" MUD server. ToastStunt is popular (for a MUD) and well-maintained. You can log into ChatMUD to see a live instance.
ToastCore/ToastStunt
ChatMUD
Clients
My current favourite client is rmoo. It implements MCP local editing which is very nice for editing MOO code. Also extensible in ELisp, but I haven't got that far yet.
rmoo
Extended Protocols
Most MUDs use the telnet protocol, i.e. IAC WILL/WONT, state machines, etc. I looked into some extensions layered on top of this:
- MCP was the first. It is associated with MOO-family servers. It even has some useful extensions for "serious" things.
- Followed by MSDP. This seems to be more associated with combat MUD games. It typically communicates HP/MP/gold. However, of more interest is that an Intermud network was implemented on top of it.
MCP
MSDP
Arachnos, Intermud over MSDP
Historical Notes
I've been playing with software like this for some time. Here are notes on alternatives that I rejected. This section can be skipped.
Servers
- TinyMUX. This is a rock-solid piece of software that implements the "MUSHCode" language, which is idiosyncratic but interesting as a (very) domain-specific language.
- ColdCore/genesis. This was a project to engineer things properly, a nice C-like language with extensions for security, compiler, bytecode interpreter. Not as popular as it deserved to be though, and I can't see that it's used any more.
TinyMUX
ColdCore/genesis
Clients
- TinyFugue. This used to be very popular and there are interesting client-side macros for it (e.g. MCP). But it seems to be unmaintained nowadays.
- TinTin++. This is probably a better choice nowadays for a terminal-mode client. It also has a full scripting language in which, e.g. MSDP was implemented
Then I started trying to use Emacs more, which led me to
- mu.el. This is scriptable in ELisp, but I never got far with it before switching to rmoo (see above).
TinTin++
MSDP for TinTin++
mu.el
Back to my gemlog