Does game code written from scratch require to be GPL'd?

I would like to inquire about the licensing implications of creating a game codebase without any shared code from Quake 3, and incorporating it into a separate project that links to the engine. Specifically, I am interested in whether such an implementation would be subject to the requirements of the GPL license.

From what I’ve gathered, posting here for others.

If you are creating a game codebase that does not use any shared code from Quake 3 and linking it to the Quake 3 engine, then the licensing implications will depend on how you are using the Quake 3 engine.

The Quake 3 engine is released under the GPL2 license, which requires that any software that links to it must also be released under the GPL2 license or a compatible license. This means that if you link your game codebase to the Quake 3 engine, your game will also need to be released under the GPL2 license or a compatible license.

However, there are some exceptions to this requirement. One exception is if you are using the Quake 3 engine as a plugin or module, and your game codebase is loaded dynamically at runtime. In this case, your game codebase would not be considered a derivative work of the Quake 3 engine, and therefore would not be subject to the requirements of the GPL2 license.

Another exception is if you are using the Quake 3 engine under a commercial license. id Software, the creators of the Quake 3 engine, offer commercial licenses for the engine, which allow you to use the engine in closed-source commercial projects without releasing your source code under the GPL2 license.

In summary, if you link your game codebase to the Quake 3 engine, and you are not using the engine as a plugin or module, then your game will need to be released under the GPL2 license or a compatible license, unless you have obtained a commercial license for the engine.

In my understanding, under the GPLv2 license the engine, renderer, and mod libraries are considered “one single combined program” even when loaded dynamically as the mod and renderer “plug-in” API is complex (as defined by the GPL FAQ).[1] When distributed together they must be under a GPL compatible license.

I forget if it was last listed on their website as $300,000 or $500,000 but I read they stopped offering commercial licenses. A commercial license for Quake 3 also wouldn’t include the changes made in ioquake3 or other GPL projects.


There has been some legal cases regarding whether an API is copyrightable or not (such as the Java API in Oracle v. Google) but there is no general precedent (in the US at least). It may be legal to reimplement the mod libraries and distribute them separate from the GPL engine. (GPL violation happens at distribution; users using GPL software with non-GPL modules is not an issue.) Though this would require users to combine them which is annoying and in my opinion kind of a poor spirited workaround for “protecting your work” while building off the work of others given under the terms of the GPL, including releasing the source code. (I’m not a lawyer and this is not legal advice.)

However the mod libraries are deeply part of the engine with a messy design that reimplementing it would be very difficult. At the point of actually trying to reimplementing the mod code from scratch to try to avoid the GPL, I think it’s advisable to be completely separate from Quake 3 source code and it’s APIs to avoid copyright infringement.

The server-side entity collision is in the “server” engine and client-side entity collision is in “cgame” mod code because lol why would both be in the engine or the mod code. Now reimplement cgame with collision the same as server without copying code. In my opinion there is kind of no sane way to reimplement the Q3 mod code without copying some parts of the GPL Q3 code, even besides the API definition itself. They pushed code out of the engine into mod libraries. They didn’t design an API to build projects on top of directly.

If you want to make a non-GPL project, there are other engines that are suitable for that such as Godot and Unreal. You could also write new gamelogic and roll your own engine, using SDL for input, bgfx for rendering, and enet—a Quake 3 inspired networking library.

It can also be useful to start with a complete functioning game like Quake 3 even if it means you have to use the GPL and release the source code for your (whole) project.

I worked on GPL Quake 3 projects for 10 years before moving to (try again to) develop my own private engine. I have an incomplete reimplementation of the Quake 3 renderer that I can use with ioquake3 but I don’t use the Q3 API with my engine and I don’t plan to release it (for reasons previously mentioned as I do not want to release it under a GPL compatible license at this time).

2 Likes

Thank you for taking the time to provide your insights and response. I would like to express my admiration for your contributions to the community and your perspective on the idtech3 engine. Your input has given me much to consider, and I appreciate your valuable feedback.

My primary interest lies in developing code for multiplayer games, with a focus on ensuring its security. While I acknowledge that such efforts may not deter all potential hackers, it remains a critical consideration for me.

Regarding my current project, it is a commercial single-player horror game, and I am considering releasing the source code to encourage modding. While I realize that adapting Quake 3 for single-player presents significant challenges, I am drawn to the idTech 3 engine for sentimental reasons, as well as my experience playing Quake 3 on ioQuake3 for several years.

While I have worked with Godot and Unreal engines in the past, I prefer to take a more hands-on approach to coding. Unreal is an impressive engine, but its resource requirements are prohibitive for my needs, and I am not keen on excessive bloat. I am currently working on my own engine, but it will take some time to complete. In the meantime, I am eager to explore ioQuake3’s potential to the fullest and contribute to its development in any way possible.

As my project is still in its early stages, I plan to post updates and screenshots on this forum in the future. Furthermore, I aim to use the revenue generated from my game project to support further ioQuake3 development and fund the creation of modern tools to streamline the pipeline.

2 Likes