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.
- 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.
- 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.)