Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

legal requirements for dual licensing #259

Open
therecipe opened this issue Mar 27, 2017 · 60 comments
Open

legal requirements for dual licensing #259

therecipe opened this issue Mar 27, 2017 · 60 comments

Comments

@therecipe
Copy link
Owner

@bclermont @m8m5 @jordanorelli @akamensky @5k3105 @longlongh4 @aebruno @nnvn @hvnsweeting @KellyLSB @pekim @joesis @mixedCase @xland

Hey

I'm planning to offer the binding under a second (additional to the current) commercial license.
The commercial license will be useful for people/firms who want to distribute their product in binary only form and also don't want/can't meet the conditions of the current license.

And because you directly contributed code, I have to obtain the rights from you to do so first.
I also would like to compensate you for the transfer of your rights, by granting you the right to use the binding in the terms of the commercial license for free.

Please let me know if this is okay for you and if you grant me the rights for your code.

Thank you.

@mixedCase
Copy link
Contributor

mixedCase commented Mar 27, 2017

I'm not sure if this kind of exchange is legally valid under any jurisdiction, but fine by me.

Any code I have contributed to this repository can now be considered licensed under the Unlicense.

@therecipe
Copy link
Owner Author

@mixedCase

Thank you very much :)

I'm not sure if this kind of exchange is legally valid under any jurisdiction

Yeah, I know. But I think/hope an oral contract is sufficient in this case.

@jeanlucmongrain
Copy link
Contributor

which license you think of? Something like BSD?

@5k3105
Copy link
Contributor

5k3105 commented Mar 27, 2017

Fine with me.

1 similar comment
@ghost
Copy link

ghost commented Mar 28, 2017

Fine with me.

@hvnsweeting
Copy link
Contributor

hvnsweeting commented Mar 28, 2017 via email

@nndurj
Copy link
Contributor

nndurj commented Mar 28, 2017

Fine with me

@joesis
Copy link
Contributor

joesis commented Mar 28, 2017 via email

@pekim
Copy link
Contributor

pekim commented Mar 28, 2017 via email

@jordanorelli
Copy link
Contributor

yes 👍

@aebruno
Copy link
Contributor

aebruno commented Mar 28, 2017

yes, fine with me.

@therecipe
Copy link
Owner Author

@5k3105 @m8m5 @hvnsweeting @nnvn @joesis @pekim @jordanorelli @aebruno

Thank you all, I really appreciate it :)

@therecipe
Copy link
Owner Author

therecipe commented Mar 28, 2017

@bclermont

which license you think of? Something like BSD?

I honestly didn't planned that far ahead yet, but I think it will be bases on (or maybe even be identical to) the commercial license of Qt itself.

@jeanlucmongrain
Copy link
Contributor

I honestly didn't planned that far ahead yet, but I think it will be bases on (or maybe even be identical to) the commercial license of Qt itself.

then it should be ok! thanks

I approve

@akamensky
Copy link
Contributor

akamensky commented Mar 29, 2017

I'm planning to offer the binding under a second (additional to the current) commercial license

You have my permission.

I'm not sure if this kind of exchange is legally valid under any jurisdiction

That is totally acceptable. The code can be distributed under several licenses that are applied depending on circumstances. Also, current LGPL v3 does not limit the commercial use, it limits the distribution form (static vs dynamic linking).

I also would like to compensate you for the transfer of your rights

The above procedure does not require transfer of the rights. Also in situation of changing licensing model or adding extra license there is no rights transfer, but rather an approval from all rights holders on doing so.

If you would want all contributors to transfer their IP rights for the contributed code to you I would recommend to state that explicitly. Current phrasing only vaguely specifies adding a license (which again to highlight does not equal to rights transfer) and can later be used against your intention.

I would recommend creating a separate issue with writing the same things in a formal way to avoid ambiguity.

PS: Apart of writing the licensing model alterations in a formal way, would also be nice to write a compensation details in more formal way, otherwise right now it does not explicitly state what would I be permitted to do with the code based on compensation.

@ghost
Copy link

ghost commented Mar 29, 2017

may be, you will be interested in https://www.clahub.com. easy to use. works like Travis CI (https://github.com/m8m5/test_CLA/pull/2).

https://cla-assistant.io also seems good. no need to fill form and gives a cla template (https://github.com/m8m5/cla_test2/pull/3)

@therecipe
Copy link
Owner Author

@akamensky

Thank you, and also for the explanation :)

