庭审笔记06 | 计算机软件源代码侵权纠纷案

前言
本案庭审视频仅收录法庭辩论部分,经查阅两审判决书,补充部分内容。
原告针对证明软件代码相似性的比对、举证有一定参考和借鉴意义。
一、法庭调查环节
原告诉请:
1、判令两被告立即停止著作权侵权行为;
2、判令两被告连带赔偿原告经济损失XX元;
3、判令两被告连带承担本案原告维权支出的律师费、公证费,并承担本案的诉讼费用、保全费用。
事实理由:
软件A为原告自主开发的软件,已进行计算机软件著作权登记,并取得证书。原告与XX网络平台达成协议,原告将软件放置于平台供下载使用,每次下载使用收费100元人民币。
后原告发现被告一同样在XX网络平台发布了软件B,程序功能及实现上与软件A高度近似。经核实比对,两款软件内部函数高度一致,且部分函数带有原告主体标识。
被告二为原告员工,曾参与软件A的研发和维护,后入职被告一。截止至原告证据保全之前,软件B累计下载XX次。
原告举证内容:
对于软件源代码的固定及演示,原告庭审中主张如下:
1、提交版本管理软件TortoiseSVN的记载信息,证明原告对软件A进行了更新和维护。具体有:
(1)TortoiseSVN的各个模块部分,其序号对应的代码和含义;
(2)TortoiseSVN记载,固定的时间段内,原告对于软件A的修订次数;
2、提交公证书,导出软件A待比对源代码,具体记录步骤为:
(1)输入域名,远程访问服务器后,连接后台网络;
(2)使用TortoiseSVN软件,导出(Chekout)目标地址中的待比对源代码;
(3)查看TortoiseSVN日志,固定时间段内,原告对软件A的修订次数;
3、针对导出的源代码,提供说明材料:
(1)导出的源代码一共XX万行,主张著作权的是原告自行撰写的部分,源代码行数共XX行,包括X个dll文件,X个exe文件、全部主程序;
(2)其余部分源代码,来自于第三方,不进行著作权主张;
(3)将部分源代码,与提交软著申报备案登记(前后各30页)源代码进行逐行比对,并出具比对报告,相似度达99.9%以上;
4、针对源代码的可运行性,原告提供材料:
(1)编译软件A的SVN源代码,并录像提供;
(2)当庭操作编译软件A的SVN源代码,生成目标程序,与录像进行比对。
笔者注:
1、关于SVN软件。
SVN为开源版本控制系统,会记录每一次文件的变动,可以追溯档案历史以便恢复。
https://www.runoob.com/svn/svn-intro.html
2、关于目标程序、源代码。
《计算机软件保护条例》规定,计算机程序是指,为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。
即言之:
源代码是程序员使用软件敲下的代码内容。
目标程序,是由源代码经过软件编译生成的目标代码的集合,其是可供计算机识别执行的程序。

