我可以在付费的 Android 应用程序中使用 LGPL 库吗?我不打算修改 LGPL 库,我只想使用它。合法吗?
6 回答
在安卓免费或付费应用程序中使用 LGPL 是合法的,但要符合 LGPL,您必须:
- 向用户指示使用的库以及在哪里可以找到原始代码;
- 配置 proguard不混淆 LGPL 覆盖的代码;
- 避免在您的应用中检查签名合规性;
- 向用户指示如何更换库。
对于第 4 点,您可以指示使用 dex2jar,替换 LGPL 代码并重新签署 APK。用户需要做很多工作,但可以做到这一点,并允许最终用户重新组合或重新链接代码,如 LGPL 所说。此外,如果您的应用使用任何 google 服务,用户需要创建一个帐户来生成自己的 api 密钥等。
如果您正在制作付费的 Android 应用程序,您可能会遇到 LGPL 的特定问题:可替代性。通常,它规定当您分发组合作品时,您必须为用户提供用不同版本(例如更新)替换库的可能性。如之前的评论所述,对于 DEX 文件的情况非常怀疑。
单个 DEX 文件的替代方法是从依赖库中制作一个单独的应用程序,在 LGPL 上发布。在这样的应用程序中,您创建了一个服务,您可以从付费应用程序连接到该服务。然后,用较新版本替换 LGPL 库只需要重新编译和重新安装库的 APK。
当然,麻烦的是,现在您要安装多个 APK。
我不是律师,但根据我对GNU Lesser General Public License 3.0 的理解,第 4 节明确排除了静态链接,因为要求指出:
您可以根据您选择的条款传达组合作品,如果您还执行以下每一项操作,那么这些条款实际上不会限制对组合作品中包含的库部分的修改以及用于调试此类修改的逆向工程:
- [...]
d) 执行以下操作之一:
- 0) 根据本许可证的条款,以适合并在允许用户将应用程序与链接版本的修改版本重新组合或重新链接的形式传送相应的应用程序代码,以产生一个修改的组合工作,以 GNU GPL 第 6 节指定的方式传送相应的源代码。
- 1) 使用合适的共享库机制与库链接。一种合适的机制是(a)在运行时使用用户计算机系统上已经存在的库的副本,并且(b)将与与链接版本接口兼容的库的修改版本正常运行。
(强调我的。)
由于 Android APK 的性质,第 4d.0 节是不可能的:APK 编译为 Dex 并作为一个整体进行签名,包含引用的库,因此如果没有原始源代码、密钥库和密钥库密码,就无法更换库。
通过部署两个 APK 可以实现第4d.1 节:
- 一个包含 LGPL 库的 APK,反过来又开源并在 LGPL 下获得许可
- 另一个引用 LGPL 应用程序的专有 APK。
但是,如果不明确添加用户继续下载 LGPL 依赖项的要求,则无法直接通过 Google Play 部署此类应用程序,该依赖项需要作为单独的应用程序部署在 Google Play 上。这对最终用户来说是非常乏味的,而且对于典型的消费者应用程序来说实际上不是一个选择。
根据William Tate 的回答中与 Falken 教授的讨论,LGPL 的条款可能更适用于通过本机代码包含的 C 库,因为它们作为单独的库位于 APK 中。虽然无法对 APK 进行签名,但可以使用替换的目标文件重新打包 APK。从我的角度来看,这在技术上符合许可证的要求。
droidText 库(用于在 Android 上导出为 PDF 格式并在 LGPL 下发布)详细说明了如何使用他们的库并且仍然符合 LGPL:
http://code.google.com/p/droidtext/wiki/LGPLCompliance
我发现它很有帮助。基本上,您使用实用程序(dex2jar)将库的 jar 取出 dex 文件,从而允许最终用户根据需要使用更高版本的 droidText 库进行更新。
这应该概述您的主要问题:http ://answers.google.com/answers/threadview/id/439136.html
其中大部分似乎是在披露您对库的使用,并确保您遵守许可证的分发规则。
我一直认为 LGPL 在很大程度上是一个“灰色地带”。虽然有关于如何使用 LGPL 代码/库等的细节,但它不一定反映作者的确切要求。
我个人建议联系作者,解释您的疑虑并询问他们是否愿意允许您使用它。