我正在开发一个我希望在许可许可下发布的开源项目,因为它是一个库,而不是一个应用程序,而且就个人而言,我不喜欢copyleft的库代码.如果我浏览用不同编程语言编写的GPL代码只是为了大致了解如何做某事,然后用我正在使用的语言编写一个类似或相同算法的不同实现,那么可能会是什么后果?如果我的代码与他们的代码有些相似,并且明显受到他们的影响,那么copyleft所有者会有任何合理的投诉吗?这些灰色区域通常如何工作?
"什么构成衍生作品?" 这不是程序员可以回答的问题.例如,参见"聚合"和其他类型的"修改版本"之间有什么区别?和一般的GNU许可证常见问题.
关于您的具体案例,算法通常不受版权法的约束,但(可遗憾地)受专利法的约束.
这些灰色区域通常的工作方式是,你对此持开放态度,与原作者交谈,也许可以达成协议.这样的案件最终不可能在法庭上结束,因为任何一方都不可能从中获得很多.如果没有在法庭上,律师和法官会决定的,而不是程序员.
在发布任何类型的库时,我通常使用X11许可证(也称为3条款BSD),即使我知道在发布程序时依赖于GPL2/3.我之所以这样做是因为我想确保我的库可以不受任何FLOSS项目的限制而使用,这对我来说比在库中声明copyleft的理想更重要.
在这方面使库具有限制性是有点愚蠢的,例如,BSD将GNU的libreadline重写为editline并保持100%兼容的界面.这也是为什么你可能会做你想做的事情的一个例子.
如果您正在查看用Scheme编写的一些示例,或者说LISP,甚至可能是PERL ..并在C中编写一些实现,那么您应该完全没问题.在制作自己的实现时,研究现有的实现绝对没有错.
我强烈建议您只询问GNU项目,发送电子邮件至licensing@gnu.org,并向他们提供您希望实现的目标的详细信息.您一定会得到一个非常友好的回复,可以毫无顾虑地继续.
甚至RMS本身也会承认解释GPL/AGPL/LGPL可能很乏味,他们期望并欢迎这些问题.