日期:2014-05-16  浏览次数:20619 次

使用GPL开源库,如何闭源?
基于GPL的开源库做了软件,想做C/S通信系统,想保护通信协议,所以不能完全开源。所以问题:
我的项目中,用到了开源库A、B、C、D等,以及自己的协议库 M ,基本架构如下
-------------------------------               
               app
-------------------------------
 A |  B  |  C  |  D |    M
---  ---   ---   ---   -------

如果A的开源许可证是GPL,B的许可证是LGPL,C的是类BSD,D是某闭源库,购买而来的,而M是自己的协议库。
为了让app工作,必须同时有这些库的支持,我的app都只跟下层的库进行通信交互,而库与库之间是完全独立的,没有任何交互,请问这样的软件能发布吗?ABCDM这些库能协同工作吗?还是怎么样?

本人也看过查找过不少关于开源许可证方面的资料,但是对于这里还有一丝困惑?
因为我的app才是依赖A,所以app必须遵循GPL开源我能理解,那么D和M呢,他们是被遵循GPL的软件调用,是被依赖方,所以主要困境在这里。
请不要大段复制资料,讲重点,最好能有例子帮助理解。

ps:帖子分数上限只能100?我想给200。如果帮我解决问题,后面再开一贴,再发100。
------解决方案--------------------
只要有链接,不管谁调用谁,都会被GPL传染。
------解决方案--------------------
你这个D, M不依赖 A貌似不需要开源,而且你D,M也需要编译成库。
还有就是反正A是开源的,你可以重写,minigui一开始就是开源发布的,后面想闭源就重写了。
------解决方案--------------------
A只要链接到谁了,谁就要GPL。和模块独立不独立没关系,你先说是否存在链接这个事实。存在的话那啥都别想了,老老实实去搞个商业编解码器吧。有静态链接的话那是直接碰到了GPL条例的。
就算没有链接,也不保证不出问题。我记得mediacoder当年也是被ffmpeg的人盯上了,然后作者坚称自己的ui是exe调用不是链接,结果也被杠上了。
------解决方案--------------------
回到问题吧,没有连接关系是不用开源的。就你现在的表述情况貌似可以做到不开源。
------解决方案--------------------
为了防止被传染,不用link,用进程间通信吧
------解决方案--------------------
可以很明确的说,不行。

ABCDM中的任何一个库是GPL的,都会将app感染成GPL,app成为GPL之后,他所链接的所有库都要是GPL的。

这就是GPL的感染性。