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.