我们的商业软件,数据库采用社区版mysql。
查看了mysql的许可协议是GPL,我的理解是因为软件使用了mysql官方的连接驱动包(mysql-connector),所以必须开源,
与我的安装包是否包含mysql安装程序没有关系。
那所有使用了mysql的数据库软件,只要提供给用户使用,都必须开源?我的理解对么?
看你用的是 何种语言 ,列如 php的 mysql 驱动被 php环境实现了 ,而php环境代码是开源的。而php语言在 php环境层 上面 ,这里的差别就是中间有个php环境层。所以 用php语言编写的程序可以不开源 。
java 不了解 ,安卓之类的 好像都用 中间层来保护厂商。
如果你直接引用了 mysql-connector 以GPL开源的包 作为你程序的一部分。列如 C语言之类的,那么你是要开源的。
以下是原话:
但是当你将这部分作为基于程序的作品的一部分发布时,作为整体它将受到许可证条款约束。准予其他许可证持有人的使用范围扩大到整个产品。也就是每个部分,不管它是谁写的。
取决于你的客户端driver,比如以java为例,虽然java 的jdbc driver也是GPL的,但是可以不受影响,因为JDBC是一个规范,mysql client driver只是其中一个实现,也就是说理论上你可以将mysql替换为其他任何一个数据库产品,mysql就不是你产品的必须部分,这在GPL的文档里有相关章节。
MarioDB的作者,也就是mysql的创始人专门写了一篇文章解释了这个问题。
你如果使用C,那么就需要开源了,因为不可替换。前面有人对PHP的解释我不确定,理论上,如果PHP执行代码需要直接在同一个进程内调用mysql的客户端代码,而mysql客户端代码是GPL, 就应该是被传染。中间层保护是常用手段,但是前提是非相同进程内调用。
其实GPL的解释在这块本身就是个灰色区域, Stallman认为任何二进制的引用,包括动态链接都应该受传染,而LINUS则认为只受限于源代码级别,即如果只是在程序中调用一个二进制库的方法,而不是扩展和继承,则不应该受影响。但为了保险,大公司会认可stallman这种做法。
另外在产品包里可以随意包含mysql 的原始release package,这和是否GPL没啥关系。 我们公司的鬼子法务专家是这么给我们解释的。