GPL开源许可证带给我的烦恼

前言

做开源项目的时候经常会需要去选择一个开源许可证,现在市面上出名的开源许可证大致和国内的手机、电脑型号一样,款式繁多,能满足各种各样的需求,有名的许可证中最容易引发争议的算 GPL 了,GPL 协议具有传染性,且传染性较强,如果你的产品为 GPL 许可证软件的衍生品,那么你的产品也需要为 GPL 开源

我碰到问题的场景

一个项目中很小的一部分用到了一个 GPL 软件的某个小功能,当然不想开源为 GPL(我的主程序里面通过 fork 调用了另一个 GPL 软件)

网上总结的办法

如何阻止 GPL 传染,从 android 到我屁民,大家都是颇费周折,大致隔离思路如下:

https://www.zhihu.com/question/19771481

查查官网

总觉得网上的一些总结我自己心里依然没底,有如下问题:

1、总结的过于片面

2、限于英文水平有限,翻译的不够准确,可能漏掉一些关键信息

所以参考网上的一些说法,快速了解,然后再去官网找到出处,我心里的底气会足很多

https://www.gnu.org/licenses/gpl-faq.en.html,所以就专门跑到官网去查了一下,找到了一处说明,和我碰到的问题场景非常像

1
2
3
4
5
6
When is a program and its plug-ins considered a single combined program? (#GPLPlugins)
It depends on how the main program invokes its plug-ins. If the main program uses fork and exec to invoke plug-ins, and they establish intimate communication by sharing complex data structures, or shipping complex data structures back and forth, that can make them one single combined program. A main program that uses simple fork and exec to invoke plug-ins and does not establish intimate communication between them results in the plug-ins being a separate program.

If the main program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single combined program, which must be treated as an extension of both the main program and the plug-ins. If the main program dynamically links plug-ins, but the communication between them is limited to invoking the ‘main’ function of the plug-in with some options and waiting for it to return, that is a borderline case.

Using shared memory to communicate with complex data structures is pretty much equivalent to dynamic linking.

我没有用到复杂的数据结构来通信,也没有使用共享内存,也没有使用动态链接库,所以我觉得我没必要开源我的这款产品(其实官网写的还是有一点含糊的,你怎么去定义这个复杂的界限呢?我只很简单的调用了一下他的接口,所以不算吧)

坚持原创技术分享,您的支持将鼓励我继续创作!