Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Using Qt under LGPLv3

At Qt Day 2019 in Florence, Italy, I gave a presentation about "Using Qt under LGPLv3".
In the first part, I go through Section "4. Combined Works" and explain the obligations of LGPLv3 in detail.
When you combine your application with the Qt libraries, you can keep closed the source code of the application and publish the application and the Qt libraries under your license terms. You must satisfy the following conditions.
On a physical medium like a USB drive or DVD, you must provide the source code of the Qt libraries, the text of the LGPLv3 and GPLv3, the Copyright notices of the Qt libraries, a description of your modification of the Qt libraries and the installation information. If your application has a user interface, you must display the license texts of the LGPLv3 and GPLv3 and the Copyright notices in this user interface.
The installation information - a.k.a. the anti-tivoisation clause - describes how the user can build a modified version of Qt, how to install this version on the device, and how to run the application with the modified Qt version on the device. If you build a B2B product, you need not provide the installation information.
In the second part, I compare the costs of Qt Commercial and Qt LGPLv3. You must check the licenses for all packages of the (embedded) Linux system, no matter whether you use Qt Commercial or Qt LGPLv3. Qt commercial adds per-developer fees and per-unit fees (royalties). If you use Boot2Qt, Qt for Automation, Qt Safe Renderer or other commercial add-ons, Qt Commercial may well be worth the additional costs.
In the third part, I show how Yocto (bitbake) and Fossology help with the compliance checks. Fossology is a license and copyright scanner.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Using Qt under LGPLv3

  1. 1. Copyright 2019, Burkhard Stubert Using Qt under LGPLv3 Burkhard Stubert – Solopreneur & Chief Architect, Embedded Use I help teams succeed with embedded systems
  2. 2. Copyright 2019, Burkhard Stubert When Downloading Open-Source Qt from qt.io Screenshot: 6 March 2018 2 Nonsense!
  3. 3. Copyright 2019, Burkhard Stubert Outline – Using Qt under LGPLv3 • The obligations of Qt LGPLv3: made understandable • When to use Qt LGPLv3 and when Qt Commercial • How Yocto and Fossology help with FOSS compliance 3
  4. 4. Copyright 2019, Burkhard Stubert LGPLv3 Obligations: “4. Combined Works” • You may convey Combined Work under your terms, if you ... • give prominent notice that Application uses Qt libraries under LGPLv3 (4a), and • provide copies of LGPLv3 and GPLv3 licenses (4b), and • display copyright notices of Qt libraries and license texts of LGPLv3 and GPLv3 in Application’s GUI (4c), and • use a shared library mechanism for linking Application with modified but interface-compatible versions of Qt libraries (4d1), and • provide installation information (according to section 6 of GPLv3) how to build a modified Qt version, how to install Qt on device, and how to run Application with Qt on device (4e). For B2C: yes. For B2B: no. 4
  5. 5. Copyright 2019, Burkhard Stubert The Combined Work: Application + Qt Libraries 5 Application(s) closed source, proprietary Qt Libraries LGPLv3, GPLv3, Commercial Auxiliary Libraries GPL, LGPL, BSD, MIT, Apache, many others System Libraries GPL but exempted Linux Kernel GPLv2 For both Qt Commercial and Qt LGPLv3: Compliance check needed for all modules (500-1000 modules) For both Qt Commercial and Qt LGPLv3: Compliance check needed (< 20 modules) Effort for checks: Qt LGPLv3 ≈ Qt Commercial
  6. 6. Copyright 2019, Burkhard Stubert Convey Combined Work under Your Terms 6 Application proprietary Qt Library LGPLv3 Combined Work proprietary Application proprietary Qt Library Commercial Combined Work proprietary Application proprietary Qt Library GPLv3 Combined Work GPLv3 violation + LGPLv3 obligations + Qt Commercial obligations (e.g., royalties, per-developer fees) LGPLv3 = GPLv3 + extra permissions
  7. 7. Copyright 2019, Burkhard Stubert Convey Combined Work: Product + Physical Medium 7 Source code of Qt libs Text of LGPLv3 and GPLv3 Copyright notices Modifications Installation information + Qt libraries: Object code Application: Object code GPLv3 (6a) LGPLv3 (4) Display in GUI
  8. 8. Copyright 2019, Burkhard Stubert Convey Combined Work: Product + Written Offer 8 Source code of Qt libs Text of LGPLv3 and GPLv3 Copyright notices Modifications Installation information Qt libraries: Object code Application: Object code GPLv3 (6b) LGPLv3 (4) Display in GUI + Written offer: Valid for max(3y, support)
  9. 9. Copyright 2019, Burkhard Stubert Displaying License and Copyright in GUI (1) 9
  10. 10. Copyright 2019, Burkhard Stubert Displaying License and Copyright in GUI (2) 10
  11. 11. Copyright 2019, Burkhard Stubert Displaying License and Copyright in GUI (3) 11
  12. 12. Copyright 2019, Burkhard Stubert When to Provide Installation Information • User Product = • [tangible] “consumer product” [...] normally used for personal, family, or household purposes, or • anything designed or sold for incorporation into a dwelling • In doubt: it’s a User Product! • Examples: phones, TVs, STBs, home appliances, cars, medical devices used at home, security cameras • Commercial Product: • Examples: tractors, harvesters, trucks, professional appliances, medical devices in hospitals 12 User Product? NoYes Installation Information Installation Information B2C B2B • Installation Information = • Anything required to build a modified Qt version, install and execute it on the User Product
  13. 13. Copyright 2019, Burkhard Stubert Example Installation Information (1) 13 (1) User installs SDK (built by bitbake meta-toolchain-qt5) /path/to/<distro>-glibc-x86_64-meta-toolchain-qt5-armv7at2hf-neon-toolchain-2.4.2.sh (2) User unpacks all Qt source archives into /path/to/qt5 (3) User performs shadow build in /path/to/build-qt5 ../qt5/configure -prefix /usr/local/qt -extprefix /path/to/install-qt5 -device linux-imx6-g++ -device-option CROSS_COMPILE=/path/to/sdk/sysroots/x86_64-fslcsdk-linux/usr/bin/ arm-fslc-linux-gnueabi/arm-fslc-linux-gnueabi- -sysroot /path/to/sdk/sysroots/armv7at2hf-neon-fslc-linux-gnueabi -opensource –confirm-license <more options> make –j32 make install
  14. 14. Copyright 2019, Burkhard Stubert Example Installation Information (2) • (4) User installs Qt shared libraries on product • Copy Qt shared libs from USB drive to product • Download Qt shared libs from server to product • Copy Qt shared libs from connected laptop to product (via CAN or Ethernet) • ... • Notes on (4): • Shared libs may be signed • Warning OK that user loses warranty, support and even vehicle operation license • Qt libs can undergo AppStore-like approval process • Functionality must not be restricted – unless modified Qt behaves maliciously 14
  15. 15. Copyright 2019, Burkhard Stubert Outline – Using Qt under LGPLv3 • The obligations of Qt LGPLv3: made understandable • When to use Qt LGPLv3 and when Qt Commercial • How Yocto and Fossology help with FOSS compliance 15
  16. 16. Copyright 2019, Burkhard Stubert Costs of Qt Commercial vs. Qt LGPLv3 Year Qt Commercial Costs € 1 3 developers: 5700 € each 1000 units: 7.50 € each 24,600 2 3 developers: 1900 € each 1000 units: 7.50 € each 13,200 3 3 developers: 1900 € each 1000 units: 7.50 € each 13,200 4 3 developers: 1900 € each 1000 units: 7.50 € each 13,200 5 3 developers: 1900 € each 1000 units: 7.50 € each 13,200 License check of non-Qt packages 20,000 Sum 97,400 16 Year Qt LGPLv3 Costs € 1 Initial effort 12,000 2 Update effort 3,000 3 Update effort 3,000 4 Update effort 3,000 5 Update effort 3,000 Sum 24,000 ~80% effort needed for non-Qt packages: 20,000 Needed in Qt Commercial as well! LGPLv3 cost independent of number of developers and units!
  17. 17. Copyright 2019, Burkhard Stubert What’s the Additional Value of Qt Commercial? • Commercial-only features • No user update of Qt libraries required • Qt for Device Creation (Boot2Qt) • Qt Lite (esp. for Cortex-M) • Qt Virtual Keyboard (also: GPLv3) • Qt 3D Designer: GPLv3 runtime • Qt Support Helpdesk • Qt for Automotive (extra fee) • Qt for Automation: MQTT, OPC UA (extra fee) • Qt Safe Renderer (extra fee) • Qt Application Manager (extra fee) 17 • Also available for LGPLv3 • Static linking (LGPLv3/4d0) • Qt Quick compiler (since Qt 5.12) • Qt Virtual Keyboard (if run in separate process)
  18. 18. Copyright 2019, Burkhard Stubert Outline – Using Qt under LGPLv3 • The obligations of Qt LGPLv3: made understandable • When to use Qt LGPLv3 and when Qt Commercial • How Yocto and Fossology help with FOSS compliance 18
  19. 19. Copyright 2019, Burkhard Stubert Some Wishful Thinking ... 19 Magic ScriptYocto recipes /path/to/qtmultimedia qtmultimedia-5.11.3+<rev>-patched.tar.gz LICENSE.LGPL3 LICENSE.GPL3 USED-LICENSE -> LICENSE.LGPL3 COPYRIGHT MODIFICATIONS /path/to/qtserialbus ... For every package:
  20. 20. Copyright 2019, Burkhard Stubert The Harsh Reality ... 20 bitbake Yocto recipes tmp/deploy/sources/arm-poky-linux-gnueabi/ qtmultimedia-5.11.3+<rev>/ qtmultimedia-5.11.3+<rev>-patched.tar.gz tmp/deploy/licenses/qtmultimedia generic_* LICENSE.FDL LICENSE.GPL2 LICENSE.GPL3 LICENCE.GPL3-EXCEPT LICENSE.LGPL3 recipeinfo Fossology upload export Identify licenses and copyright notices qtmultimedia.spdx convey.py /path/to/qtmultimedia qtmultimedia-5.11.3+<rev>-patched.tar.gz LICENSE.LGPL3 LICENSE.GPL3 USED-LICENSE -> LICENSE.LGPL3 COPYRIGHT MODIFICATIONS ???
  21. 21. Copyright 2019, Burkhard Stubert Creating Source Archives with Yocto 21 Create archives for patched sources of all FOSS packages: # In local.conf or distro configuration INHERIT += "archiver" COPYLEFT_TARGET_TYPES = "target" COPYLEFT_LICENSE_EXCLUDE = "CLOSED Proprietary" COPYLEFT_LICENSE_INCLUDE = "" Don’t create source archive for Application: # In application recipe LICENSE = "CLOSED" Note: By default only GPL*, LGPL* and AGPL* included Rebuild your Linux image with bitbake
  22. 22. Copyright 2019, Burkhard Stubert Output of Yocto Build 22 tmp/deploy/licenses/qtmultimedia generic_BSD generic_GFDL-1.3 generic_GPL-2.0 generic_GPL-3.0 generic_LGPL-3.0 generic_The-Qt-Company-Commercial generic_The-Qt-Company-GPL-Exception-1.0 LICENSE.FDL LICENSE.GPL2 LICENSE.GPL3 LICENCE.GPL3-EXCEPT LICENSE.LGPL3 recipeinfo tmp/deploy/sources/arm-poky-linux-gnueabi/ qtmultimedia-5.11.3+<rev>/ qtmultimedia-5.11.3+<rev>-patched.tar.gz LICENSE: GFDL-1.3 & BSD & ( GPL-3.0 & The-Qt-Company-GPL-Exception-1.0 | The-Qt-Company-Commercial ) & ( GPL-2.0+ | LGPL-3.0 | The-Qt-Company-Commercial ) PR: r0 PV: 5.11.3+<rev> ??? Use Fossology to clarify license situation!
  23. 23. Copyright 2019, Burkhard Stubert License Analysis with Fossology: Upload > From File 23 Nomos Keywords: Find potential license texts Nomos Regular Expressions: Finds and identifies most relevant license texts and their variants Monk Full Text Matches: Finds and identifies known license texts
  24. 24. Copyright 2019, Burkhard Stubert License Analysis with Fossology: Browse > qtmultimedia-<rev>-patched.tar.gz 24 Goal: Green clearing status for all files Clear irrelevant folders: Mark all folders except src as irrelevant, because they are not used in product
  25. 25. Copyright 2019, Burkhard Stubert License Analysis with Fossology: Bulk Recognition of Source Files (1) 25 (1) Select typical source file (2) Use bulk recognition for identifying all similar files
  26. 26. Copyright 2019, Burkhard Stubert License Analysis with Fossology: Bulk Recognition of Source Files (2) 26 (1) Add LGPL-3.0 as identified license (2) Remove all other licenses (3) From selected file, copy search text for identification (4) Perform actions (1) and (2) to all files matching (3)
  27. 27. Copyright 2019, Burkhard Stubert License Analysis with Fossology: Bulk Recognition of Source Files (3) 27
  28. 28. Copyright 2019, Burkhard Stubert License Analysis with Fossology: Individual Check for Remaining Red Files • src/multimedia/doc • Mark folder as irrelevant • src/mulimediawidgets/doc • Mark folder as irrelevant • src/plugins/winrt • qwinrtcameraflashcontrol.cpp/h: license text slightly different to one used in bulk scan • Identify license for each file individually • In root directory: • Mark LICENSE.(FDL | GPL2 | GPL3 | GPL3-EXCEPT) as irrelevant • Set LICENSE.LGPL3 as main license 28 All files and folders green! License check done!
  29. 29. Copyright 2019, Burkhard Stubert Copyright Analysis with Fossology: Ignore Irrelevant Folders (1) 29 Irrelevant folders
  30. 30. Copyright 2019, Burkhard Stubert Copyright Analysis with Fossology: Ignore Irrelevant Folders (2) 30 (1) Select irrelevant occurrences (2) Delete selected occurrences Folder: config.tests
  31. 31. Copyright 2019, Burkhard Stubert Copyright Analysis with Fossology: Ignore Irrelevant Folders (3) 31
  32. 32. Copyright 2019, Burkhard Stubert Copyright Analysis with Fossology: Result 32 Down from 102 entries!
  33. 33. Copyright 2019, Burkhard Stubert Export Results of License and Copyright Analysis 33 From combobox, select Generate SPDX report in tag:value format Save report qtmultimedia.spdx in tmp/deploy/licenses/qtmultimedia/
  34. 34. Copyright 2019, Burkhard Stubert License and Copyright Report: qtmultimedia.spdx – Package Information 34 PackageName: qtmultimedia-5.11.3+gitAUTOINC+6966a09c9a-r0-patched.tar.gz PackageFileName: qtmultimedia-5.11.3+gitAUTOINC+6966a09c9a-r0-patched.tar.gz SPDXID: SPDXRef-upload10 PackageDownloadLocation: NOASSERTION PackageVerificationCode: 1ca0b32cc48660f2e14d0711484bd4299ed08cde PackageChecksum: SHA1: 68b79d7255dd1e50296c154bb935deb16fadd561 PackageChecksum: MD5: 251f4ce5a3f7383a79cacdefe4c56e96 PackageLicenseConcluded: LGPL-3.0 PackageLicenseDeclared: LGPL-3.0 PackageLicenseComments: <text> licenseInfoInFile determined by Scanners: - nomos ("3.4.0-78-g625bdf3".625bdf) - monk ("3.4.0-78-g625bdf3".625bdf) </text> PackageLicenseInfoFromFiles: NOASSERTION PackageCopyrightText: NOASSERTION Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-upload10
  35. 35. Copyright 2019, Burkhard Stubert License and Copyright Report: qtmultimedia.spdx – File Information 35 ##File FileName: git/src/multimedia/radio/qradiotuner.cpp SPDXID: SPDXRef-item19743 FileChecksum: SHA1: ca858ab8655... FileChecksum: MD5: 51862849aa23... LicenseConcluded: LGPL-3.0 LicenseInfoInFile: LGPL-3.0 LicenseInfoInFile: LicenseRef-Dual-license LicenseInfoInFile: GPL-2.0+ LicenseInfoInFile: LicenseRef-Qt.Commercial FileCopyrightText: <text> Copyright (C) 2016 The Qt Company Ltd. Contact: https://www.qt.io/licensing/ </text> ##File FileName: git/examples/multimedia/declarative- camera/ZoomControl.qml SPDXID: SPDXRef-item18287 FileChecksum: SHA1: 66758b5dddd... FileChecksum: MD5: 6145e7cb5e10... LicenseConcluded: NOASSERTION LicenseInfoInFile: BSD-3-Clause LicenseInfoInFile: LicenseRef-Dual-license LicenseInfoInFile: LicenseRef-Qt.Commercial FileCopyrightText: NOASSERTION
  36. 36. Copyright 2019, Burkhard Stubert Resources • License texts • LGPLv3: https://www.gnu.org/licenses/lgpl-3.0- standalone.html • GPLv3: https://www.gnu.org/licenses/gpl-3.0- standalone.html • Lawyers • Dr. Miriam Ballhausen, Senior Associate, Bird & Bird LLP • Dr. Catharina Maracke, Associate Professor of IT and Data Law, Kühne Logistics University • Dr. Till Jaeger, Attorney at Law, JBB • Books • Heather Meeker: ”Open Source For Business – A Practical Guide to Open Source Software Licensing”, 2nd edition 2017 • Till Jaeger, Axel Metzger: ”Open Source Software – Rechtliche Rahmenbedingungen der freien Software”, 4. Auflage 2016, C. H. Beck 36
  37. 37. This presentation is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Copyright 2019, Burkhard Stubert Thank you J Mail: burkhard.stubert@embeddeduse.com Web: http://www.embeddeduse.com

×