The above procedure does not require transfer of the rights. Also in situation of changing licensing model or adding extra license there is no rights transfer, but rather an approval from all rights holders on doing so.

Yes, this is was I had in mind when I made this request.
To get the general consent from all contributors to allow me to add an extra license, that I then can possibly sell access to. I really should have phased it better and be more explicit about it.

If you would want all contributors to transfer their IP rights for the contributed code to you I would recommend to state that explicitly. Current phrasing only vaguely specifies adding a license (which again to highlight does not equal to rights transfer) and can later be used against your intention.

I think/hope this is not necessary, as all I really wanted was just an approval.
I hope that my plan to "sell access to the commercial license" is still possible without the acquisition of your IP rights and an approval is sufficient for this.

PS: Apart of writing the licensing model alterations in a formal way, would also be nice to write a compensation details in more formal way, otherwise right now it does not explicitly state what would I be permitted to do with the code based on compensation.

Yes, I see what you mean. And I will write that down once I know what license I have to choose.

The reason why I wanted this "change", is because of the questions that came up for me with this issue #230

The problem is that at the current moment it's simply not possible to distribute applications created with the help of this binding in binary only form, if you don't want to also distribute the object file (*.a) file created during the compilation of your application.
As the other way to comply with the LGPLv3 license (without sharing your source code) is dynamically linking, and that is currently not possible against Go libs. (but might be possible in Go 1.9)

So now, to allow this closed source (possible commercial) use without the need to distribute the object file or when available dynamically linkage against this lib. There needs to be another license that allows that or the current one needs to be changed AFAIK.

But as this limitation primarily affects users that want to distribute their applications for commercial purposes. (most other people are probably okay with open sourcing their code in the first place, I hope)
I think it's then reasonable to give them the possibility to use the binding without these limitations enforced by the current license, but only if they pay for it.

I also looked into the commercial Qt license, to figure out if I could somehow leverage some parts of it. But it seems like I can't make any use of it, as it is tailored to Qt's specific needs and doesn't really reflect what I intent to achieve.

So I think/hope that the commercial license could just be a regular LGPLv3 license + a static linking exception. I don't know if this is possible, but it would be the most simple way to work around the specific issue with the current license.

@therecipe
Copy link
Owner Author

@m8m5

Thank you, these look great :)
I will add one of them.

@joeblew99
Copy link

What is the intent ?

Are you going to make this repo have a supported commercial side that you charge for ?

@therecipe
Copy link
Owner Author

@joeblew99

What is the intent ?
Are you going to make this repo have a supported commercial side that you charge for ?

Not directly, in the first place it's about:
Allowing the static linkage against this library without the need to provide a way of relinking or the disclosure of your source code, if you intent to distribute your application.

It basically is to create a new (more attractive) condition under which you can use this library. And this also doesn't alter the current conditions in any way afaik, it's just an addition.
This new condition is probably uninteresting for most users, as they are already allowed to static link against this library by simply open sourcing the code.

So, as this new condition is only interesting for closed source users, who potentially want to distribute their applications for commercial purposes. It's probably a good idea to charge them for doing so. This doesn't means that there will be "home" and "pro" version or something, at least I'm not planning to create such a differentiation at this point.

@joeblew99
Copy link

i am planning to use this for a commercial project and so will be affected - hence why i am asking for clarification.

The QT company charge 300 per month for commercial use, which is the price for convenience.

Can you be more specific. my email is on my profile if you need to contact me also.

@therecipe
Copy link
Owner Author

@joeblew99

Can you be more specific.

I will make things more specific, as soon as I looked into them deeper.
For now I just wanted to get the general consent of the contributors to make this possible in the first place. So I didn't looked into pricing and all that other legal stuff yet.
But I will ping you once things are more concrete.

@therecipe
Copy link
Owner Author

@bclermont @m8m5 @jordanorelli @akamensky @5k3105 @longlongh4 @aebruno @nnvn @hvnsweeting @KellyLSB @pekim @joesis @mixedCase @xland

Hey, it's me again.

I did setup a formal CLA as akamensky suggested.

And it would be great if you could sign it off.

It can be done with just 2-3 clicks and there is also no need to fill in something.

The CLA is derived from Github's CLA and is short and readable, at least in comparsion to the others I read in the last few days ...

You can find it here: https://cla-assistant.io/therecipe/qt

Thank you very much :)

@xland
Copy link
Contributor

xland commented Apr 5, 2017

It is fine with me~~~

