JohK / nutsnbolts

A OpenSCAD library that allows for simple creation of nuts and bolts and respective nut catches and screw holes
GNU General Public License v3.0
266 stars 41 forks source link

Uh, GPL ? #21

Open uski opened 2 years ago

uski commented 2 years ago

Hi,

Can you confirm that choosing GPL is an intentional choice ?

GPL is very restrictive in the sense that everything that uses this library would have to be GPL too. That itself could be fine, but see below.

Another not well known and problematic side effect is that many people cannot touch this library due to legal reasons with their employer. Examples here : https://news.ycombinator.com/item?id=24764409

This prevents tens of thousands of qualified developpers from using/contributing.

Have you considered BSD license instead ?

Since the number of contributors to this project is limited, assuming all agree, it should be straightforward to relicense.

Thanks !

uski commented 2 years ago

Adding a further explanation here, which I found very interesting : https://docs.freebsd.org/en/articles/bsdl-gpl/

jkneer commented 2 years ago

What are you planning on contributing?

uski commented 2 years ago

Hi,

I was about to post a design to Thingiverse that uses the library. In the process, I wanted to credit the library and verify the license . Which I did, and realized it was GPL so I cannot post. I am unsure yet if I have to scrap the design or not, but that's out of scope.

If this is the type of situation you want, no action is necessary, you can keep the license as-is. Otherwise, you can consider switching.

From experience, most libraries are not using GPL for this reason, but at least LGPL, which is why I was asking if this was an intentional choice. If it is, it's totally fine ! I was just making sure you were aware of the situation and I was explaining what was happening.

I am also super bummed because now that I know the library is GPL I need to stop using it and while it does not change anything to you, it does make me sad because this is a great library. So I wanted to see if there was any chance to change this.

The reason we are having this discussion is because I care about open-source and this project. If I did not, I would have posted anyway without caring, or not thought about sharing my work with others at all in the first place.

Thanks for reading.

jkneer commented 2 years ago

Hi uski,

is there any specific reason why you cannot publish your design under GPL? I assume you wanted it to open source it anyway if you used OpenSCAD and you are planning to publish it on Thingiverse. If that is the case you can release it now under GPL, and re-release once you have replaced Nutsnbolts by a compatible lib.

The choice of GPL-3 as the license was kind of intentional but without too much thought. I actually did not care and I only used OpenSCAD for small personal projects. I would be willing to re-release under a different license but there have been contributions by others, who would need to agree... Nutsnbolts is now 9 years old, so I don't know whether all of the contributors can still be reached and if all of them agree.

@hannesweisbach What are your thoughts?

Best Regards Johannes

hannesweisbach commented 2 years ago

I'll preface my answer by saying that I'm not a lawyer.

Sorry to be blunt, but I think that uskis reasoning is ridiculous. By that logic you couldn't redistribute Linux binaries or distros, because they are made from GPL'd Linux kernel code. What about gcc etc?

My understanding of the GPL is that if you use GPL'd code you need to (a) retain the GPL license text (b) make the GPL'd (source) code available.

You can now discuss with a lawyer wether the relationship between scad code and STL is infact similar to source code and binary.

My stance would be that it is enough to include a link to the nutsnbolts repository and by that you would have provided the source code. That would also be more than 99% of other user did to be license compliant.

I'm not sure what happens if you'd combine with libraries under another license. You would need to ask a lawyer in this case because it gets complicated quickly. As far as I understand it though, if you combined GPL'd code with BSD'd code the resulting work would be GPL'd, because you'd have to take the sum of both licenses (this is not always possible, for example when licenses are incompatible).

That said, it is my impression, at this point, you only want to upload your privately created STLs (plus maybe SCAD source) to thingiverse (or any other similar platform), correct? I think acknowledging the use of GPL'd libraries and providing a link to their respective project pages and/or repositories is more than enough, although probably not 100% compliant. As long as it is non-commercial I think no one is going to mind.

As a closing note: I personally chose permissive licenses (MIT, BSD, etc.) for my own projects whereever I can. I, personally, wouldn't mind a re-license to something more permissive. However, I believe the reasoning uski provided to be flawed.

uski commented 2 years ago

I am also not a lawyer, and I am trying to navigate the legalese. Here is my best explanation.

There are important nuances you are missing, and I think this is why you think this is ridiculous when it is really not :

The requirements you describe, retain the license text, and redistribute the source code, are true when you consider modifications to the library itself, and distribution of the library. However, if this is just what you want, this is LGPL or similar.

A GPL library goes beyond : it forces you to license any new code that uses it with GPL too. Like you mentioned, this create a whole new world of issues and challenges, such as license compatibility (will come back to that later) and legal complexity (this whole discussion !).

If your stance is that providing a link to nutsnbolts is enough, this is called attribution. Attribution is one of the requirements of LGPL. If this is what you want, then releasing the library under LGPL guarantees that :

There are also other licenses that guarantee attribution.

It is important to make sure a project uses the right license. A license which is too restrictive or unfit for the purpose can have unintended effects, including discouraging people from distributing their work as open-source : (L)GPL do not guarantee that modified versions of the library and their source code will be distributed. People can modify the library and keep the modified source for themselves, as long as they never distribute their work in any way. This is why it is very important to make sure that there are no obstacles to distribution, or people will just keep their work for themselves.

For example, I can modify nutsnbolts and create designs out of it, and never publish any source code if I don't distribute my design. See, this whole discussion started when I wanted to publish my code, and GPL was actually an impediment in doing so, not an incentive to do it.

