A Slightly Condensed Genealogy of DOOM Source Ports
By James 'Quasar' Haley
Lead Programmer, Team Eternity
It has been ten years since DOOM was first unleashed, but only during
the last six of these years have we had access to the source code of this
game we all adore. During those six years, an immense amount of time and work
have been invested in the source by a diverse group of people, each team and
individual with their own goals in mind for DOOM. Whereas some source ports
have strived to retain or even improve compatibility, others have boldly gone
into new territories and have attempted to modernize the game. This article
will take a historical view of these six years of code evolution.
Bernd Kreimeier and the Beanstalk
The story of the DOOM source release actually doesn't start in the
offices or minds of the guys at id Software, but in the efforts of an aspiring
author. Bernd Kreimeier had an idea to publishing a book about the DOOM
engine which would come with the complete source code for the game. Sometime
during 1995, Kreimeier, according to notes he left in the README.book file
which can be found in the Linux DOOM source archive, approached Jay Wilbur
about this idea. He was anticipating a DOOM source release to match that which
had recently occurred for Wolfenstein 3D. Although Bernd did receive cautious
responses from some publishers, apparently certain people within id Software
weren't sold on the idea at all.
Later on, during the last weeks of 1996, Kreimeier was approached by
John Carmack, who wanted to know if he was still interested in the book idea.
Once legal issues were addressed and the source code was sent to him, Bernd
started to work with it. This is where the story of source ports actually
Because the original DOS DOOM source had used the DMX sound library,
id decided that it would either be too legally complicated or would require
too much work to release the DOS source code. Instead, Kreimeier was given
the source of the Linux port of DOOM, which was based on the Final DOOM v1.9
fork of the engine. It had many problems, including very shoddy sound support,
so Kreimeier launched a massive effort to clean up and improve the source code.
As his changelog comments reveal, he actually did not have a purist
mindset at all. He had some big plans for overhauling the engine, including
an ambition to introduce an OpenGL-based renderer. It is quite possible that
some of his changes caused compatibility woes for later source ports, most
notably BOOM, which I will address later.
Unfortunately for Bernd, by 1997 the popularity and marketability of
DOOM had declined past the point where a publisher would consider a book about
its source code -- which would by definition only have a narrow target market,
even two years prior. So, with the book idea abandoned, the sum of Bernd's
efforts were released on December 23, 1997 as the Linux DOOM v1.10 source
archive. This is technically the first source port.
However, it would be interesting to, for a moment, delve even further
into DOOM's past, to consider some interesting facts that have been discovered
about the code genealogy of DOOM during the past few years. Through careful
observation and the discovery of key bugs, including the varying behavior of
Lost Souls when they hit floors, it has been revealed that id's internal source
tree was actually more complicated than was once thought. According to our
best knowledge, it probably looks like this:
Several interesting facts emerge from this. Of course, first is that
Raven's games, Heretic and Hexen, actually derive from a very early version of
the DOOM engine, which is most probably v1.2 -- therefore they still suffer
some bugs that were eliminated later. Most problematic for today's ports,
though, are the facts that Ultimate DOOM, Final DOOM, and DOOM 95 are based on
a totally separate fork of the source code than the DOOM II v1.9 build, and
that Final DOOM contains various changes which can break Ultimate DOOM v1.9
demos. This more complicated history set up some of the troubles experienced
by early ports.
Note that DOOM 95 is a dead end on the source port family tree. This
first port of DOOM to a Win32 operating system was done by a team at Microsoft
that wanted to test out the young DirectX technology on a venerable game. The
port contains a number of strange bugs, as well as a couple of new features
such as cheats. However, the source code is apparently either lost, or locked
up permanently in Microsoft's source code archives, and has never been released.
The Emergence of DosDOOM
The community had been anticipating the release of the DOOM source
with an intensity which almost rivaled that surrounding the original release
of game itself. Chi Hoang immediately started work on an effort to port Linux
DOOM back to DOS. This effort became the port known as DosDOOM, and is the
port to which many of today's existing ports can trace their heritage, EVEN
ports which are now available on Linux.
It was, in fact, the original release of DosDOOM v0.2 which was responsible
for the coining of the term "source port." This term, now accepted as
community lingo for any DOOM engine modification, is actually somewhat inaccurate.
The term "port" generally means to bring an established code base
across to another platform, a process which is necessitated by system- and
compiler-specific code used in DOOM. Some veteran DOOM programmers, including
Lee Killough, who later became part of the BOOM team, actually initially resisted
this misnomer. But, it stuck around and is now a permanent part of our