@ghost
Copy link

ghost commented Apr 5, 2017

done

@mixedCase
Copy link
Contributor

So, there's one thing I'm not so clear about... The bindings themselves (both the Go and C++ code) are under the LGPL. While qtdeploy might dynamically link against the C++ parts, isn't the Go code from this library statically linked, and thus, triggers the virality clause on all applications depending on it?

If it is your intention to allow people to use the bindings without having to LGPL/GPL their code, why not go for the MPL-2.0 or the LGPL+static linking exception? Right now I wouldn't be able to recomend the bindings to pretty much anyone because of the lack of dynamic linking in the Go compiler :/

@therecipe
Copy link
Owner Author

therecipe commented Apr 18, 2017

@mixedCase

So, there's one thing I'm not so clear about... The bindings themselves (both the Go and C++ code) are under the LGPL. While qtdeploy might dynamically link against the C++ parts, isn't the Go code from this library statically linked, and thus, triggers the virality clause on all applications depending on it?

IANAL, but I think that if you just make use of a LGPL library (and don't modify it), then you are free to choose whatever license you may want for your own code. How I understand this is, that LGPL is pretty much only a problem if you want to keep your code closed and still distribute your product. Because then you might need to either dynamically link against the LGPL code (sadly not possible in Go 1.8 yet, beside on Linux) or statically link and then also distribute the object file created during compilation, with an instruction on how to relink against another version of the LGPL part of your code. If you open source your code however (I think the license doesn't matter, from LGPL's point, beside that the license maybe needs to allow your users at least to use it for the relinking purpose), then making your source available already satisfies this requirements and you are free to go.

If you however create a work based on the library, I mean if you would fork this repo and distribute a modified version, then you probably need to license this derived work under LGPL (and maybe GPL, but I'm not really sure) as well.

If it is your intention to allow people to use the bindings without having to LGPL/GPL their code, why not go for the MPL-2.0 or the LGPL+static linking exception? Right now I wouldn't be able to recomend the bindings to pretty much anyone because of the lack of dynamic linking in the Go compiler :/

Yes, I want to allow people to use this binding without them having to LGPL/GPL their code, but from what I know LGPL already allows people to do that, without forcing them to license their code under LGPL/GPL as well.

I created this table (for "work that uses the library"), which should make things a bit clearer.

Type of use + Linkage mechanism used Restrictions Possible in C++ (Qt) Possible in Go (binding)
Open Source + Any Use / Closed Source + Private Use
Any linkage mechanism None Yes Yes
Closed Source + Public Distribution
Dynamic None Yes (default) Not yet (technically)
Static Distribution of object files + instructions on how to relink Yes Yes (default)
Static without restrictions None Yes (commercial Qt license) Not yet (legally)

@mixedCase
Copy link
Contributor

Yes, I want to allow people to use this binding without them having to LGPL/GPL their code, but from what I know LGPL already allows people to do that, without forcing them to license their code under LGPL/GPL as well.

Unfortunately this is not the case, the way Qt allows it is via dynamic linking to the LGPL version or the commercial license. But as you mention in the table, the Go part of the binding (still under the LGPL) cannot under any circumstance (except via experimental Linux-only plugins) be dynamically linked. This means that even if software using this library were to be released under an open source license like MIT (and of course, if doing so under a non-open source license), you're forced to have an (L)GPL release because of the static linking triggering the virality clause.

From where I see it, if it is your intention for non (L)GPL code to be able to use the library, the best solution available is to release the library under the MPLv2. Projects like ZeroMQ have used the LGPLv3 with a static linking exception as an alternative, but that brings a different set of issues that hinder adoption as they explain here.

@therecipe
Copy link
Owner Author

therecipe commented Apr 18, 2017

Unfortunately this is not the case, the way Qt allows it is via dynamic linking to the LGPL version or the commercial license.

Or you could statically link and also distribute the object file(s) + instructions on how to re-link.
(Even if this is not explicitly stated in their FAQ)
And those limitations only apply to closed source + public distribution use cases.

This means that even if software using this library were to be released under an open source license like MIT (and of course, if doing so under a non-open source license), you're forced to have an (L)GPL release because of the static linking triggering the virality clause.

You have to differentiate between "work that uses the library" and "work based on the library" there.
Yes, "work based on the library" has those restrictions, but "work that uses the library" has not (regardless if the end product is open source or not).

From where I see it, if it is your intention for non (L)GPL code to be able to use the library, the best solution available is to release the library under the MPLv2. Projects like ZeroMQ have used the LGPLv3 with a static linking exception as an alternative, but that brings a different set of issues that hinder adoption as they explain here.

I'm not really familiar with ZeroMQ, but I think the reason why they want to change the license to MPL is because the low level core (libzmq) is under LGPL and therefore everything that makes use of this library is considered to be "work based on the library" instead of being "work that uses the library".

That's the difference in comparison to this library, as most use cases are considered to be "work that uses the library" here, rather than "work based on the library".

However I could be wrong, but I also haven't found something that indicates that yet.

https://www.gnu.org/licenses/gpl-faq.en.html#LGPLStaticVsDynamic
https://forum.qt.io/topic/65116/static-builds-and-lgpl-again-providing-object-files-instead-of-open-source

@mixedCase
Copy link
Contributor

You have to differentiate between "work that uses the library" and "work based on the library" there.
Yes, "work based on the library" has those restrictions, but "work that uses the library" has not (regardless if the end product is open source or not).

This distinction is not legally clear since there's no clear-cut unit of "work" and different courts will interpret it differently, so this distinction does not exist in practice. Here's a good explanation: https://copyleft.org/guide/comprehensive-gpl-guidech5.html#x8-300004

The only thing people tend to agree on is that with a relinking mechanism the virality clause of the LGPL does not apply outside of the library. However, as mentioned before, this is not possible to provide with Go outside of plugins.

@mixedCase
Copy link
Contributor

Yes, I mean a closed source, Go application that is distributed to the public as a normal binary and uses this library without modifying it (or with changes to it released under the LGPL if modified).

I don't see how this can be done currently due to limitations of the Go compiler.

@therecipe
Copy link
Owner Author

Ah, sorry yes that is correct.

If you want to use this binding in a closed source application and intend to distribute it in binary only form, your only option is to statically link against the Go code and then also distribute object files and instructions on how to re-link.

The other possible options would be:

  • a) dynamically linking against Go libs => is technically not possible yet (but hopefully in Go >= 1.9)
  • b) a second (commercially) license which allows static linking => doesn't exists yet

