我可以在没有PyQt许可证的情况下销售我的PyQt4应用程序吗?

我想出售一个使用PyQt4的Python应用程序。Qt PyQt的商业许可证费用高达数千欧元。我需要购买商业许可证吗?
从“打包”角度考虑,我通过软件中心提供一个Ubuntu软件包。我的软件包将“依赖”于现有的Ubuntu Python和PyQt软件包,那么我是否需要为Ubuntu正在重新分发的内容购买许可证,而我并非直接使用?
相反,如果我在我的软件包中包含了一个GPL/LGPL的Python库,那么我的软件包是否能保持非自由?如果修改了源代码,我难道不能只是提供GPL库的源代码吗?
如果答案是“您需要商业许可证”,您是否知道任何更便宜的替代方案(例如基于版税的付款而不是预付开发费用)?

5我已经编辑了这个问题,明确地谈论Ubuntu,以便我们可以摆脱所有这些纠结,并真正回答人们的问题。我已经清除了评论中的争论,并重新打开了这个问题。 - Oli
请注意,此问题涉及的是在GNU GPL下提供的PyQt4。更新的PyQt5仅适用于GNU GPLv3。关于代码“链接”的非常恰当的技术区分在那里应用较少(不太适合商业打包)。 - mario
2个回答

我不是律师,这不是法律建议。这篇文章是关于你有哪些选择的,所以它是一个研究工具,旨在与其他研究工具一起使用。即使与其他研究工具结合使用,也不能替代咨询律师寻求您需要的正确答案。
Qt(而非PyQt)的许可选项之一是LGPL 2.1,允许您分发使用Qt库的专有程序前提是您遵守LGPL 2.1的所有条款

PyQt, 然而,目前只有两个许可选项(除非你与其开发者协商其他内容,但通常并不切实际)。它可在GPL下使用——因此,你的程序需要是免费开源软件才能分发;更具体地说,你提供给他人并且使用PyQt库的程序版本也必须遵循GPL许可。

对于使用PyQt的程序,唯一的替代选择就是购买商业许可。正如你所提到的,这往往昂贵得难以承受(尽管对于某些应用来说,这是一个不错的交易)。

如果你的目标是在Python中编写一个与GPL不兼容的程序,并使用Qt,你可能想考虑PySide与PyQt一样,PySide是Qt的Python绑定库,它允许你编写使用Qt的Python程序。与PyQt不同的是,PySide基于LGPL许可(与Qt本身相同),因此可以被专有程序使用前提是你仔细阅读并遵守LGPL的条款。

有时候,PyQt比PySide具有明显的优势。但通常情况下并非如此。对于你更喜欢使用哪个库也存在主观性;不同的程序员有不同的偏好。详细信息请参阅PySide和PyQt之间的差异


PyQt4应用程序不必采用GPL许可证。 PyQt4包含一个GPL例外,特别允许某些非GPL许可证。请参见:http://www.riverbankcomputing.com/software/pyqt/license和https://github.com/Werkov/PyQt4/blob/master/GPL_EXCEPTION.TXT。 - Mario
1@Mario 谢谢你提供的信息!但我鼓励你发表一个更详细的回答,解释一下这个问题,并且澄清一下它如何适用于这个问题的原始提问者(他似乎想要分发基于 PyQt 的专有软件)。原因在于:http://www.riverbankcomputing.com/software/pyqt/license 显示 PyQt 可以根据 GPL(允许两个版本)或商业许可证(两个变体)进行许可,其中开发人员支付 Riverbank 以获得分发基于 PyQt 的专有软件的权利。 - Eliah Kagan
@Mario 我回答中的关键修正似乎在https://github.com/Werkov/PyQt4/blob/master/GPL_EXCEPTION.TXT,这里提供了更多选项。但是,似乎没有任何选项允许将基于PyQt的软件变为专有软件,它们都是其他自由开源软件许可证。此外,是否有一个官方页面链接到该文件或其他信息来澄清它确实是一个官方许可文件?(我相信它很可能是,但我不确定如何向CEO或其他利益相关者证明这一点。)奇怪的是,在官方Riverbank网站的第一个许可页面上并未提及那里的扩展选项。 - Eliah Kagan
我可以将使用PyQt5的应用程序的安装程序授权为GPL,但被安装的应用程序可以根据我的自定义条款进行授权吗? - Niklas R
1嗨 @EliahKagan!PySide2又是怎样的情况呢?是否也适用相同的规则? - Francesco Pegoraro

简单来说:如果你对你正在使用的软件许可证条款不够了解,无法判断你所提出的建议是否“合适”,你需要与专业人士进行沟通。如果你想直接与许可证所有者谈判,那也可以,但你仍然需要了解许可证的运作方式。
像Eliah一样,我也不是律师,当你因为遵循我的建议而被起诉时,你不能说我没有警告过你。我基本上同意Eliah的观点,但在这种情况下,Python有些不同。
GPL软件允许您重新分发东西,只要您以相同的许可协议提供它。在这种情况下,您将重新分发PyQT,这是可以的。您还将分发您的产品。个人而言,我不明白为什么您不能同时做这两件事,只要您将使用的GPL内容的源代码提供出来即可。您并没有将它们集成到您的Python中,而只是在使用它们。
为了进一步描述我所说的,如果您在C项目中包含一个库并将其编译下来,您最终要么会在二进制文件中包含GPL代码,要么会创建静态库,您的代码链接到这些库(静态或动态链接)。自由软件基金会会要求您根据GPL协议公开您的代码,如果您重新分发他们的受保护代码。
看到区别了吗?Python的基于文本的分发意味着链接非常动态:与GPL代码没有静态的“链接”,对PyQT的引用可以在不同的环境中进行替换。您只是在使用其API。
如果你搜索“python import gpl”,你会发现很多非法律专业人士从各个方向提出了许多争论。这不是一个简单的争论,如果真的涉及到诉讼,可以肯定的是,自由软件阵营的每个人都会竭尽全力确保建立一个负面先例。
所以再次强调,你可能没有资格独自做出这个决定。要么找律师咨询,要么计算一下这样做会花费多少钱,然后权衡一下,付费购买商业许可证可能更划算。
忽视许可证将会导致更高的成本。

2你并没有将它们整合到你的Python中,你只是在使用它们。如果你导入了GPL许可的Python模块,整个项目都会变成GPL许可。 - Andrea Lazzarotto