I’m starting to work on a C library, and I am having trouble choosing a license, so I need some help.
Keeping in mind that:
- I want as many people as possible to be able to use my lib, without them worrying about license compatibility, both for libre and proprietary programs;
- My lib is designed to be statically linked, so its license must allow static linking without compromises;
But, also:
- I want for whoever uses my lib to credit me: I think mentioning my library’s name, optionally with an URL to my repo and the license text copypasted, in the final software’s documentation / credit page / whatever would be enough;
- I want for people that make changes to my library, and then use the modified version in their program, be it free or proprietary, to publish the modified source code of my library, under my license (but they can keep the rest of their program under whatever license they want).
What license should I choose? I really have no idea.
I think that if I only cared about the first 3 points, I could choose MIT, but considering the last one?
In case the free version and the proprietary version of the software can be slightly different (the free version’s source code is on a public repository, but the proprietary one is in another place and some files are different), you must ensure that the contributor really understands there is another version of the software and his/her contribution is going to be added to that version too. And perhaps in the proprietary version you will need to merge the contribution in a different way, and in the future remove or extend that part. How can the contributor agree now or in the future what you do and how you do if he/she can’t even see that software? It’s weird and probably that’s way people use to recommend to give the copyright to the proprietary version owner. Actually, I’m not sure.
Anyway, in your case, if the repository is unique and public (and will be in the future), and both licenses are clearly referenced (LICENSE files, README file and source files), I think contributors don’t need to give you the copyright and can contribute just normally. Note that you don’t want to say that both license apply, but that one of them apply in a given moment. You can’t use SPDX in your case because one of the licenses will not be free, but I’m talking about something equivalent to the OR operator of this specification.
I have been thinking about this subject and my opinion about dual licensing for this case has changed. Let me explain:
The dual licensing requires you to create a non free license different to the other LGPLv3 license. I think it’s complex to write a good and clear license with the requirements you want: dynamic and static linking, authorship recognition… In case you need to modify the license in the future, you need to write it in a way that the contributions of the past automatically will accept the new license. Finally, you could end writing the whole LGPL license again just changing the linking part!
For that reason, perhaps the most simple and secure way to do what you want to do is just use the LGPLv3 license with the linking exception just the same way other projects already do (follow the link to see 3 examples). This is what @octt@feddit.it mentioned at first. Basically you create a LICENSE file containing the LGPLv3 license (as many libraries and software projects do) and above the license you include the exception:
As far as I know, this will make the software to become not free according to GNU, but at least you will get what you want in a quite reliable way.
Actually, LGPL with linking exception seems quite a good solution. I will probably use this, then. Thanks again!