But both options are not available at the moment.

And this is also the reason why I opened this issue in the first place, to get the consent from all contributors to create a second license to make option b) available. But this second license will probably only be available for a fee.

But don't worry, I also said and still mean it, that all the early contributors I stated in the OP (and so also you), can use this binding under the terms of the second (commercial) license for free. I will also create another post where things will be more formal, once there really is that second license.

And the second license will probably be just a static linking exceptions for "work that uses the library", so that you can use this library in:

closed source, Go application that is distributed to the public as a normal binary and uses this library without modifying it (or with changes to it released under the LGPL if modified).

@mixedCase
Copy link
Contributor

@therecipe While I get to enjoy the license, I can't recommend the library to other people who don't. In fact, I'm not even interested in making closed source applications with it; but this kind of thing is a blocker for the user adoption that leads to the development of a thriving ecosystem around it which everyone benefits from, hence my insistence on a copyleft license that allowed normal Go usage now that everyone has approved relicensing.

Even when plugins become a thing across platforms, they're annoying to use compared to dynamic linking since it's in the end, dynamic loading. One has to use the plugin package API, type assertion for everything and so on. It requires more boilerplate than writing Qt code in C++; which makes it hard to recommend as a solution to make Qt development more pleasant.

In the end it's your project, if you want to take a fee for it it's only fair, you have put a lot of work into it and deserve it, but it does mean we fall into the PyQt situation again which nobody liked and prevented its adoption even in open source projects :(

@therecipe
Copy link
Owner Author

Yes, I understand your points, but I also have some concerns regarding a general static linking exception or MPL. The thing is that the library as it is at the moment (under LGPL) is already pretty permissive for open source / in-house users. Adding the linking exception or switching to MPL, will therefore only benefit closed source users.

In the end it is just about the potentially risk and potentially reward.

The potentially risk is clear: Losing the only "real" ability to generate some revenue.
I know there are other options such as open core, consulting or contract development but those are not practically for real growth.

The potentially reward on the other side is not that clear: Can/do those closed source users give enough back to justify the lose of the potentially revenue though license fees? That's difficult, but I would say no they can't. At least not in regular intervals, and those are necessary to provide stability for further growth.

I know that the cost for commercial licenses is a bigger problem for indie devs, but those problems can be easily solved by offering different tiers, such as a free tier for startups or indies.

But adding a general static linking exception will mostly only benefit "big" businesses that want to capitalize on open source, without giving enough back. Even though they are in the perfect position to contribute, either financially or by dedicating some man power to an open source project. I know for example that a business is way more likely to pay a license fee (which can also be offset with taxes), then making a single donation. Why is that so? Because businesses are no charities and even though they say they believe/work in/with open source, in the end there is no reason other than a "moral/ethical" one to really support open source. And business don't know "morals nor "ethics" ...
(Okay there are exceptions, but yeah they are exceptions ...)
Another thing is, that business will also more likely choose a paid service (if available) over a free one, because paying for something means that the chance of that service being available in the future is much higher than that of the free counterpart. (And you can also yell at someone if you want :D)

Even when plugins become a thing across platforms, they're annoying to use compared to dynamic linking since it's in the end, dynamic loading.

Yes, "-buildmode=plugin" will probably be always unusable in this case. But what I meant was real dynamic linking with "-buildmode=shared", but it seems to only work on linux as of now.

In the end it's your project, if you want to take a fee for it it's only fair, you have put a lot of work into it and deserve it, but it does mean we fall into the PyQt situation again which nobody liked and prevented its adoption even in open source projects :(

I think there are a few reason why PyQt didn't gained mainstream adoption for "open source" use cases. One is certainly the GPL license, which was necessary because LGPL isn't suitable for Python. The other was probably the "official" LGPL PySide competition (that lead to fragmention). And there were probably a few other minor things that lead to that. But I think PyQt is still more polished/stable and therefor more suitable for enterprise development than it's LGPL counterpart. And that is probably because of the reasons I stated above.

However, I will keep that in mind. Maybe there can be made a deal like TQtC did to keep this open source. And also thanks for sharing your concerns :)
But I also think that the chances for this project to catch mainstream interest (for several reasons) are much higher than of those two python bindings.

And if it doesn't work out, then moving from LGPL to MPL is much easier than "moving back" from MPL to LGPL.

@jrmiller82
Copy link

I stopped reading after a few posts... I smell a PyQt money grab coming (and PyQT hadn't been mentioned up to the point I was reading). The second i saw that this library was LGPL instead of BSD, MIT, Apache, etc. I knew that I'd find requests for assignment of copyright from the repo owner from contributors in the issues. And lo and behold, it's on page 2 of the issues.

Shame on you @therecipe .

I encourage each of you that contributed to the repo to retract any agreement to allow your code to be used in the PyQT money grab. If you have changed your mind, I encourage you to approach legal counsel as a few lines written on a comment thread on github may not be enough to give up your copyright, especially if you're in the USA.

Very disappointed.

@therecipe
Copy link
Owner Author

I stopped reading after a few posts...

Maybe you should have kept on reading ...
I later explained the reason behind my decision to use LGPL + an commercial license in more detail.

I smell a PyQt money grab coming

I don't think that's a fair thing to say, I personally think highly of PyQt.

Shame on you @therecipe .
I encourage each of you that contributed to the repo to retract any agreement to allow your code to be used in the PyQT money grab.
If you have changed your mind, I encourage you to approach legal counsel as a few lines written on a comment thread on github may not
be enough to give up your copyright, especially if you're in the USA.
Very disappointed.

:D
I can understand that you are disappointed, but I'm not quite sure what you want to achieve here...

If one of you contributors wants to retract from our informal agreement, then please let me know and I will purge your code from the repo.
I'm cool with that, no problem :)
If you however don't want to retract and you also haven't already signed the CLA, then I would request you to please sign it here: https://cla-assistant.io/therecipe/qt
You just need to click 1-2 times and you are done. Thank you in advance :)
This will save me from legal hassles in the future, like this one right here.

Okay, back to you.
I think you are either here to create drama and get new clients:
I encourage you to approach legal counsel.
Or you are just a disappointed (potentially) commercial user that is upset because you can't use this binding for free in your commercial (and closed source) application.
The first option would have been really shady, and the second option just reaffirms what I said 3 month ago about:

The potentially reward on the other side is not that clear: Can/do those closed source users give enough back to justify the lose of the potentially revenue though license fees? That's difficult, but I would say no they can't. At least not in regular intervals, and those are necessary to provide stability for further growth.

But adding a general static linking exception will mostly only benefit "big" businesses that want to capitalize on open source, without giving enough back. Even though they are in the perfect position to contribute, either financially or by dedicating some man power to an open source project.

@jrmiller82
Copy link

While I am a lawyer, I don't practice in this area. So no, I'm not out to get new clients. That would also be the definition of "ambulance chasing" and is against the lawyer ethics rules in most jurisdictions.

Of course you think highly of PyQT... you're mimicking their business model. And getting free work from github contributors that you are then in turn going to use to sell commercial licenses for your personal gain.

I'm a disappointed potentially closed source (not necessarily commercial, but closed source, there's a distinction) user at the hobbyist level who hates seeing open source software used for money grabs under the guises of making others "give back".

