查看原文
其他

要不是GPL,索赔2千万就要成功了!

卫剑钒 卫sir说 2023-01-28

我去年写了篇GPL解读文章1,有位知识产权律师成了我公众号“卫sir说”的粉丝,今年就一个案子和我探讨了多次,法院上个月刚做完判决(尚未公开)。

这个案子很有趣,也很独特,这里和大家分享一下。

有趣在于:被告差点要玩完了,居然借助GPL,来了个神反转。

独特在于:被告用GPL抗辩成功,以及最终对被告采取了惩罚性判决,都是很罕见的。

一、故事大概

有个公司叫A,做了一个投标软件:a。

有个公司叫B,也做了个投标软件:b。

所谓投标软件,就是帮助投标方制作电子版投标文件,并打包上传招投标平台的软件。

2017年年中,A在南京某招投标平台(以下简称平台)上发现,b和a非常类似,基本可以肯定就是抄自己的。

A发现自己有个员工C在2016年离职,2017年初去了新成立的B公司,3个月后,就出现了b。

A断定是C把源码偷走的,于是把B和C告上了法庭。

A是怎么发现B抄自己的呢:A将b反编译后,发现和a的源码相似度很高,而且反编译后的b里面还出现A公司名称、英文缩写以及一些很难用巧合来解释的相同的非公开信息。

2018年10月,A向南京市中级人民法院提起诉讼,要求赔偿385.5万元,2020年12月,法院判B、C赔A钱130万元。

不过,A、B、C都不服,提起上诉,2021年5月,最高人民法院二审判决驳回上诉,维持原判。

本来这事就算终结了,没想到,2021年,在A诉讼B的三年后,A发现B居然还在卖b,怒不可遏,又一次把B和C告上法庭。

B非常头疼,因为这次A索赔的金额很高,多达2000万,而且很可能要败诉。

A还特别指出,B这属于明知故犯,希望法院(南京市中级人民法院)对B和C适用惩罚性赔款。如果法院确认,罚的可就是1至5倍了!

二、为什么索赔2千万?

A在2018年第一次诉讼的时候,要求B和C赔385万元。

依据是:A发现截至2018年5月29日,b在平台上的下载使用次数为3.8万多次,A也是平台的供应商,A知道每下载使用一次给100元,所以索赔380多万元。但最后,法院综合考虑代码相似度以及不同时期平台付费情况的变化,确定A的损失为130万元。

A在2021年第二次诉讼的时候,要求B和C赔2000万元。

依据是:截至2021年8月30日,b已经被累计下载使用约42万次,扣除2018年诉讼时已经主张的3.8万次,下载使用次数达到38万次,按照平台的计算标准(开始是每次100元,后来有调整),被告获利达3500万元以上。A一开始索赔300万,后根据代码比对量调整诉讼请求,改为索赔2000万元。

A强调,B在最高人民法院终审判决后,仍然提供被诉侵权软件的下载,具有非常明显的主观故意持续实施侵权行为,并导致原告受损巨大,情节非常严重。按照《最高人民法院关于审理侵害知识产权民事案件适用惩罚性赔偿的解释》相关规定,应当承担惩罚性赔偿责任。

三、被告是如何巧妙逃脱的

提供证据的时候,为了证明B侵权,A提交了a的源码供质证,B的律师能看到a的源码。但B拒不提交源码,A只能通过反编译方式证明b抄了a。

B抗辩的难度很大,B的律师殚精竭虑,一筹莫展,盯着a的源码发呆2,突然发现在a里面,用了开源软件SharpZipLib,而这个软件用了GPL!

这个SharpZipLib(以下简称zip库),是一个C#语言写的开源压缩算法库,在招标文件制作完成后,a用它实现文件压缩打包,然后上传招投标平台。

讲到这里,给完全不懂GPL的小白普及一下,GPL是一种开源软件许可证,开源软件作者如果用GPL许可证发布自己的软件,就是在提出要求:如果在你的软件里含有或调用了我的软件,那么你的软件也要开源,也要用GPL发布!如果你想认真学一下GPL,可以看看我写的《人话解读GPLv3》

这就是GPL所谓的传染性。这也是很多商业软件不敢用GPL软件的原因,因为用了以后还不开源,可能就会有人来维权!

B的律师发现a用了GPL软件,大喜过望,可以用这个来反击A啊,你该开源而不开源,侵了别人的权,还好意思告我侵权?

