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?

  • octt@feddit.itOP
    link
    fedilink
    arrow-up
    1
    ·
    2 years ago

    Oh, I didn’t think of this, might be an option, thank you!

    A question: for the contributors copyright, instead of having all contributors have to give the copyright to me, can I just say that all contributions have to be made under my same double license directly by the contributor? This way everyone retains their own copyright but the double-license thing can still stand. Or am I missing something here?

    • Txopi
      link
      fedilink
      arrow-up
      3
      ·
      2 years ago

      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:

      All files in this repository are licensed as follows. If you contribute to this repository, it is assumed that you license your contribution under the same license unless you state otherwise.

      This software is licensed under the LGPLv3, included below.

      As a special exception to the GNU Lesser General Public License version 3 (“LGPL3”), the copyright holders of this Library give you permission to convey to a third party a Combined Work that links statically or dynamically to this Library without providing any Minimal Corresponding Source or Minimal Application Code as set out in 4d or providing the installation information set out in section 4e, provided that you comply with the other provisions of LGPL3 and provided that you meet, for the Application the terms and conditions of the license(s) which apply to the Application.

      Except as stated in this special exception, the provisions of LGPL3 will continue to comply in full to this Library. If you modify this Library, you may apply this exception to your version of this Library, but you are not obliged to do so. If you do not wish to do so, delete this exception statement from your version. This exception does not (and cannot) modify any license terms which apply to the Application, with which you must still comply.

      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.

      • octt@feddit.itOP
        link
        fedilink
        arrow-up
        2
        ·
        2 years ago

        Actually, LGPL with linking exception seems quite a good solution. I will probably use this, then. Thanks again!