If you're really all about getting business to "give back", how about you pledge here and now to donate 100% of the proceeds from selling your commercial license to FSF or some other tech charity since you're moving towards being that "business"?

@therecipe
Copy link
Owner Author

While I am a lawyer, I don't practice in this area.
So no, I'm not out to get new clients. That would also be the definition of "ambulance chasing" and is against the lawyer ethics rules in most jurisdictions.

Okay, I didn't want to insult you. So I hope you don't took it personal.

Of course you think highly of PyQT... you're mimicking their business model.

I was more focused on money grab implying that there was no substantial additional value created. But yeah, their business model is good as well.
But btw, I also think highly about all the other bindings, even though most of them suffer from the same problem.

And getting free work from github contributors that you are then in turn going to use to sell commercial licenses for your personal gain.

Yeah, that's correct. But I didn't force anybody to contribute, and if people contribute, then I appreciate it. Furthermore every new contributor needs to sign the CLA now before their changes are merged.
And I also asked those early contributors to bring up their concerns and opt-in, rather than opt-out to the dual license decision.
But this is usual business practice, similar to how all the other businesses deal with Open Source. The only difference is, that those who are already big can afford to choose a more permissive license.

I'm a disappointed potentially closed source (not necessarily commercial, but closed source, there's a distinction) user at the hobbyist level who hates seeing open source software used for money grabs under the guises of making others "give back".

