我正在开发一个我想在许可许可下发布的开源项目,因为它是一个库,而不是应用程序,而且我个人不喜欢库代码的 copyleft。如果我浏览用不同编程语言编写的 GPL 代码只是为了大致了解如何做某事,然后用我正在使用的语言编写类似或相同算法的不同实现,那么可能是什么后果?如果我的代码与他们的代码有些相似并且明显受其影响,那么 Copyleft 所有者是否会有任何合理的投诉?这些灰色区域通常如何运作?
6 回答
“什么是衍生作品?” 不是程序员可以回答的问题。参见例如“聚合”和其他类型的“修改版本”有什么区别?以及一般的GNU 许可证常见问题解答。
关于您的具体情况,算法通常不受版权法的约束,但(可悲的是)受专利法的约束。
这些灰色区域通常的运作方式是,你对它持开放态度,与原作者交谈,也许会达成协议。这样的案件不太可能在法庭上告终,因为任何一方都无法从中获得太多收益。如果它最终出现在法庭上,将由律师和法官做出决定,而不是程序员。
在发布任何类型的库时,我通常使用 X11 许可证(又名 3 条款 BSD),即使我知道在发布程序时倾向于 GPL2/3。我这样做是因为我想确保任何 FLOSS 项目都可以不受限制地使用我的库,这对我来说比在库方面断言 copyleft 的理想更重要。
在这方面限制库有点愚蠢,例如,BSD 将 GNU 的 libreadline 重写为 editline 并保持 100% 兼容的接口。这也是为什么您可能可以做您打算做的事情的一个例子。
如果您正在查看一些用 Scheme 编写的示例,或者说 LISP,甚至可能是 PERL .. 并用 C 编写它的一些实现,那么您应该完全没问题。在制作自己的实现时,研究现有实现绝对没有错。
我强烈建议您直接询问 GNU 项目,发送电子邮件至 license@gnu.org 并向他们提供您希望完成的工作的详细信息。您一定会收到非常友好的回复,并且可以放心进行。
就连 RMS 本人也会承认解释 GPL/AGPL/LGPL 可能很乏味,他们期待并欢迎这类问题。
2 个可能符合您要求的出色许可证:
- Apache 许可证,2.0 版,非常宽松(如 MIT/BSD),但对双方都有专利诉讼保护
- LGPL,版本 3,允许使用该库,但进一步开发它(并分发它)需要保留 LGPL 并发布源代码。
免责声明:我不是律师,您应该去找一位对软件许可有足够了解的知识产权律师。如果你去看一个愚蠢的人,他或她会告诉你“不要为了安全起见而这样做”,任何人都可以这样说。
参见洁净室设计。如果软件的行为几乎完全相同,则您不应该阅读源代码。
根据您计划使用的许可许可证,这个问题可能没有实际意义。换句话说,如果您的代码将具有 LGPL 提供的基本自由,那么即使是代码的直接副本也可以,并且版权所有者不太可能追随您。
另一点是,如果原始代码是 GPL 的,那么作者不太可能会反对你从他的算法和想法中推导出一些东西(因为 copyleft 者倾向于反对软件专利)。
通常的 IANAL 免责声明 - 我只是不认为这可能是现实生活中的问题,除非您使用大量代码并尝试限制作者打算通过其 copyleft 保证的自由。
通常,如果您的 SW必须“链接”到 GPL 代码才能运行,那么它就是派生工作......