Dworkin's Game Driver
DGD, Dworkin's Game Driver (at one time called Dworkin's Generic Driver), is an LPMud server written by Felix A. "Dworkin" Croes. DGD pioneered important technical innovations in MUDs, particularly disk-based object storage, full world persistence, separation of concerns between driver and mudlib, runtime morphism, automatic garbage collection, lightweight objects and LPC-to-C compilation.
DGD's first public release was on August 12, 1993.
The original primary development MUD for DGD was The Pattern, referencing The Chronicles of Amber (like Croes's pseudonym Dworkin, which refers to Dworkin Barimen). It was taken offline sometime before February 1997.
During the 1994-1995 academic year, DGD was a core element in a master's thesis at the Katholieke Universiteit Leuven. As part of the thesis work, a deterministic mechanism for handling arrays and mappings passed between objects was devised.
In December 1995, exclusive rights to commercial use of DGD were acquired by BeeHive Internet Technologies, Inc., which sold an exclusive license to ichat in January 1996. ichat used DGD to establish the first Yahoo! chatrooms. ichat then became Acuity Corporation, which sold a sublicense to Skotos in February 1999. Skotos used DGD to create a series of online games. Acuity Corporation was later acquired by Quintus Corporation. In March 2001, the exclusive license was terminated due to the bankruptcy of that company.
In 2002, DGD was used for academic research into persistent distributed object systems.
In August 2005, DGD's commercial use rights were assigned back to Dworkin B.V., Croes's company.
Unlike other LPMud drivers, DGD has many powerful features specific to it that make it stand out as a game driver. These feature include persistence, Dynamic Recompilation, and statedumps, which allows a fully persistent system—no reboots and no reset system. A never-ending game world could be created.
DGD supports persistence as a driver feature in ways that many languages simply can't. Using Dynamic Recompilation, coders never have to save objects to disk, reboot or recompile the logic for the objects, and then reload the objects from disk. Because DGD is also disk-based it can be persistent by swapping much of its unused memory to disk. Persistence is powerful and allows for behavior not experienced in most games. Some possibilities include... Not destroying objects left on the ground Not ever destroying NPC's nor randomly creating them en masse with zone resets State is not lost on reboot, except for the connection state of the player.
Statedumps are dumps of the state, or memory, to the hard disk, similar to how a computer dumps its memory to hard disk when it goes into hibernation. The driver can start from a statedump and have the game be exactly in the same state it was before reboot, minus network connections. This is why it is possible to reboot and easily maintain persistence of the way things were before the reboot. It also allows for a concept called virtual uptime, where while the game is actually down but when it comes back up it is still the same as it was before. This virtual uptime means the game has never reset itself in any way and all changes are persistent between real downtime.
The dynamic recompilation feature allows one to recompile the logic of a master object during runtime, automatically upgrading all instances to the new version. Inherited objects cannot be recompiled in this way, they must instead be destructed and then compiled again. This will leave inheriting objects referring to the old version of the object, so they must in their turn either be recompiled, if possible, or destructed and compiled again in order to refer to the new version. Because of the restriction against recompiling inherited objects, it makes sense to separate inheritable objects from others, which is also done by the DGD Kernel Library. The recompilation mechanism is essential for persistent but evolving systems. Combined with statedumps, a reboot would only be necessary to update the driver and would probably be a transparent change to admins and users alike.
Disk-based Transparent Swapping
The DGD driver transparently swaps all the objects in memory to disk based on parameters that can be tuned by the admin of the game. The disk-based nature of the game allows one to never have to write code to load or save objects to and from the disk by oneself. The most commonly used objects are generally kept in memory to negate any non-trivial swapping cost and things are put to disk automatically based on when they were last accessed. This is also a powerful feature because it doesn't make the coders of the game responsible for what is in memory, which can dominate a lot of development time for any game programmer.
Mudlibs available for DGD include:
- Phantasmal can be found at phantasmal.sourceforge.net
- Skotos 2.0 created by Skotos Tech
- Shah, Rawn; Romine, James (1995). Playing MUDs on the Internet. John Wiley & Sons, Inc. pp. 164–165. ISBN 0-471-11633-5.
DGD, created by Dworkin a.k.a. Felix Croes, is a complete rewrite of the LPmud game. It differs from the original in that it is mostly a disk-based game. This means that the objects on the Mud are mostly stored on disk rather than kept in memory during play of the game. This method creates a Mud that does not use much memory, is somewhat fast, but requires a large amount of disk space. This is also one of the few Muds that can be used commercially, given the permission of its creator.
- Busey, Andrew (1995). Secrets of the MUD Wizards. SAMS Publishing. p. 216. ISBN 0-672-30723-5.
Another type of server, called DGD (Dworkin's Game Driver), on the surface looks to be similar to LPMUD and even incorporates the LPC language, but is not derived from the LPMUD server. DGD is a new server that is designed to be LPMUD-compatible but adds a new level of programming flexibility—in fact, MirrorMOO, running on a DGD server, emulates the MOO server.
- Reese, George (1996-03-11). "LPMud Timeline". Retrieved 2010-04-14.
August 12, 1993 ¶ A single-user alpha release of the first LPC server not derived from LPMud, DGD 1.0.a3 (Dworkin's Game Driver, later renamed Dworkin's Generic Driver, and later reverted back to Dworkin's Game Driver), is released for testing. DGD isolated essential LPC functionality, leaving all, if any, game functionality completely up to the mudlib. [...] September 16, 1993 ¶ DGD is released in multi-player form as DGD 1.0.a4. This version introduces support for compiling LPC code to C, then linking C objects in with the driver. This makes DGD the first driver to support such functionality.
- Croes, Felix (2010-04-02). "Dworkin's Game Driver - Open Source Release". SourceForge. Retrieved 2010-04-18.
- Reese, George (1996-03-11). "LPMud Timeline". Retrieved 2010-04-14.
December 1993 ¶ PaderMUD re-opens after having converted from CD to DGD, making PaderMUD the first production MUD using DGD.
- Busey, Andrew (1995). Secrets of the MUD Wizards. SAMS Publishing. p. 456. ISBN 0-672-30723-5.
Pattern, The [...] This is the home MUD for Dworkin's Game Driver (DGD). It is the best place to go to ask DGD-related questions or to learn more about DGD.
- Johnston, Craig (1997-01-31). "DGD, archives from the pattern". rec.games.mud.lp. Retrieved 2010-04-27.
- Van Hees, Kris (1995-07-01). Experimental programming in an object oriented system (PDF) (Lic. Informatics thesis). Katholieke Universiteit Leuven. Retrieved 2010-11-05.
This thesis describes modifications made to Dworkin's Game Driver (DGD) to provide non-clonable objects (entities) and deterministic pointer type conversion from reference to copy at execution thread boundaries.
- "Skotos Tech Acquires DGD License" (Press release). Skotos. 1999-02-05. Retrieved 2010-04-18.
- Hansen, Geir Harald (2002-07-31). A Distributed Persistent World Server using Dworkin's Game Driver (PDF) (Cand. Scient. thesis). University of Oslo. Retrieved 2010-04-14.
This thesis describes the design and implementation of a persistent distributed object oriented system and programming environment. It is built on an existing non-distributed server, Dworkin's Game Driver (DGD).
- Croes, Felix (2010-02-23). "DGD Home Page". Retrieved 2010-04-14.
DGD version 1.4 was released as Open Source on 3 February 2010.