You mention an excellent point, license compatibility which is an example of such distribution impediments. This is why license choice needs to be considered carefully, as the more restrictive a license is, the more likely there will be license compatibility issues. And the more complex a license is, the more people will be rightfully concerned about unforeseen consequences of its use (you felt like you needed to mention you were not a lawyer, it is unfortunate). This restricts who can use the library, and who can contribute to it.

The wrong license can also simply discourage the use of a library in the first place. Say you are a university researcher. Many universities finance their work by commercializing part of it. If you end up using nutsnbolts anywhere in the project, the whole project needs to be GPL. This can be a major time bomb, and this is why many people just don't touch GPL code.

When we write code that we publish, we want to help others. We want others to use it (or we wouldn't distribute it). Licenses help put conditions on such use. But we need to ask ourselves, as creators, what conditions make sense.

You say I can just go ahead and provide the STL in Thingiverse. I don't want to do that, I want to release my source code too ! As you can see, I am a firm believer in open-source. Most Thingiverse projects with just STLs are not open-source and I want to publish my OpenSCAD code too. If you go see my Thingiverse history, it is not a huge one, but you will see I always published my source code.

Additionally, this would be a GPL violation., commercial use or not. This is because nutsnbolts being a GPL library, one has to release the source code of the software using it too. Which would be the OpenSCAD code of the whole project.

Now, why is that an issue ? I said I wanted to release it anyway, right ?

Because :

1) As a creator, it removes my freedom to select the right license. If I want to go with a CC NC license, I cannot do it because CC is incompatible with GPL. I also cannot decide to release my code as public domain either, or a less restrictive license like BSD, it is GPL or nothing. It also forces anyone who uses my code, in turn, to be GPL too !

2) As explained better that I can do in the FreeBSD page about license I linked: 2a) GPL prevents university labs and other entities from using the code 2b) For the reasons above, using GPL for a library is highly unusual. Even the GNU C library is not released under GPL, but LGPL. The GPL license is legally complex (as you correctly described) and rightfully makes people worry about licensing considerations instead of just going ahead and sharing their code.

3) There are additional considerations due to my work. Everything I do in my free time is the intellectual property of my employer, and I believe it means I cannot release it under the GPL (see the first link I posted for examples). This feels wrong, stupid, but actual lawyers backed this, so I am not going to argue about it. But I believe this is a minor point in this discussion, I am trying to focus on the big picture.

Overall, I could just keep my code and not share it, and there would be no issue. This is probably what I will end up doing if the library stays GPL. But this is a good illustration of why GPL can actually have a counter productive effect, and why other more pragmatic licenses have been developed.

I was really surprised to see this library licensed under GPL so that's why I wanted to have this conversation, to make sure that all aspects of this decision were considered. It is a way of contributing to the project too.

I hope this provides a good picture of the situation and clarifies a few things. Thanks for reading !

jkneer commented 2 years ago

I have to agree with hannesweisbach that your reasoning is flawed. But really, I don't want to have a pointless lengthy - 'only GPL is truly opensource, but only more permissive licensing allows cooperation' discussion. It also doesn't help the discussion that there is lots of cultural and legal differences internationally: i.e. your work contract sounds outrageous, afaik such a clause would be invalid in most European countries. To use your argument structure: "Please go talk to your employer and have the contract changed, it hinders your engagement in opensource projects, which is bad for the opensource community".

Again, your fast option is to release your stuff under GPL and then later re-release once you could replace Nutsnbolts or once Nutsnbolts is available under another license. If that is a legal problem, release just the STLs for now.

That said, I understand that in this case GPL is holding you back (really I don't care too much why - I'm just naively willing to support you, and I'm willing to change to a more permissive license - please stop waisting your time on writing these walls of text :) I will try to look through the logs on whom I have to contact for re-licensing, but it will take me a while to get around to it.

jkneer commented 2 years ago

@qwazix @lluki @hannesweisbach would you agree to relicensing?

I would chose a more permissive license like LGPL, MIT or BSD. Do you care, as long as it remains open source and more permissive than the current GPL license?

qwazix commented 2 years ago

LGPL sounds good for me, I know I didn't do much, but I'd hate see someone take it and fork it as a closed source project. With the LGPL at least the improvements in this lib must be given back.

AndrewTasso commented 1 year ago

@jkneer I realize that I'm resurrecting a relatively dead thread and don't have much skin in the game. But, I just wanted to add another voice to the conversation.

First and foremost, thank you for taking the time and energy to maintain this library. It's a relatively thankless job, which often times comes with far more criticism than praise.

I recently opted not to use this library due to it's utilization of GPLv3. I'm working on a design, licensed under a Creative Commons Attribution-ShareAlike license. However, the strong copyleft nature of GPLv3 makes it incompatible with CC BY-SA. Instead, I opted to model the nutcatch myself.

I'm a vocal advocate for FOSS, and do my best to ensure that I comply with established licenses. And, in this case I did my due diligence and verified the license before use. However, I suspect there are quite a few people in the community who are happily and unknowingly using this (awesome) library for their works in violation of its license. And, if more people were aware of the ramifications of GPLv3, I suspect it'd see much lower usage.

I'm happy that you're considering re-licensing, as I'd love to eliminate my hand-jammed static nutcatch in favor of one that's standards based and can be parametrized using your library. I'd like to ping @hannesweisbach (who seemed open to re-licensing) and @lluki to see if they can state affirmatively that they're on board with re-licensing.

Again, thank you for maintaining this library! :)