App Store 是否接受与 QT 库 LGPLv3 链接的 Qt 应用程序

Does App Store accept Qt app linked with QT Library LGPLv3

可以通过任何方式向 App Store 提交 Qt Quick Controls 应用程序

在 LGPLv3 许可下且不违反 App Store 规则?

我想做的是使用 Qt 库的动态链接版本将我的应用程序部署到 iOS 商店。

我试图在每个论坛中找到答案,但似乎很难。

非常感谢任何建议。

提前致谢。

App Store 不关心您使用哪个许可证。关心的是您的应用程序的用户和库的作者。 LGPLv3 许可证的要点是最终用户必须有可能用自己的修改版本替换库。理解这一点非常重要,动态/静态/其他一​​切都只会让人分心。

让我们转向 Qt。它可在主要桌面(Windows、OSX、Linux)和移动(iOS、Android)操作系统上使用 LGPLv3 许可证。假设您开发了一个应用程序并希望关闭源代码。在桌面上,您可以 link 动态地访问 Qt 库。当最终用户安装您的应用程序时,他们可以通过以下方式替换 Qt 库:

  1. 编译自己版本的Qt库
  2. 浏览应用程序的安装位置
  3. 用自己的修改版本替换应用程序附带的原始 Qt 库

看起来很简单,对吧? LGPLv3 的主要目标已经实现。用户可以替换库。

移动到移动平台,从 Android 开始。即使您 link 动态地访问 Qt 库,我们现在也有一个小问题。用户无法导航到 C:/Program Files/YourApp 并替换 Qt 库,因为它是 Android。生根不是一种选择,因为它不适用于所有设备(并且可能不合法)。请记住,LGPLv3 的主要目标是让用户能够在他们的设备上替换库和 运行 应用程序的修改版本。

解决方案?向安装您的应用程序的每位用户提供 .apk 文件,并提供有关如何执行以下操作的详细说明:

  1. 解压您的 .apk 文件
  2. 替换 Qt 库
  3. Zipalign / pack / signtool 到新的 .apk
  4. 使用修改后的 Qt 库安装 .apk

我们来谈谈iOS。许多人说不可能将 LGPLv3 与 iOS 一起使用,因为静态 linking。错误的。同样,您只需要为最终用户提供替换 Qt 库的可能性。如何?为最终用户提供您的目标文件以重新link。或者更好的是,将所有应用程序代码和资源放在一个单独的 Qt Quick 插件中,该插件将在 iOS 的静态库存档(技术上只是所有目标文件连接在一起)中编译。然后,对于每个安装了您的应用程序的用户,您必须提供有关如何替换 Qt 库的说明:

  1. 从您的网站下载项目文件和目标文件
  2. 从 Apple 网站下载 XCode 和开发者工具
  3. 替换 Qt 库
  4. 将应用程序部署到您的设备

之前这是不可能的,因为为了在设备上部署,用户必须注册 Apple Developer Program。但现在已经不是这样了。 You can launch your app on a device using a free Apple ID account

最终用户权利受到保护。它们可以替代 Qt 库。只需确保您执行了所需的步骤:

  1. 在您的应用程序中提及您使用 Qt 库,并提及您在 LGPLv3 许可下使用它们。为 LGPLv3 lincese 提供 link。
  2. 确保替换 Qt 库的设置有效。设置一个干净的虚拟机,一步一步做所有的事情。为最终用户记录下来。
  3. 当下载了您的应用程序的用户想要替换 Qt 库时,请为他们提供一切,以便他们可以做到。

其实我觉得没有人会在意。但是你必须做好准备以防万一。不要在 Qt 论坛上尖叫您使用 Qt LGPLv3,但要确保它在应用程序的 "About" 屏幕下方某处可见。无论是否使用 Qt,Qt 公司都没有资源从 App Store 扫描每个应用程序。如果你是一个几乎零利润的小公司,他们也不会碰你。他们还有更重要的事情要做。

然而,看到在 LGPL 主题上使用 Qt 的人完全没有提供任何帮助,这是非常令人失望的。很可能所有开发人员都被指示回答 "IANAL, please contact our legal department"。法律部门会告诉你 - 购买我们的商业许可证,这是唯一的选择。在 Qt 网站上,您可以找到 Obligations of the LGPL。我并不感到惊讶,此页面上没有关于静态 linking 和提供目标文件 以重新 link 的字样。 Qt 公司只是不想告诉任何人这是可能的。

在我看来,LGPL 是一个巨大的进步,它使许多应用程序能够在不公开其源代码的情况下使用 Qt,从而为 Qt 带来了巨大的普及。更不用说诺基亚是第一个在移动设备上赞助 Qt 的人(Symbian,然后是 MeeGo)。

同时考虑 MeeGo 和黑莓,开发使用 Qt 的闭源移动应用程序并在各自的应用程序商店中发布它们没有问题。无需商业许可。

更新: 这是以前做过的。 LGPL 可以通过静态 linking 和 App Store 实现。 https://news.ycombinator.com/item?id=4302517

以防问题因为题外话而结束,我在这里复制了答案 https://opensource.stackexchange.com/questions/6463/in-2018-if-i-use-c-qt-5-10-0-to-build-a-closed-source-application-requires-ope/6495#6495

是的,有可能。

您可以使用此 Qt 应用程序模板:

https://marketplace.qt.io/products/qt-lgpl-app-template

在IOS上无法重新链接应用程序,因此它与 LGPL V3.0 不兼容(用户无法替换 Qt 库)

但是这个模板在每次重建时都会生成一个可再发行的 .zip Qt 项目。

他们的整个私有项目分布在编译的.a 库中,因此用户可以在 Qt Creator 中打开项目,重建他们的应用程序并将其加载到他们的 ipad / iphone、并且您的源代码会受到保护

注意:如果您使用的是 qtquick 编译器,则必须将其重新链接到相同版本的 Qt。

此 .zip 文件可以上传到您自己的 URL 或者您可以将其添加到您的软件资源中。

您可以在 Android 应用、静态 Windows 应用等中使用相同的模板。

相同,但 100% 自动。