Yeah, I know that there is a distinction, and I also try to bring these distinctions up as much as possible. But I don't want to repeat myself over and over again, if this stuff was already explained in more detail earlier.

I don't think money grabs under the guises of making others "give back" is applicable here.
First, all contributions can be used freely by all other Open Source users, so these people give back to the Open Source community.
The fact that these contributions are also used to "grab money" from businesses doesn't render this useless, furthermore as this income will certainly flow back into the project in some form.
Second, there is no guise (or disguise) about the fact, that this project will turn into a business at some point.
I also think that commercial closed source users will appreciate this move, as this gives them more security to bet on this project long term.
Lastly, the only ones I now won't be happy with this are small closed source (not necessary commercial) users, but as I also said earlier.

I know that the cost for commercial licenses is a bigger problem for indie devs, but those problems can be easily solved by offering different tiers, such as a free tier for startups or indies.

Furthermore, I think that everything that is not used for commercial gains should also be Open Source in the first place.
And if you want to go commercial, then you should already be prepared to pay some money for licenses.

If you're really all about getting business to "give back", how about you pledge here and now to donate 100% of the proceeds from selling your commercial license to FSF or some other tech charity since you're moving towards being that "business"?

I think already made clear that this going to be a business and not a charity.
Not "giving back", is only a problem if the receiving party has it's hands tied because they can't demand a compensation.
This problem can be simply solved by using a more strict license, such as LGPL.
Also I plan to invest into the tech I'm utilize, but I will get directly in contact with them once there is a budged for this.

@jeanlucmongrain
Copy link
Contributor

@therecipe 😍

@SimplicityApks
Copy link

@therecipe can you elaborate on why you chose the LGPL instead of the GPL if you're so concerned about commercial use of the lib?
LGPL has all kinds of backdoors to still allow modification without disclosing source like dynamic linking and then reflection. Right now shared libs in Go are still half-baked but could easily become more common (and work better) if more parties use this approach.
Not really something I'd like to see as it just makes the whole deployment process that much more difficult und cumbersome, taking away the static single binary approach that Go is so known for.

It seems to me like you want to restrict users to make some money (which is totally fine with me) but for some reason can't go full-on GPL. If you're only concerned about people not contributing their modifications to your binding then leave them out of this licensing hell and use the MPL. There's far less hassle getting linking work (only Qt is still a thing, but most people got it installed anyway) and modifications still need to be publically available. I doubt there is a mod that one is willing to do legally under the MPL without disclosing source that is not possible through some reflection magic under the LGPL if someone really wants to.

