I'm working on a project right now that is essentially a set of libraries for game development. The idea is that these modules (in the form of DLLs, jars or other extensions) are open source and can be exchanged with custom ones the user builds. Developers can mix and match which modules they need and build connections to them in a closed-source manner.

It used to be BSD-3 because originally it was just code that could potentially be copied, but I feel like shifting the design into a bunch of modules makes a GPL-like license more attractive (and just easier for people to use). Since they are modules, only the custom module would be restricted under the license, not the entire codebase.

I want to make sure that the modules are still attractive to developers though - so I want to make it so that the modules cannot be hardcoded into these engines themselves, but can still be freely. The purpose of these being modules is to be switched out and it defeats the purpose of this ability.

Would this count as "free use" of the module? In my head it seems right but I don't want to jump the gun and intimidate devs down the line.

Are there good examples of licenses that I can reference as well that have a similar problem? Sorry if this sounds dumb I'm just intimidated by the length of everything.

  • If someone uses and redistributes code using your modules, what obligations do you want that author to have? Must he make his code open source as well?
    – Brandin
    Sep 2, 2019 at 4:58

1 Answer 1


I want to make it so that the modules cannot be hard coded into these engines themselves... The purpose of these being modules is to be switched out and it defeats the purpose of this ability.

In a way, this is exactly what the Lesser GPL (LGPL) v3 requires in 4(d):

d) Do one of the following:

0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version [...]

1) Use a suitable shared library mechanism for linking with the Library. [...]

In other words, when someone distributes a program that uses your LGPL'd work, they must make it technically possible for recipients to modify and relink your LGPL'd library, either by supplying at minimum the object files (or more generously, the complete source) needed to perform a new static link or else by using dynamic linking. This ensures that your module can be always be replaced, without placing many requirements on the application that uses it.

Note that is doesn't strictly stop someone from "hard-coding" your work into a larger engine in a way that it can't be easily replaced, but if someone did do that, the whole engine and it's source code would have to be available under the LGPL as well.

In a sentence, the use of the library in a larger application only applies source-sharing requirements to the library itself, while any modification internal to the library must be shared upon distribution. So, to reiterate the above points:

  • If someone combines the library and engine in a way that there is clear application/library separation between the two components, the library must be replaceable but the source of the application need not be shared.

  • If someone combines the library with an engine in a way that there is direct intermingling of code, then that's allowed, but it's a derivative of the library that must be licensed (with disclosed source) under the LGPL.

The second point may or may not be acceptable to you, depending on whether you find copyleft source-sharing to be an acceptable gain to compensate for the close combination of the library with an engine.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.