I want to release a package on the Unity Asset Store. Based on this answer, it looks like the best option for my situation would be LGPLv3.

However, after doing plenty of research, I've stumbled across this part of GNU's FAQ. It says,

Subclassing is creating a derivative work. Therefore, the terms of the GPL affect the whole program where you create a subclass of a GPL'ed class.

This is going to be a problem for the package I am making. One big feature of my package is that, thanks to generics, it is flexible enough to work with almost any datatype. However, due to a limitation in Unity, the only way to take advantage of these generic classes is to create one subclass for each datatype to be supported. (This sounds like a pain, but I've also been polishing some nice editor tools that create the subclass scripts. This is beside the point, however.)

In other words, if anyone wants to work with anything beyond the handful of default types that I support, they'll have to subclass specific parts of my code.

Correct me if I'm wrong, but a developer who wants to use my package with a datatype from non-free code cannot do so. They would need to license the non-free code under the LGPL or a compatible license, since it's considered a derivative work now.

This is not what I want! Subclassing in this way in intended. If developers cannot do this, it severely hampers my package's usefulness. I may as well use the GPL license, but then it's too limiting for most game developers, who are non-free for reasons out of their control.

But, other than this one exception, I the LGPL to function as normal. I want any developers who expand the core package's capabilities to contribute back to the original project. What is the best way to go about this?

I see two possible approaches, but I don't know how feasible either of them are.

  1. Use a different license for the code meant to be subclassed. I've heard of this solution. It sounds ugly, but I'll do it if necessary. I'd probably go with the Apache license, though I have not done enough research on that license to know for sure.
  2. Create an "Additional Permission" for the code meant to be subclassed. This seems like the best. However, I don't know if it's possible. Section 7 of the GPLv3 mentions additional permissions, but the LGPL doesn't say anything about them.

I am not sure these solutions are any good. I think that, if a developer can subclass my code without any limits, someone they could create wrapper classes based on my code and distribute it as if they had created new, non-free code. (But I am not going to sweat this; the code to be subclassed isn't even very complex.)

1 Answer 1


Regarding your second option, the LGPLv3 is created by using the "Additional Permission" option from the GPLv3. This means that the clauses from the GPLv3 also apply to the LGPLv3 (except where the LGPL says otherwise).

So, the option of granting additional permissions (for example, to create derived classes from the generic classes without invoking the copyleft nature of the LGPL) is certainly viable.

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.