对于被告二曾接触软件A,原告进行主张:
1、员工离职交接清单,被告二为交接接收人。清单显示被告二签字确认,签收了软件A代码及相关文档材料;
2、被告二于原告处离职后,入职被告一;
被诉侵权软件取证及代码比对,原被告的主张如下:
1、侵权软件B的取证:
(1)原告提交公证书,进入XX网络中心网站,下载软件B v1.0.0版本。同时固定软件上传时间、查询下载使用记录;
(2)原告提交第二份公证书,再次进入XX网络中心网站,下载软件B v2.0.0.05版本。同时固定软件上传时间、查询下载使用记录;
(3)原告通过反编译手段软件B v1.0.0版本安装文件,得到相应源代码,第二次公证软件安装文件已加密,无法反编译;
笔者注:
对于前后两份软件B,被告一陈述,因为软件迭代,软件B v2与软件B v1代码完全不同。但本案诉讼前期拒绝提交软件B v2源代码。
2、软件A与软件B v1的代码比对:
(1)原告分别选取软件A exe文件、dll文件源代码,依次与软件B v1反编译代码进行比对;
(2)对于代码是否构成实质性相同,例如业务逻辑、功能等,以人工逐行比对的方式进行判断。得出结论两者仅更换语法,代码功能、逻辑相似;
(3)统计出相似的代码行数,除以原告代码总行数,以此计算出相似度;
笔者注:
原告使用反编译软件ILSpy对软件B进行反编译。
原告使用VisualStudio编译软件A源代码、软件B安装文件,分别获得对应程序文件;
通过反汇编软件IDAPro分别加载上述文件,获得相应后缀名为idb的文件;
使用二进制对比软件BinDiff比对分析idb文件;
3、两被告使用比对软件,对两款软件另行代码比对,并进行反驳:
两被告将软件B反编译后获得的130个文件,通过比对软件BeyondCompare与软件ASVN源代码进行逐行比对,得出相似度低于10%的结论;
笔者注:
原告对此回应:BeyondCompare软件,如存在一个字符不同即判断不相同,忽略了代码比对的逻辑、变量命名、实现的功能等。
庭审中,法庭组织双方使用BeyondCompare软件进行比对后,发现软件判断为不同的代码行中,主要差别为变量名称不同,但代码逻辑功能实质性相同。
4、原告提交比对材料,对软件A与软件B进行源代码关键词比对:
(1)对于软件B导出的DLL文件,使用软件反编译后,在得到的cs格式文件中均出现了“原告软件A”字样;
(2)对于软件B导出的主程序exe,使用软件反编译后,得到的cs格式文件中出现了:
原告公司名称
原告采购第三方商用报表组件密码、产品号、用户名称等字样
以原告公司名称英文缩写的变量代码
原告采购第三方空间的授权码
上述信息可以在原告SVN代码中均可找到对应记载;
笔者注:什么太极熊猫。
(3)将软件B反编译后获得的源代码,与原告软著登记备案源代码进行人工比对,分别得出前三十页相似度85.38%,后三十页相似度69.79%的结论。
笔者注:
原告通过控制对比的变量,使用多种方式对两款软件代码相似性进行了对比说明。
两被告对比的反驳解释显得较为苍白无力:
备案前后三十页代码,占比极小,应综合整体代码量进行比较;
原告比对中存在大量错误;
原告将公共标准类库的代码作为自身源代码进行了主张;
原告代码中存在大量第三方控件,相同控件的调取代码存在相同的可能,不应列入比对范围;
5、原告分别编译软件A、软件B源代码,并通过运行,对比运行后的软件界面,得出结论:
两款主界面布局、功能分布相近似;
两者组件及多项对应提示信息相同;
预览文件界面整体布局相似;
6、原告提司法鉴定申请,请求对公证书保全的软件A源代码与公证书保全的软件B v1目标程序,二者是否构成相同或实质性相同进行鉴定,事实上双方经过了充分拉扯:
(1)司法鉴定所要求两被告提供涉案软件源代码,被告同意提交代码给司法鉴定所、法院,但拒绝让原告知悉;
(2)原告要求,就被告承诺提交源代码进行质证,并同意签署保密;
(3)被告拒绝源代码作为证据进行质证,司法鉴定程序终止;
笔者注:
综上,总结原告组合拳如下:
比对软件A SVN源代码、软件B v1.0.0反编译源代码,出具比对报告进行说明;
针对反编译的软件B文件,提取带有原告信息的关键词;
软件B反编译代码比对原告软著申请备案的源代码,出具比对报告进行说明;
编译软件A源代码、软件B源代码,运行并针对软件界面,进行比对说明;
针对软件A源代码、软件B v1.0.0目标程序,进行代码相似性司法鉴定;

对于被告获利、市场竞争关系的证明,原告提交材料:
提交原告与XX网络平台的协议,披露协议费用结算条款。以此推断被告与XX网络平台协议的签署以及获利情况。
提交公证书,原告取证固定被告微信公众号文章,文章内容宣传“使用原告产品可以免费更换被告产品”,通过文章上的联系方式原告致电被告客服,询问原告公司与被告公司关系,被告客服回答以前是一家,现在分拆成了两家公司。
二、庭审部分的文字记录
法庭:
现在总结争议焦点:
第一个焦点,被控侵权的软件是否侵害原告的软件著作权。第二个焦点,如果侵权被告承担何种民事责任。
原告:
根据法庭刚才总结这两个争议焦点,代理人现向法庭发表代理意见,供法庭参考。
针对争议焦点一。
原告认为两被告共同侵害了未来公司的计算机软件著作权,事实清楚,证据充分。
理由一,被告二是原告公司的技术人员,并且是涉案软件项目的人,有接触原告案涉软件的机会。
理由二,被告二有在被告一公司工作并承担技术人员职能岗位的事实。
理由三,原告通过对被告提供公开下载涉案软件进行反编译后的代码,与原告享有著作权的软件代码功能代码进行逐行比对,二者高度近似。
此外,原告在X年X月X日,当庭对源代码生成目标程序后的运行界面与被告目标程序的运行界面进行比对演示,二者存在大量高度近似的运行界面。特别需要说明的是,将被告一涉嫌侵权程序反编辑以后的项目代码与据原告自行撰写并在国家版权保护中心备案的源代码,进行逐行比对,前三十页的相似程度达到了85.38%,且两者的代码逻辑完全一致。
理由四,被告一涉嫌侵权程序进行两种方式反编译后,均包含了原告的公司名、公司简称、电话号码、密约等关键信息,并且还包含了原告合法自第三方购买的上一组件的授权信息。如果缺少这些授权信息,案涉程序将无法运行。
理由五,原告认为只要原告自行撰写的部分代码,其代码逻辑与被告部分代码与代码逻辑相符,被告即构成侵权,而被告一直主张两者存在不同,并以此认为不成侵权,显然概念逻辑错误。
第六点,我们特别提醒法庭注意的是,本案提起诉讼一年多来,被告对原告的主张一直不予认可,对于原告申请司法鉴定,前后三次在法院的组织下摇号选择鉴定机构,被告以理由并不予同意,并且贵院最终权确定的鉴定机构通过贵院要求被告提交源代码进行鉴定。被告先是同意提交请源代码后又拒绝提交,法庭声明以后仍然拒绝提交,足以证明被告的抗辩及不侵权的主张不能成立,应当作出被告不利的解释。
综上,两被告侵犯了原告的计算机软件著作权,事实清楚,证据切实充分,这是第一部分。
第二部分,关于争议焦点二。
两被告是否应当承担连带赔偿责任,以及原告公司主张的赔偿金额、事实和法律依据是否充分。
原告认为两被告应当承担连带侵权责任并赔偿损失,并承担原告的合理维权费用。
理由主要在于两点,第一,按照侵权责任法的规定,在被告一被告二构成共同侵权的情况下,原告主张两被告承担连带侵权责任合法有据,应予支持。
第二,原告的证据明确证明,截止至X年X月X日,XX网络中心显示软件被下载使用XX次。同时证据XX明确证明原告与XX网络中心规定,软件每次下载使用的结算费用为100元。原告按照上述标准主张损害赔偿事实清楚,符合法律规定,请法庭予以支持。
原告代理意见陈述完毕。
笔者注:为委托人提供的一剂强心剂。
法庭:
好,被告发表辩论意见。
被告:
尊敬的审判员,被告针对本案的庭审情况,提供以下代理意见,供法庭参考。
首先第一点,原告指控的侵权行为不能成立。被告一未实施侵权行为。
本案中原告主张的是其招标软件v1.0版本,但其在诉讼中提供的却是其他版本软件的代码文件。虽然原告声称v1.0版本代码与备案代码 100%一致,但经过被告的比对,其二者存在极为明显的差异。
登记但前后三十页代码与该SVN代码不具有一致性,不能证实用以比对的SVN系统代码的真实性,结合被告提交证据证实原告是可以对SVN系统进行修改的。此前在庭审中,原告的技术人员也承认了 SVN但系统可以修改的事实。
在原告已经通过对软件反编译获取反编译代码对前提下,其可以任意修改系统内容以匹配被告的软件代码。因此其提交的 SVN系统代码明显不真实,不能作为本案权利基础,用以进行侵权比对。
笔者注:攻击原告权利基础。
第二,被告一公司的软件代码是自行开发对,与原告和被告二并无关系,两款软件不具有实质性相同的情形,原告主张通过反编译方式进行代码比对,该反编译方式并不科学,无法反映软件代码的真实情况。再将目标程序反编译过程中,其编译结果并不指定,很多差异代码无法编译出来,即使是同一款软件,编译出来的结果误差都很大。
笔者注:事实确实如此,存在这一可能,即同一目标代码可能通过不同的代码手段(不同的代码逻辑、编译软件、不同的语法结构)实现相同功能。但是被告拒绝提供源代码进行比对。
比如本案中,原被告采用同一款编译软件同时对被控侵权软件进行编译,编译结果具有明显的差别,也正因为如此,现在司法鉴定领域已不再采用该种方法进行软件同一性比对鉴定。
另外,在原告自行比对过程中,两次采用不同的方法,比对也具有明显差异,前后比对数据出现重大矛盾,无法自圆其说。对于原告自行通过人工对涉案被控侵权软件进行反编译比对的结果,明显不具有客观真实性,其人为进行筛选调整,主观进行逻辑判断,不具有客观真实性。
且被控侵权软件反编译后的文件总数量有 100 多个,只挑选其中六个DL文件以及2个exe文件进行比对。对于(剩余的)绝大多数文件,均为作为比对对象,其比对结果明显不具有客观真实性,不能作为认定本案软件相似程度的比对结果。
综上,本案原告的主张明显没有法律依据,被告一不存在侵权行为。
原告所主张的擅长实际上是行业通用工具软件,不具有独创性,仅XX网络中心上就具有xx等多款工具软件,其软件程序和功能也都是按照XX网络中心的要求进行编写,其软件代码不具有独创性,不符合著作权的构成要件。对于原告反复提到的被告一软件中使用的组件,实际上是由第三方开发的功能组件,原告并不享有著作权,现今被告也采购了相关组件,因此不存在原告指控的侵权行为。
笔者注:因为是按平台要求编写的软件,存在同质化功能和验收标准,所以编写的软件代码不具有独创性。这个逻辑有点诡辩。
第三点,因产品更新换代,被告一之前早已重新组织人员对工具软件进行重新开发,早已将原被控侵权软件下架删除。被告因产品更新换代,新版软件产品开发完成就已经将原被控侵权软件下架。原告所指控的涉嫌侵权软件制作工具已于 X年X月X日删除。这一事实在原告此前两次诉讼时,被告均已明确陈述了该事实,并提供了公证后的事实证据,并且之后的新版软件陆续进行了更新换代,原先的软件早已不再使用。原告自身的软件,同样也是经历数次的改版升级原来的软件,原来的v1.0 版本软件也早已不再使用,因此被控侵权软件早已下架删除,不论原告的第二项诉讼请求是否成立,显然已经不具有事实依据。而新版软件与原告根本不同,其要求停止侵权明显没有事实法律依据。
笔者注:打掉诉请第二项。
第四点,被告一并不知晓原告软件涉案相关信息。被告二也并被是从原告处离职至被告一处工作。被告一并不知晓原告与被告二之间的关系以及相关的工作内容,不存在原告指控的共同侵权行为。被告一在员工入职时,已尽到了合理的审查义务,也并未实施原告所指控的侵权行为,原告的诉请明显不能成立。
笔者注:无合意,攻击共同侵权。
第五点,原告主张对XX网络中心平台上,存在着XX等好几家招投标软件供应商,各家软件功能基本一致,原告的软件不具唯一不可替代性。该款软件本身只是行业内通用软件,各家能进入中心平台所依靠的也不是软件产品本身,获得用户的主要依靠的是平台的资源以及自身对宣传、服务以及经营策略,与软件产品本身并无直接关系。原告的软件在平台上也不占有优势,足以看出其软件本身并无明显的竞争力,原告直接将被告一软件的产品点击次数进行计算,认为属于其利润损失,明显没有依据。根据网络中心一直以来的结算文件,原告一直结算的标准均是70元每次,原告前后两次起诉也都只提供了70元每次的合同,且根据网络中心的结算文件,一直到X年的X季度、X季度的结算,原告的结算价格依然是70元每次,原告明显提供了虚假证据。
笔者注:降低独创代码对原告软件盈利对贡献率,以降低索赔损失。
另外,被告一只是一家新成立的企业,其进入网络中心平台时间也比较晚,且根据其中心平台的合同,被告一公司软件前90 天是免费使用,后 90 天收取半价,从被控侵权软件上架到删除,总计上传次数也就是一万多次。扣除被告免费期及半价期,实际的营业额也只有30多万元,实际上还处于亏损状态,根本不可能获得盈利,原告诉讼主张赔偿明显过大,没有事实法律依据。
笔者注:开始哭穷。
另外,对于原告所主张的律师费用,根据其所提供的合同、发票,备注的是保证金,而并非律师费,根据委托代理合同,包含一审、二审以及执行的全部程序,并非是本案一审发生的代理费用,因此,其主张的律师费用明显不具有客观真实性。被告辩论完毕。
法庭:
原告还有没有补充的辩论意见?
原告:
有。我们针对被告的意见补充一下,因为被告刚才发表的第一部分意见超出了法庭争议焦点的范围,也就是被告认为我们主张权利的基础不是享有著作权的软件。 关于这一点,我们回应四点。
第一点,原告在X年撰写完成开发后向国家版权保护中心备案了部分源代码,按照规定提交了前三十页和后三十页代码,并在本案诉讼之前向国家版权中心调取了备案的源代码作为证据,以及向法庭提交。
第二点,原告通过公证的方法进公证处下载并公证了案涉软件的全部源代码作为证据,也已经向法庭提交。
第三点,原告将国家版权保护中心备案的源代码与公证处下载的源代码进行比对,二者二进制相同,代码逻辑完全相同,且除了数字之外,两者相似程度是100%,两者构成实质性相同。
第四点,原告早就向法庭及被告作了说明,被告如果对以上的事实有异议,可以申请鉴定。在X月X日的证据交换笔录第X页第X行,迄今为止被告既未提交证据反驳原告的主张,也未申请鉴定。
第五点,关于被告主张的第一点就是案涉软件由被告自行开发,其也对原被告主张的代码进行了比对。那么我们向法庭特别说明, X年X月X日,原被告就软件当庭进行比对,并交换比对证据,被告主张其利用软件对原被告的软件进行比对,两者的相似度较低,这也是被告的一直主张。但是X月X号,在法庭调查组织情况下,原告现场演示按照被告的比对软件和比对方法,当前进行了演示,也就是将原告的源代码生成目标程序,再将生成的目标程序反编译源代码以后,与原告的源代码再去进行比对,按照被告的比对软件和比对方法,再次比对的近似度是0。这一点已经当庭得到法庭及被告的认可,足以证明对方的主张完全不能成立,详细的内容在X年X月X日质证笔录第X页第X行。
笔者注:以当庭记录的新笔录,提醒法官查阅过往笔录,并标注了具体的页码,非常好的方式,值得借鉴。
需要说明的补充的第六点是,被告刚才再三提到研发用了两种反编译方法,事实完全不是如此。原告是按照法庭的要求用两种反编译方法去对原被告的软件进行反编译,因为工作量太大,使用一种方法进行了全面比对,另一种比对方法只就反编译后的被告的侵权软件,两种比对方法都出现了原告软件的公司名,公司简称、LOGO以及第三方购买组件的密钥,没有这个密钥软件将无法运行。
回应的第七点,刚才被告说,第三方功能组件,被告也自行购买了,那么我们特别提醒法庭注意的是,无论哪种编译方法,被告软件都出现了原告向第三方购买组件的授权码,这个授权码是非常非常长的一个授权码,没有这个授权码案涉软件是无法运行的。
被告主张的 70 元次的结算合同,在证据交换过程当中已经明确与阐述,我们就不再重复。
总而言之一句话,被告的主张显然是不符合证据证明的事实。
法庭:
被告,有没有补充意见?
被告:
补充一点。针对原告刚才的庭审陈述,可以再次证明一个事实。原告将反编译后的源代码,与自身的软件源代码进行比对,其相似度为0,足以证实反编译这种方法不科学,其比对的结果没有客观、真实性的基础。
法庭:
询问一下被告,你们的被公证保全的软件,是什么时候开发完成的?
被告:
我们好像没有提交过,庭后进行补充和回应。
原告:
法庭,我们再针对被告的发言进行一句补充可以吗?
被告提及原告反编译软件代码与原告源代码比对,相似度为0,我们特别说明,这是利用被告比对的工具和比对方法进行比对的结果,这个问题是为了证明被告的比对软件和比对方法不具有任何客观认识性,而原告比对方法是按照司法鉴定机构的比对方法逐行进行比对的,所以这时候进行的,比如前30页的技术代码比对。
三、法院认为
1、原告有权就涉案软件主张著作权
第一,《最高人民法院关于审理著作权民事纠纷案件适用法律若干问题的解释》第七条规定,当事人提供的涉及著作权的底稿、原件、合法出版物、著作权登记证书、认证机构出具的证明、取得权利的合同等,可以作为证据。在作品或者制品上署名的自然人、法人或者其他组织视为著作权、与著作权有关权益的权利人,但有相反证明的除外。本案中原告提交软著登记证书,被告无相反证据证明,可以证明原告对涉案软件享有著作权。
第二,SVN代码修订记录有合理顺延性,经过比对,SVN后台代码与原告软著备案提交源代码几乎一致,生成目标程序界面与备案提交界面基本相同。
第三,原告SVN代码后台上传时间和上传账户名,指向被告二姓名缩写,与被告二于原告处工作时间可以互相印证。
2、两被告侵犯了原告软件著作权
第一,被告二于原告处任职且接收了软件代码。SVN软件中出现被告二姓名缩写,被告一成立后,被告二旋即入职被告一。被告一具有接触原告软件的可能性;
第二,通过原告根据源代码比对结果及技术分析,可以得知大部分程序文件在程序逻辑、结构方面实质相同,函数变量命名特点相同或相似,比对的源代码大部分也相同。被告一软件安装文件反编译后,得到了原告公司相关信息,且对比原告文件,较多文件名称、主界面布局存在相同、相近似的情况。
第三,原告已提供SVN代码的情况下,被告拒绝提交源代码,应承担举证不能的不利后果。
四、结语
对于此繁琐专业的侵权案件,笔者的个人总结有以下几点:
第一,作为原告方,应尽全力多方面、多角度去举证,去证明构成实质性相似。
多个角度、多个维度的现有证据提交,可以形成高度盖然性优势,同时,考虑到原告客观举证难度,促成举证责任倒置,促使法院相信两者构成实质性相似。
第二,实质性相似的比对说明,可以以文字、非文字成分的方式进行。
可以从以下角度,参考并说明两款软件构成实质性相似[1]:
1、代码方面:
程序逻辑
目录组织结构
软件名称、文件名称
错误信息
权利管理信息
处理流程
特征性缺陷
2、可视化方面:
运行界面
运行结果
运行参数
数据库结构
从被告答辩的角度出发,针对原告主张原创代码部分,可通过同类软件公用代码列举、使用了开源代码等角度出发,进行剥离排除,当然这是后话。
第三,针对代码的比对、数据结构的说明,代理人如果能够明晰相关问题的原理、质询,尽量不要聘请专家证人、技术调查官等,而是由代理人自己来做。
代理人自己就代码、组织结构、编译过程等技术问题询问解答,可以给对方当事人及代理人强烈的心理暗示,即原告方在这方面比较专业,因此在此后的法庭辩论过程中,就技术比对方面,对方当事人及代理人不会进行过多的纠缠辩论[2]。为此原告代理人需要提前与技术人员充分沟通,做足准备。
第四,为便于比对说明,相关待比对的模块化内容(SVN代码、反编译代码、编译的录像等),需要提前嵌套取证。
在对现时完整操作进行录像公证的前提下,为方便后期的比对说明,杜绝被告质证空间,可提前预备MD5 check或者时间戳等步骤,就待比对的模块化内容进行取证固定。
参考内容
1、陈锦川:论计算机软件著作权侵权判定中实质性相似的认定——从最高人民法院相关案例出发 | 司法案例解析;
2、牟驰:《律师民商事业务必修课(第四版)》,第71页;