但并不是这么简单,还有一道难关要翻越:

zip库虽然用了GPL许可证,但并不是单纯的GPL,而是加了一个例外。这个例外就是:如果你的软件和本zip库在功能上是独立的,而且你只是链接了本库,那我不传染你,你本来是啥许可证还是啥。如果你改了本软件然后发布的话,你必须用GPL发布,你可以加这个例外,也可以不加。

这个“GPL+例外”许可证比较经典,著名的GNU classpath项目用的也是这个。如果有兴趣,可以看看本文附录中的许可证原文及中文翻译版。

B的律师最关心的就是,a到底是怎么用这个zip库的,是不是满足例外的要求。

经过仔细查找,B的律师发现:

a并不是直接调用zip库的,而是写一个cs文件(即C#语言的源文件),对zip库做了一个简单的封装,然后把这个文件和zip库的源文件,一并做成一个DLL库,然后a的主程序调用这个库。

B的律师抓住这点,抗辩声称A并没有按照“例外”里面说的方法调用zip库,而是做了一层封装,所以a被GPL感染了,a应该开源。抗辩的关键点是:A这个项目自己就是侵权的,不应该再告别人侵权。

而法院接受了这个说法,判决认为:

A自己没有遵循开源协议,有错在先。有侵权错误的A,去告有侵权错误的B,虽然是侵权对象不同,但都是知识产权侵权,法院如果判B侵权,就是偏袒了A。所以法院不支持A的控诉。

四、B最终还是被判赔钱

但是最终,法院还是判了B侵权并赔钱,为什么呢?

因为a分为两部分:“主程序”(用来制作标书、压缩和上传标书)和“预览程序”(查看标书),“主程序”调用了zip库,但“预览程序”并没有。

由于法院坚持认为a被GPL传染,A退而求其次,在律师争取下,最终,法院认定,a的“主程序”被传染了,但“预览程序”没有。

经过细致的代码对比,法院最终确定a和b的“预览程序”相似度达到79%,构成实质性相似。综合考虑代码行数、功能作用、相似度、平台付费等情况,法院确定被告的侵权获利为XXX万元(这里目前不便透露)

更为重要的是,这次判决适用了惩罚性赔款,因为B明知自己侵权,上次已经被判侵权并赔款了,仍然提供侵权软件的下载和营利,属于故意侵权、重复侵权。

《著作权法》第五十四条中规定:“根据对故意侵犯著作权或者与著作权有关的权利,情节严重的,可以在按照上述方法确定数额的一倍以上五倍以下给予赔偿。”

所以,法院决定3倍惩罚,判B赔偿3倍的XXX万元。(不再罚C。)

这仅仅是“预览程序”侵权造成的后果,“主程序”的大小是预览程序的20倍左右,如果不是GPL,赔下来真是大几千万元了!

五、深思:GPL真能传染到a的主程序吗

zip库作为一个压缩软件,在有“例外”的情况下,能传染到一个投标软件?

我觉得并不能,我觉得法院、被告对此都存在不同程度的认识误区。

本案的关键在于如何理解许可证中那个“例外”。那个“例外”到底想说明什么?

简单说就是:

1、如果你的程序并不是压缩类程序,你仅仅是调用我,那我不传染你,不影响你。

2、如果你本身是一个压缩软件,你调用我,那就要用GPL;或者你改我,形成一个我的衍生程序,那也要用GPL。

本案中,投标主体程序肯定是独立于压缩程序的。

要考察的是,A的调用方法对吗,A有没有改这个zip库?

考虑下面几种情况:

1、A把zip库的源码放在自己项目中,自己编译,然后调用,符合例外吗。

符合。

A编译生成动态库zip.dll,然后自己的主程序调用(link)这个dll,这一点也不违规。

这和直接下载官方给的ICSharpCode.SharpZipLib.dll,然后调用,在实质上没有不同。

或者,A以静态形式编译出zip.lib,然后完成静态链接,这也完全符合例外,而不是非要用官方给的静态库,事实上官方也从来没有给出过静态库。

如果学术一点讨论,许可证原文中的“link”是指覆盖编程层面和编译层面的“调用”,还是专指编译技术术语“链接”?我认为,写在许可证里link,如果不加专门说明,肯定是指自然语言“调用”,并不特指编译术语link。而且,这并不值得讨论,因为所有源码层面的函数间调用(call),最终都会体现为编译阶段的链接(link)。

2、A对zip库做了非实质性改动,编译后使用,符合例外吗。

我认为符合。

是不是实质性改动,我觉得比较重要。你在源码中增加了几行空行,显然不是实质性改动;你修改了几处注释里的拼写错误,我觉得显然也不算;仅仅把一个函数中的局部变量改名,我觉得也不算。

你写了一个新文件1.cs,里面有一个函数fun1(),这个函数只是简单调用了zip库中原有的函数fun(),这算实质性改动吗?我觉得大多数程序员,都不会认为这是实质性改动。

A正是这种做法:A仅仅写了一个1.cs文件,按照zip库的示例代码,写了一个简单的函数fun1( ),封装了具体的zip压缩函数fun( ),然后,在a的主程序中调用fun1( )函数。

注:本文中的1.cs、fun1( )、fun( )、zip.dll均为化名。

事实上,任何人要用zip库,类似fun1( )这样的调用代码也是少不了的。只不过,A没有把1.cs文件放在主程序中,而是放在了zip库的源代码目录中,并编译生成了zip.dll。

这并不是实质性改动,事实上,这属于上面第1种情况中的静态编译调用。

如果你问zip库的作者,问这是否属于对zip库的修改,增加这个fun1( )后是否成为一个衍生作品,作者估计都懒得理你。

3、A如果对zip库做了实质性改动,能隔离传染吗?

能。

即便退一步来讲,就算A实质性地改进了这个库,做出一个衍生作品,那么仍然传染不到a的主程序。

比如A给这个衍生作品起个名字叫Azip,然后,按照zip库的要求,A把Azip按照“GPL+例外”发布。然后,a用主程序调用Azip,就完全不会被传染了。

所以,即便所有人都认为A对zip库做了实质性改动,那也只是a中的Azip侵权了,a的主程序并不侵权。

六、反思:A到底犯了什么错

A到底犯了什么错,要到手的钱就没了呢。

1、A没有充分注意到开源许可证

大概率情况下,A没有注意到自己用了一个“GPL+例外”的开源软件。

A的所有员工,那些年,都没有认真阅读这个许可证,更没有按照其要求执行。

简单来说,就没把这当回事。

2、A没有认真考虑过许可证合规

A没有认真考虑过“传染性”这件事。

虽然现在这种用法,我认为zip库的GPL也传染不到a的主程序,但毕竟要说服法庭才行。

但按照上一节我分析的情况3,A只要把Azip开源出来,就可以抵挡任何严苛的质疑,而这并不费什么劲。

3、A没有及时跟进zip库这个开源项目

我写这篇文章的时候,看了一下这个zip库在github上的代码。

令我大吃一惊的是,这个项目用的居然是MIT许可证!不是我所以为的“GPL+例外”!

查了一下历史,原来早在2016年5月份,zip库就改为MIT了。

如果A能及时跟进和更新zip库,那就一点问题都没有了,MIT可没有传染性。

要知道,A可是2018年才开始告B的。

改了再告啊。

文|卫剑钒

致谢:感谢北京大成(南京)律师事务所张少强律师(微信号:15905196869)在本文撰写过程中提供的帮助,如有知识产权维权需求可联系张律师。

关注公众号“卫sir说”,回复“wenshu1”,获取A第一次诉讼最高院二审判决书(来源自威科先行)

附录:

SharpZipLib所用许可证原文:
The library is released under the GPL with the following exception:
Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.
As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
(http://icsharpcode.github.io/SharpZipLib/legacy)
中文版:(卫sir翻译)
本库是在 GPL下发布的,但有例外。
如果某模块(即程序)调用本库,不管是静态链接或动态链接,都形成一个基于此库的组合作品。此组合作品应满足GPL的条款和条件。
作为一个特殊例外,本库的版权所有者允许您将独立模块(一个或多个)链接本库,并生成可执行文件,在复制和分发该可执行文件时,您可以自行决定许可条款, 前提是对于每个链接本库的独立模块,您都满足该独立模块所用许可证的条款和条件。
所谓独立模块,是指并非从本库衍生或基于本库的模块。
如果您修改了本库,您可以将此例外扩展到您修改后的版本,但您没有义务这样做。 如果您不希望这样做,请从您的版本中删除此例外声明。

参考文献:

  1. 看看中国法院是怎么对待GPL协议的 

  2. 全国第一起民事生效判决——GPL抗辩获得法院支持

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存