Again, I don't see why the choice between GPL and MPL fell in between with the LGPL which makes it worse for everyone. Just look at the licensing FAQ page, there would be no need for that with either GPL or MPL.
I would personnally hope you choose the latter so I can use your library, but if you select the GPL that is fine with me, at least then I don't have to think about how to hack your lib to legally link it with Go in closed source projects.

@jrmiller82
Copy link

@SimplicityApks Because he wants to make money with a dual license, where you can pay for a commercial license that doesn't care about being statically linked.

@SimplicityApks
Copy link

Yeah I get that, just don't understand of LGPL over GPL if we can only really statically link in Go. It first looks like free to use until you remember Go's static linking and then it is kinda sometimes still free for commercial use. Very unclear and stupid if you ask me. Might as well go GPL all the way. The LGPL only makes sense in a dynamically linked Linux distribution world using C (where it comes from).

@pztrn
Copy link

pztrn commented Sep 17, 2017

I love that "tiers" approach with free tier for startups. Because, well, sometimes even $300 can be a huge amount of money for startups. I'm not speaking about already-bucked things form Kickstarter or similar sites, but about a simple person (like me) who want to try to sell his app(s).

While reading whole thread I realised that some of posters doesn't understand The Meaning of LGPL (c)(r)(tm). So read it below:

  1. You are FREE to create closed-source apps using LGPL libraries.
  2. You even can sell them.
  3. You HAVE to make a note somewhere (for example, in About window) about using LGPL software.
  4. You HAVE to provide source of modified LGPL libraries (or post a way to obtain them on your website), if any.
  5. You have to use dynamic linking with LGPL libraries.

The only "shit" for commercial apps here is therecipe/qt repo. It is what your application statically linking (Qt is linked dynamically actually) and that's why you will have to disclose your source, because your app isn't "using LGPL library", but "based on LGPL library".

Let me please do a proposal as open-source lover and yet as person who want to make some buck on software written with this bindings in future. Please, allow small companies (for example to companies who have 5-10 employes) and to individual entrepreneurs to use your bindings for free or for really small about of buck (like $5 or $10).

What I want to ask you to avoid:

  1. Atlassian approach. $10 for 10 people is good, ~$2000 for 25 people, well, at least weird. That's why we won't use their software. I work in a small company with 15 employes, and $2000 for wiki, $2000 for chat and $2000 for git hosting (Bitbucket Server) is too big price for us and I bet for many small companies and startups out there.
  2. Big prices. As open-source lover I really appreciate if tool allows it's usage in closed-source apps (and commercial) with reasonable and affordable price, so I can recommend it to my employer.

That's my 2c. I'm sorry if I post it in wrong issue, but someone should do that :>

@jrmiller82
Copy link

You're leaving out the fact that go is currently not lgpl compatible because support for dynamic linking is poor to non existent. Maybe I'm a few years it's a moot point. But right now? LGPL means bupkis for a go developer. Might as well be full GPL.

@pztrn
Copy link

pztrn commented Sep 18, 2017

No, I'm not leaving that fact. Please, re-read my post. When there will be a commercial license for therecipe/qt - there will be no problem at all, because this is an only thing that links statically. Qt itself links dynamically and isn't a problem.

Once again - LGPL isn't a problem at all. Problem - static linking of therecipe/qt repo. That's what this thread is about - another license, so proprietary projects can use this repo. We can only hope that @therecipe won't do too high price for license.

@SimplicityApks
Copy link

I get what you mean and agree with it, though I wouldn't say LGPL isn't a problem at all. The problem with the LGPL is that using it outside of the shared lib Linux distribution world with C confuses its wording entirely. There is no difference in using LGPL with static linking compared to the much more common GPL, only unclarity about what is possible and what is not.

The equivalent of the LGPL in the Go world would be the MPL, as it at least allows closed sourced projects using the lib. Granted, this does not allow you to exchange the library with your own, but I've never seen a real use case for this and it is still possible here with a modified Qt shared lib. The main point of copyleft, that modifications have to be public, still is a strong requirement of the MPL!
If MPL for whatever reason is not an option LGPL still makes no sense, as it is only a more complicated wording with tons of cornercases around the GPL.

tl;dr LGPL works but is in reality only a uselessly obfuscated GPL here.

@SimplicityApks
Copy link

