There's a GPL sound library I'd like to provide as an option in a game which will be released under MIT license. My plan is to create a generic, abstract audio interface in the engine, which can dynamically link to any implementation of the user's choice.

One implementation could use an MIT-compatible audio backend, while another would use a backend based on the aforementioned GPL'd audio code.

These implementations would technically be separate projects, and are not included with the source code of, nor are a dependency of, the core software. My concern is about distribution with the binary.

Would I be allowed to distribute (source + dll) the audio interface implementation - that uses the GPL'd code as a backend - with my software binary distribution, and make it the default audio option?

1 Answer 1


When the main program is combined with the GPL-covered plugin, the software as a whole would be covered by the GPL. Since you're using the MIT license for your main program, this is perfectly possible: the MIT is a GPL-compatible license. However, you will also have to pay attention with other dependencies, e.g. Apache-2.0 is not compatible with GPL-2.0.

It is not the ability of your program to load a GPL module that brings the GPL into play. The GPL will only apply to your software if it is combined with the GPL module. I would argue that this occurs by distributing the two components together in a manner that will load the GPL component by default.

This answer is based on the FSF interpretation of the GPL, in particular the GPL FAQ entry Can I release a nonfree program that's designed to load a GPL-covered plug-in?. While your program is MIT-licensed (and therefore not nonfree) the same reasoning applies. Either the two components form a single program or they don't. If they don't, GPL is irrelevant. If they do, the program as a whole is subject to the GPL. The potential “loophole” is to keep the two components as clearly distinct programs, in particular by running the sound library as a separate server and only interacting with it e.g. over a socket.

This site is temporarily in read-only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .