On 13/01/14 19:34, �� Tiib wrote:
> On Monday, 13 January 2014 15:58:37 UTC+2, David Brown wrote:
>> On 05/01/14 05:06, �� Tiib wrote:
>>> On Sunday, 5 January 2014 02:36:34 UTC+2, Ike Shaffer wrote:
>>>> Mr Flibble wrote:
>>>>
>>>>>> Then I guess you can skip reading that LGPL manifest and just send an
>>>>>> e-
>>>>>> mail to them, telling that you intend to use their crap, and make big
>>>>>> money.
>>>>>>
>>>>>> Let them call you an imbecile! LOL
>>>>>>
>>>>>> You are a wise man flib
>>>>>
>>>>> I've decided that as well as being an idiot you are also a troll so
>>>>> welcome to my killfile.
>>>>
>>>> Ohh yes, you lost the debate, proved as imbecile.
>>>>
>>>> Just send that email, flib, tell them you won't register nor pay a shit.
>>>>
>>>> Let them conclude this discussion. No need need for their LGPL reading.
>>>
>>
>> (I know this is replying to a week-old post - I've been on holiday.)
>> And of course, IANAL - this is just my understanding of the LGPL in
>> general, and not Qt in particular.
>
> I just posted it to conclude the back and forth trollish name-calling
> with some useful guidance how to do it. I did use words *must* and
> *can't* may be too strongly, sorry. Indeed there are (too painful even
> for my enemies) ways how to not follow that guidance.
Fair enough - I don't think that argument was getting anywhere! But I
like to try to be accurate in such posts, because you never know when
someone will take it out of context and /assume/ it is accurate. And of
course, there is always plenty to learn by getting corrected in Usenet :-)
>
>>> It is perfectly legal to use dynamically linked Qt in commercially
>>> (or how ever you want to license it) distributed application. There are
>>> only such limitations:
>>> 1. Your application must be dynamically linked to the Qt components that
>>> came with your downloaded LGPL Qt distribution. No static linking allowed.
>>
>> That's not quite true (assuming Qt uses the standard LGPL). You can
>> also make your application available in a linkable object form. The
>> point is that the user (anyone legally obtaining the application source
>> or binary) should be able to take the source for the LGPL library (Qt in
>> this case), modify it if they want, re-compile it, and link it with your
>> application code. The linking can be static or dynamic.
>
> However ... we don't want to sell half-built binaries with removed
> link-time optimisations as LGPL 2.1 6.a) ... or do we?
It is unusual, but I have heard of it being done. For code running on
an OS like Windows or Linux, it would be much more practical to put the
secret sauce in a dll/so file if you can't simply use the dynamic
library directly. But for embedded systems, dynamic linking is often
hard or inefficient, and so linkable object files is one way to get a
reasonably efficient, license-compliant and secret solution.
>
>> Of course, having the LGPL code as a dynamic library is by far the most
>> common solution - but linkable object code for static linking is allowed.
>
> The idea of static linking is to distribute less binaries that are better
> optimised. "Allowed" is distribution of more binaries that are worse
> optimised. I am in difficulties to imagine why we want that.
Static linking is also vital for systems that don't support dynamic
linking (such as small embedded systems). And it should be pretty much
equally optimised if I take my secret code, compile it, and link it to a
static version of the LGPL library as if I compile my code and give you
the object files so that you can link in the static LGPL library
yourself. (LTO would change that, but I think using LTO with the LGPL
library could violate the license.)
As I said, it is unusual - but it /is/ a license compliant solution.
>
>>> 2. You can�t make changes to the Qt source code itself and sell your
>>> application based on the changed version of Qt.
>>
>> The LGPL does not allow Qt to make that kind of restriction. I suppose
>> it is possible that Qt are using a modified LGPL with additional
>> restrictions like this, but I did not see that on their website (though
>> I only had a very quick look). The whole point of LGPL is that you -
>> either the developer or the end user - can take the code and change it
>> as you want. But any changes you make must be made available to anyone
>> else to whom you give or sell the binary code, so that they too can
>> modify the LGPL'ed code (and re-compile and re-link it). But you can't
>> make changes to the Qt stuff and keep these changes secret from your
>> customers (as you can when using the commercial Qt license).
>
> Yes, that was what I meant, we can not make unpublished changes to
> LGPL library. If we do whatever changes to Qt we have to publish that
> modded Qt too and that means again some pain we don't desire.
OK. You /said/ that you can't make changes - but it is precisely the
ability to make changes that a major motivation for the GPL/LGPL. So it
is good to get this clarified. (And if anyone is in any doubt as to
what "publishing the modifications" means here, they can look it up in
the GPL/LGPL faq pages, because it is too complicated to explain here...)
>
>>> 3. You must inform users of your application that Qt is used in the
>>> application in some licence text or in a readme somewhere within your
>>> distributed application files.
>>
>> I don't know that you need mention Qt explicitly like this, but you /do/
>> have to provide the user with the source code for the LGPL code (i.e.,
>> the Qt library), with any modifications you have made. You can include
>> the source directly, or a written offer valid for 3 years (etc., etc.).
>
> If we followed "1." and "2." then we did not make any changes and so
> we do not need to publish the Qt library. Then we just mention it as
> dependency.
>
>> In practice, at least in the *nix world, you provide the application
>> without any Qt library and dynamically link to the shared libraries on
>> the end-user's system. As you are not distributing any LGPL code (using
>> headers is allowed), you don't have to say much - but of course you
>> would list the Qt dll/so files needed as part of your system requirements.
>
> However if we modified Qt and our application needs that Qt then there
> must be some ways to acquire the modded Qt in source code form
> for all users and ways to check that it is the correctly modded Qt for
> application.
Yes - although "all users" means everyone to whom you have legally given
or sold the code. You don't have to make it publicly available (but you
can't stop people who have legal access to the code from taking the
modified LGPL code and passing it on to anyone else).
I don't think you have to provide any way to /check/ that the Qt part of
your binaries is generated from the modified Qt code you distribute -
but if it is not the same, then you are breaking the LGPL license. And
users must be able to compile the modified Qt code and link it in
themselves - in that way they can be sure what code is running.
>
>>> 4. You must provide a copy of the Qt LGPL licence file together with your
>>> distributed application files.
>>>
>>> These things above can't be show stopper problems.
>>
>> They are not - a lot of systems are made using the LGPL versions of Qt.
>>
>>> The biggest annoyance with Qt is that it tends to create large binaries.
>>> Lesser annoyance is that it uses custom preprocessors that do not
>>> understand too well C++ (particularily templates and preprocessor) and
>>> other tools tend also not to understand Qt crap (underlining it red
>>> and reporting errors).
>>>
>>
>> It is this second point that puts /me/ off using Qt - I can live with
>> big binaries for my PC software.
>
> If to use Qt only as GUI layer and to develop that with Qt tools (drag
> and drop like OP asked) then it is easy. If to use it as framework for
> whole application then eventually there will be desire to use other
> tools (that may need to read/write code) and that it is difficult.
>
>> Another annoyance is that until relatively recently, the Python bindings
>> (PyQt) were under the GPL (or a commercial licence), rather than the
>> LGPL (or Python licence), meaning you couldn't use Python and Qt without
>> making the whole application as GPL or paying for the commercial
>> license. Now that Nokia's PySide bindings are complete for Python LGPL
>> Qt development, I might look again at it for future software.
>
> That PyQt is AFAIK separate (not C++; Python) plugin by separate
> corporation. There are other ways how to bind Python to C++ project.
>
That is correct - PyQt is from a third-party commercial company. The
"official" Python Qt bindings (from Nokia, I believe, and now handled by
the new Qt folk) are PySide, which will make Python Qt development a lot
easier (as well as having the LGPL license rather than just commercial
or GPL). Of course, there were always other ways to get Python code to
work with Qt - but not as easily, and not with as current Qt support.