On a personal note: @therecipe if you want to be nice and make some money go MPL+commercial license for a few bucks (which someone like me will pay you after I've liked your work). Or you can be unfriendly and do GPL+commercial if that sounds better to you. I doubt the second option will be succesful (at least myself won't be using the lib) but its at least better that the current LGPL nonsense.

@therecipe
Copy link
Owner Author

@SimplicityApks

@therecipe can you elaborate on why you chose the LGPL instead of the GPL if you're so concerned about commercial use of the lib?

I think LGPL is the best fit for this, as it's more permissive for open source users then GPL and at the same time more strict for closed source (and/or commercial users) then MPL.
LGPL seems to be the golden middle between MPL and GPL from my perspective.

LGPL might be complicated to understand for closed source users, but it's relatively easy to understand for open source users. (Okay, it's not as easy to understand as MIT/BSD but people would have to learn about LGPL sooner or later anyway, when they look into Qt's licenses)

Also LGPL is still much more permissive without static linking than GPL.
And on a side note, I'm still pissed that the Go devs stopped working on dynamic linking for Go libs, as I really hoped that they would get it working.

@pztrn

Let me please do a proposal as open-source lover and yet as person who want to make some buck on software written with this bindings in future. Please, allow small companies (for example to companies who have 5-10 employes) and to individual entrepreneurs to use your bindings for free or for really small about of buck (like $5 or $10).

I won't promise nothing, but yeah I would love to offer different tiers and then keep it free/cheap for individuals/startups.

@jrmiller82
Copy link

@therecipe You still haven't addressed the fact that the LGPL is incompatible with statically linked binaries a la Go.

@therecipe
Copy link
Owner Author

@jrmiller82
I'm not quite sure what you mean, it's not incompatible afaik. Could you elaborate?

@jrmiller82
Copy link

The LGPL is incompatible with statically linked binaries. Statically linking an LGPL library subjects the whole project to copyleft whereas dynamically linking would not. Go in its current form is mostly statically linked. We already discussed this above.

@therecipe
Copy link
Owner Author

Oh, sorry thought there was some new info that I missed.
You probably meant "addressed" as in "took action"?
If so, then yeah this will still take some time.

@shuttleone
Copy link

Hi, it has been a while; Is a new license still planned for this project?

@therecipe
Copy link
Owner Author

Yes, I have no fixed date, but maybe sometime in spring/summer 2019 once everything is properly vetted and I'm comfortable handing out licenses.

This also somewhat depends on #382 since the project probably needs to be rebranded first.

However, I haven't had the time to update the FAQ in the wiki yet to make this clear, but it's already possible to use the binding for proprietary developments without the need for a commercial license.
You will only need to compile your programm with the -comply flag, which then dumps some object files generate during the compilation and some small script into a seperate directory.
Now you would only need to make these files available to your customers in some form, to comply with the binding's LGPL license as well as with Qt's LGPL license.

But there is some downside I don't want to hold back, namely that these object files contain more infos than your final binary, such as debug symbols and probably full function signatures but I haven't really looked into them that deeply.
To test the object files, you will only need to run the helper script which then should create a working version of your binary.

Also this currently only works for windows, linux, mac, ios and android builds iirc, but feel free to open an issue if you run into any problems or you need it to work for some other targets.


Also just to clarify this again, most people won't actually need a commercial license unless they plan to create closed source application and intent to distribute the final binary out-of-house.
And in this case they can already use the -comply workaround for free.

All other people who want to use this either in-house or publish their source publicly have no restrictions whatsoever, neither for their license nor for something else.
(As far as for this binding's LGPL license, Qt's licenses might have other restrictions for example the iOS builds or some modules such as charts, or the WebAssembly platform support)

disclaimer: IANAL, TINLA and DYOR

@shuttleone
Copy link

Thank you. I was unaware of the -comply functionality. This is good enough for me. I would still like to support the project if/when a commercial license is available.

@pieceofsoul
Copy link

Hi! As a longtime Qt user, moving from C++ to Go, I was happy to discover this nice Go binding and I would really love to build upon it! Since my current project is required to be distributed as closed source application:

b) a second (commercially) license which allows static linking => doesn't exists yet

Is there any news regarding the planed dual licensing?

@develar
Copy link

develar commented Sep 12, 2020

Yeach... another confirmation that Qt is dead and the reason why Electron wins and why solutions like https://github.com/fyne-io/fyne arise and growing. My app will be open-source, but fact that no clear and simple answer for commercial apps on this binding means that technology is dead and more as a play than a serious solution...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests