The Doom engine uses a technique called binary space partitioning to represent 3D levels in a way that a computer can process quickly. It is written mostly in C. The source code has been released for free under the GNU General Public License. Many Doom fans have made their own modified versions called source ports. Source ports often add new features and fix problems in the original engine. Popular source ports include Boom, PrBoom, PrBoom+, Zdoom, and Chocolate Doom.
The Doom engine represents levels internally using structures called linedefs, sidedefs, sectors, verticies, and things (meaning monsters, items, decorations, etc.). The doom engine reads levels and other data from a file called a WAD.
The Doom engine renders levels entirely on the CPU, not the video card, as most video cards at the time (1993) did not have 3D acceleration. This required very efficient algorithms to make the game work on the slow computers of the time.
The Doom engine has been made available for more types of computers than any other first person shooter engine. It is easy for a programmer to make it work on a new type of computer because it is written in C and it uses very few system resources, allowing it to run on handheld computers and computers without a 3D accelerator.