Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Abiding by LGPL



  • Complete corresponding source code of the library used with the application or the device built using LGPL, including all modifications to the library, should be delivered with the application (or alternatively provide a written offer with instructions on how to get the source code). 
    
    The user of an application or device created with LGPL library has to be notified of their rights by providing a copy of the LGPL license text to the user and displaying a prominent notice about using the LGPL library – i.e. it is not allowed to hide the fact the LGPL library is used.
    

    In order to satisfy the above requirements of Qt's LGPL, is it sufficient to provide the offer of source code and licence text in the "Legal" section of the software's website, or does it have to be bundled in the application?

    Alternatively, will a text file with the above in the application's folder be adequate?


  • Lifetime Qt Champion

    Hi,

    WARNING: I am not a lawyer

    It's not Qt's LGPL, it's just the LGPL itself and it concerns all your dependencies that uses that licence.

    Qt provides QApplication::aboutQt to show the information about the version of Qt you are using.

    You have to provide an about screen that can be accessed by your users that gives all the required informations.

    Note that your application code does not need to be provided but your users have to be able to switch all LGPL dependencies for other versions. What you are required to publish are all the patches you may have applied to the libraries you are using beside the sources of said dependencies. Doing that through a website is one way to do it.

    For a better answer: ask a lawyer



  • @EaccB said in Abiding by LGPL:

    e created with LGPL library has to be

    Do I have to use aboutQt()? In my general about section, can I simply have something like:

    "This software uses Qt version x.x.x available under LGPL v3", followed by the full LGPL text? In fact, do I need to even acknowledge Qt in the application?


  • Lifetime Qt Champion

    @EaccB said in Abiding by LGPL:

    do I need to even acknowledge Qt in the application?

    If I'm not mistaken this is one of the requirements of LGPLv3, so you have to.
    You do not have to use QApplication::aboutQt, you can design your own way to show this information.



  • So, "This software uses Qt version x.x.x available under LGPL v3", followed by the full LGPL text should be sufficient? Could I have the notice in the user manual instead?


  • Lifetime Qt Champion

    @EaccB said in Abiding by LGPL:

    followed by the full LGPL text should be sufficient?

    Should be (I'm not a lawyer!).
    "Could I have the notice in the user manual instead?" - not sure about this.


  • Lifetime Qt Champion

    @EaccB said in Abiding by LGPL:

    In fact, do I need to even acknowledge Qt in the application?

    You have to acknowledge all the LGPL dependencies you use. Be it Qt or any other.
    If you do not want to acknowledge your use of Qt, then you should get a commercial license. And AFAIK, no, you can't just put that beside in some user guide.

    You are not required to use the aboutQt facility as long as you provide an equivalent. The good thing about aboutQt is that you do not have to update it since it will always provide the correct information.

    And again, if you want to be sure, go ask a lawyer. Especially since you seem to try to not fulfill licences constraints.



  • Thanks guys. It's not that I don't want to attribute Qt, I'd just rather not have my application littered with copyright, licence, branding, notices, etc.

    On a slightly unrelated note, the software will come pre-deployed on a laptop (rented to user). LGPL states that the user should be able to replace DLLs with other or modified versions of Qt and reverse engineering should be allowed to the extent that allows this.

    Is it acceptable to supply a laptop that disables an internet connection and external media (USB stick, etc) and states in its EULA that nothing can be transferred on/off the laptop, or at the very least prevents the user from removing the application from the machine? In theory, re-linking and reverse engineering would still be possible; it would just require the user to develop their own tools directly on the machine, and manually copy source code over.


  • Lifetime Qt Champion

    @EaccB said in Abiding by LGPL:

    Is it acceptable to supply a laptop that disables an internet connection and external media (USB stick, etc) and states in its EULA that nothing can be transferred on/off the laptop, or at the very least prevents the user from removing the application from the machine? In theory, re-linking and reverse engineering would still be possible; it would just require the user to develop their own tools directly on the machine, and manually copy source code over.

    Why all this? What is the problem if the user replaces the Qt DLLs (this is by the way not "reverse engineering")?


  • Lifetime Qt Champion

    @EaccB said in Abiding by LGPL:

    Thanks guys. It's not that I don't want to attribute Qt, I'd just rather not have my application littered with copyright, licence, branding, notices, etc.

    That's why you have that about box that allows to provide all the required information.

    Take for example Garmin's GPS software, they have one page with all the licences and stuff. It's not over the maps nor in front of the user. It's just easy to access and provides all the required data.



  • @jsulm

    I'd rather keep my application source as closed as possible. Is what I suggested possible without breaching LGPL?


  • Lifetime Qt Champion

    The LGPL does not impose to release your source code. The GPL makes it mandatory to provide your sources on demand. These are two different license.
    What the LGPL says is that you have to provide the changes you made to a LGPL library you use and the possibility for your users to switch the libraries for a different version. If you link all LGPL libraries dynamically, then the second part is covered.



  • @SGaist

    Yes, but LGPL allows reverse engineering of the application to the extent necessary to link with the new/modified DLLs. Ideally I'd like to make this as difficult as possible, hence my previous question.


  • Lifetime Qt Champion

    If you use a LGPL library, its interface is known. The only thing people have to do is replace the library files.



  • @SGaist

    Replacing the library files would be made difficult without access to internet/external media. Would this count as Tiviozation? I. don't think so as the means to replace the library remain, it just makes it more difficult by requiring the user to either develop their own linking tools and manually copy the Qt source of the version they want (i.e. typing it out).

    FYI, in reality, the likelihood of anyone wanting to swap out the DLLs is extremely low so it's not something I really need to worry about. I'm asking more hypothetically and to help me understand the LGPL in a bit more detail.


  • Lifetime Qt Champion

    Then as I already wrote: ask a lawyer.


  • Moderators

    @EaccB said in Abiding by LGPL:

    I'm asking more hypothetically and to help me understand the LGPL in a bit more detail.

    The most important thing to understand is this: The GNU licenses (including the LGPL) are primarily concerned with the freedom to run, study, modify, and share code.

    So, if you use Qt in your application under the LGPL, you should prepare accessible solutions for each of these potential questions from your users:

    • How can I obtain a copy of the Qt source code from @EaccB?
    • How can I study and modify the Qt source code that I received from @EaccB?
    • When I modify the Qt source code, how can I share my version with other people?
    • When I modify the Qt source code, how can I build the DLLs using my version of the code?
    • Regarding @EaccB's application: How can I replace the Qt DLLs that the app uses and still have the app run properly? (Either with my own custom-built DLLs or with an officially-built DLL that I can download)

    Note: While I used Qt as an example here, the same applies to all other LGPL-licensed libraries that you use in your application.

    Is it acceptable to supply a laptop that disables an internet connection and external media (USB stick, etc) and states in its EULA that nothing can be transferred on/off the laptop, or at the very least prevents the user from removing the application from the machine?

    Can you provide accessible solutions to the questions I posed above?

    requiring the user to either develop their own linking tools and manually copy the Qt source of the version they want (i.e. typing it out).

    That doesn't sound accessible to me. It really goes against the spirit of the (L)GPL.

    FYI, in reality, the likelihood of anyone wanting to swap out the DLLs is extremely low so it's not something I really need to worry about.

    The likelihood of users wanting to exercise their LGPL-guaranteed freedoms has no bearing on your obligations. You are obliged to ensure that in the event someone wants to exercise these freedoms, they will be able to.


  • Moderators

    @EaccB said in Abiding by LGPL:

    Replacing the library files would be made difficult without access to internet/external media. Would this count as Tiviozation?

    I would, personally, interpret it as such. What'd be the difference from putting a dongle with a driver, or imposing arbitrary restrictions on the libraries that can be used, for example, by hooking with LdrRegisterDllNotification?
    Just leave it be, even if it may not be strictly illegal, which only a lawyer can advise you on, it's borderline amoral.

    Yes, but LGPL allows reverse engineering of the application to the extent necessary to link with the new/modified DLLs.

    This isn't reverse engineering, it's a requirement for a reason ... if I suspect you've changed the library in a way that I feel is distasteful (in any possible meaning of the word), I shall be able to swap it with my own fresh build. Also if I were to really want to reverse engineer your application, I wouldn't play a guessing game by relinking with some modified library, I'd just load it in the disassembler and crack it open.


Log in to reply