Doom & Game Preservation

Last year I decided to read Doom's source code to learn how to organize big C projects. Even though my exploration of doom's source code was short I learned a lot from that experience and also made me realize some things that I never thought about Video Game preservation.

Introduction to Doom's source

Though Before I continue with doom I should give some backgroud info about game preservation:

Game preservation

As you all know videogames have existed for long and, since the seventies when consoles were introduced to the general public, year after year new people get into the Videogames hobby. As you may also know every five-ish years new consoles arrive to the market making the old ones, strictly technicaly speaking, obsolete. In contrast, games do not get old; mainly because they are creative and cultural assets and the values, ideas, feelings... they convey usually compell enough people to try to play them again or even for the first time. But when systems architectures change, older games do not get recompiled and they get trapped in their systems. That made a lot of people start to try to preserve the medium.

Game preservation methods could be classified based on the availability they provide, the technical method of preservation, and so on. But these are the main methods people and, companies use to preserve games:

Doom is really famous for having gazillions of ports; some really stupid like ports for digital cameras, printers or cars, and some really serious like the pc ports, game console ports, smartphone ports, etc... This makes Playable literally anywhere, in fact if the target architecture is 32 bit or higher it will run doom. Being FOSS (actually trully FOSS because it's GPL licensed) makes it one of, if not, the most available games of the medium.

That makes doom an interesting game in terms of game preservation. In the 90's there were a lot of doom ports to consoles (SNES, Jaguar, 32X...) and there is a point to be made that, because they are closed source, they still need to be preserved via the other methods. But to me it feels redundant because anyone with sufficient knowledge of C and those consoles could port again doom for those systems, and even that feels redundant. See because doom is open source the doom experience is literally the same in every system (except maybe for the input method) so why port doom to those outdated, scarce systems when you could play doom exactly as it released in 1991 in any modern system?

The point I'm triying to make is that because Doom is FOSS it stops being tied to any particular system, even in the 90's Doom wasn't strictly tied to DOS but even less so today, and that is important because the essence of the game is preserved vervatim from system to system.

But, why is important that a game is not tied to any particular system? Firstly it makes preserbation easier, only one portable source code has to be stored to have the game fully functional anywhere, so hardware must not be preserved (although I also must admit that hardware preservation is a completely different subject and preserving old consoles, controllers, CRTs... has it's own value). Secondly It makes it tweakeable so older input methods, audio systems and video systems can be replaced (Optionally they could be improved or be as close to the originals). Finally resource usage can be optimized.

That last point is important. Anyone could argue that emulators achieve the same goal that making a game open source does, but they fail in one detail, resource usage. If want to use an emulator you need a system that is more powerfull than the original to make the software usable. Doom does not have this problem since it needs no overhead to be run because it does not depend on any emulated system to run. That's why playing a port like Chocolate Doom (A port famous for being the closest to the original) is preferable to running Doom on DosBox because you reduce overhead.

Now I'll use a real example so you can see the benefits of making a game FOSS (or open source in this case). Some years ago Super Mario 64 got decompiled to C and it's source was uploaded on github. This made the game portable to any system that had a C compiler (almost every sistem in existence) and started to have a lot of ports to different consoles. This made devices that could not emulate the N64 be able to play the game with high fidelity (no graphical glitches, no audio stuttering/distortion...) And thus this has become, at least in my opinion, the preferable way to play the game.

To summarize all FOSS games are the best preserved games of all.

More advantages than just preservation

Of course having a game open source not only means playing it anywhere but also beeing able to learn to code from it's source code and or use it's engine to make brand new games. Because what is beeing shared is not only a piece of art, but also a pice of technology that could be used by anyone.

Also modding (In case of old games romhacking) would be a lot easier because you wouln't have to write mods in machine code. You could use higher level languages to make the job easier, and even create custom tools for asset creation faster.

Why Doom is not the norm

Doom was made open source because John Carmack was a fan of the hacker culture and he felt he needed to share their code with the world. But most companies won't do this because they can license code under the copyright law thus preventing competitors to arise and make even more money. It is as simple as that really. And in fact because in modern consoles old games are sold to be emulated 'Legally' They won't release any code, nor for the games nor for the emulators. So It's clear that from the industry there is no intention of preserving games in the Doom style, because it makes less money. And if we also add that a lot of old code was lost because the companies didn't want to waste resources to archive the code, we can perfectly see why games won't turn FOSS any time soon.

The only hope we have is decompiling/disassembling old games to try to preserve them that way. SM64 is a good example but there are also tons of NES games disassembled on github that with some effort could be ported to, for example, C. But again the medium in general is not very fond of open sourcing stuff so this will have to rely on hobbists to be made a reality.

Original Super Mario Bros. disassembly

Before ending the post I want to clarify one thing. You could get the impression that I don't want developer to make money from their games. That is not true, but I think that art should be freely enjoyed by anyone, and In the case of old games there is little to no money to be made so these games should be made open source. In fact you could follow Doom's model verbatim and sell the assets sepparate from the engine and still make money. In fact I bought Doom in steam years ago so there isn't piracy involved in this at all. To make it clear, all the points made in this post are to preserve games and preserve games only, Although I might make a post about piracy in the future.

TLDR; making games FOSS gives a better alternative for game preservation but the industry will probably never seek this path.