甲公司乙公司侵害计算机软件著作权纠纷案——抄袭剽窃类软件侵权的判断标准及代码比对
裁判文书北京知识产权法院案由 商业秘密
引注:(2022)京73民初1225号
全文
甲公司乙公司侵害计算机软件著作权纠纷案
——抄袭剽窃类软件侵权的判断标准及代码比对
【裁判要旨】认定抄袭、剽窃类软件侵权行为,需遵循“接触+实质性相似-合理理由或合法来源”的判断标准。对原告在诉前通过公证取证方式获得的被诉侵权软件源代码,如果被告对公证取证过程无异议或者对异议未能提出合理质疑并举证证明的,可以以原告公证取证的被诉软件代码作为比对对象。在具体比对中,仅单纯利用代码比对工具软件在遇代码顺序调整、类名和变量名经机械替换等情形时,可通过人工手动排除、功能模块分割比对、综合比对认定等方式,使比对结果更加科学和客观,在此基础上准确作出实质性相似判定。
案号 一审:(2022)京73民初1225号
【案情】
原告:甲公司(以下简称甲公司)。
被告:丙公司(以下简称乙公司)。
丁公司戊公司是一家依法成立的从事网络游某2、手机游某2等软件开发、己公司。2021年12月,甲公司在原有游某2“猛鬼宿舍”的基础上完成“躺平发育”游某2的开发,并申请了计算机软件著作权登记证书。该游某2于2022年1月11日在抖音平台上线,目前在业界也已具有了较高的知名度。2022年1月14日,甲公司庚公司在抖音平台上线其游某2“堡垒派对”,该游某2的玩法、游某2设计、美术界面、音效、辛公司开发的“躺平发育”游某2完全一致,甚至连程序代码中的部分bug都与权利游某2代码中的bug一致。丁公司认为,乙公司的被诉游某件系抄袭原告权利软件的源代码形成,壬公司计算机软件著作权的复制权和修改权,癸公司停止侵权并赔偿经济损失200万元和维权支出2万元。
子公司辩称,涉案游某2“堡垒派对”的部分元素和设计是借鉴了市场上知名的其他同类游某2,但全部代码均由其独立自主开发完成,丑公司权利软件的源代码,未侵害原告游某2的著作权。
【审判】
北京知识产法院经审理认为:甲公司是涉案权利软件的著作权人,有权提起本案诉讼。权利软件在抖音平台的发表时间早于被诉软件发表时间,且涉案软件的代码可通过网页开发者工具获取,寅公司存在接触权利软件及软件源代码的可能性。审理中,经对权利软件和被诉侵权软件核心文件的源代码进行比对,被诉侵权软件的源代码与权利软件源代码高度相似。故被诉侵权软件与原告的权利软件构成实质性相似。乙公司未举证证明其软件源代码具有其他合理来源。故法院认定乙公司的被诉侵权软件复制、修改权利软件的源代码,卯公司对权利软件享有的复制权和修改权,依法应当承担停止侵权和赔偿损失的责任。辰公司未提供充分证据证明其因被诉行为遭受的损失,巳公司因侵权行为的获利情况,故综合考虑涉案软件具体情况、代码相似比例、侵权持续时间等因素,午公司应承担的赔偿损失数额和维权合理支出费用。法院判决:一、子公司未公司享有著作权的“躺平发育”游某件V1.0的行为;二、子公司申公司经济损失10万元及维权合理支出3万元;三、酉公司的其他诉讼请求。
一审宣判后,双方当事人均未提起上诉。一审判决现已生效。
【评析】
本案是计算机软件著作权抄袭剽窃类侵权的典型案例,涉及侵权认定标准、具体比对范围和比对方法的确定、赔偿损失数额的确定等问题。
一、抄袭剽窃类软件侵权案件的认定标准
认定抄袭、剽窃类软件侵权行为,需遵循“接触+实质性相似-合理理由或合法来源”的判断标准。
(一)关某接触可能性
《计算机软件保护条例》第七条规定,“软件著作权人可以向国务院著作权行政管理部门认定的软件登记机构办理登记。软件登记机构发放的登记证明文件是登记事项的初步证明。”故当事人提交的软件著作权权属登记证书可以作为认定作品完成时间和首次发表时间的初步证据。
但因著作权权属登记时一般仅进行形式审查,若当事人主张实际完成及发表时间与著作权权属登记证书记载内容不一致的,应当对此承担举证责任。当事人提供的证据可以充分证明作品实际完成及首次发表时间的,应当对实际情况予以认定。本案中,结合被告关某被诉软件在抖音平台上线系其软件首次发表时间的自认,可以认定原告权利软件发表时间早于被诉软件,且本案游某件的部分源代码均可通过网页开发者工具栏中进行获取,故被告具有接触原告软件的可能性,满足接触要件。
(二)关某实质性相似的认定
软件比对一般先进行目标程序的比对,在目标程序的运行界面等具有高度相似性的情况下,再进一步进行软件源代码的比对。司法实践中,对于源代码的比对,可由法院经询问双方当事人意见后,会同技术调查官共同选择常用的代码比对工具软件。但由于侵权人在抄袭权利软件代码时,通常会对代码进行一定的修改、增删或再编写,具有隐蔽性。所以,以工具软件进行机械整体比对时,还需要考虑是否存在因类名、变量名修改造成的人为干扰。
本案中,一开始技术调查官采用常用的比对工具Beyond Compare软件进行源代码比对,但通过前期分析发现,使用上述常规比对方法受到类名、变量名修改的影响非常大。某些类(class)的定义中变量定义、参数取值、方法实现几乎完全一致,代码段相似度非常高,区别仅在于类名、变量名字不同,有使用自动化工具进行混淆处理的嫌疑。本案被诉侵权软件将类名和部分变量名进行重命名,但主要逻辑和功能没有改变,且存在一些逻辑上完全等价的简单替换表达方式,可能是由工具或脚本自动生成或进行了混淆处理。在独立编写程序代码的情况下,不大可能出现上述如此高度相似的情况。
最终经细致比对,法院认定被诉侵权软件与权利软件部分代码完全一致,另有大量比对结果显示不一致的代码主要区别也仅在于在变量命名上的差异,据此认定被诉游某和权利软件构成实质性相似。
(三)软件移植的排除
实践中还存在一种情况,即虽然被诉侵权软件在目标程序运行界面等外观上体现为与权利软件高度相似,但被告辩称其系针对原告权利软件进行学习和研究后,根据学习的技术方案,采用与权利软件完全不同的其他编程软件、开发语言重新进行代码编写形成被诉软件。戌公司辩称其被诉软件的开发系参考同类型软件后自行编写代码形成。
著作权法保护的是表达,不保护思想。故而,根据思想与表达二分法,如果被诉软件和权利软件仅仅是设计方案、技术逻辑上相似,而非具体表达上的相似,亦不构成侵权。《计算机软件保护条例》第六条规定,本条例对软件著作权的保护不延及开发软件所用的思想、处理过程、操作方法或者数学概念等。
本案的比对中,根据被告的该项抗辩意见,法院要求双方当事人在进行软件比对前针对双方各自软件的开发语言、目录结构、文件类型、代码体量等具体情况进行了说明,两款软件在编程语言上均采用语言编写,故本案排除了软件移植的可能性。
二、关某软件对比范围的确定
实践中,原告为了防止被告在诉讼中提交修改后的被诉软件源代码逃避软件比对,往往在诉讼前会通过公证取证等方式获取被诉软件的代码,固定侵权证据。但对于原告提交的公证取证代码,被告往往会提出取证过程不规范不科学,或保全的代码经过人为篡改,与被告被诉软件代码不完全一致等,对原告取证的代码不予认可。在此情况下,一方面,需严格审查原告取证过程的合法性、规范性;另一方面,被告如果主张代码被篡改的,应就此承担举证责任。
本案中,被告对取证过程的科学性提出异议,经技术调查官提出技术意见后,认可了技术调查官的意见,但认为其被诉游某件代码上传公开平台后,可能被他人进行篡改。依照“谁主张,谁举证”的原则,被告对此应当承担举证责任。在被告未能举证而仅辩称存在该种可能性的情况下,法院依法对其该项辩称意见不予采纳,认定原告所提交的公证取证代码可以作为比对的对象。
软件代码比对中在确定比对范围时,还需要对开源代码、第三方素材等内容进行排除,否则将影响比对的科学性和正当性。本案中,对于被告关某2鉴公有领域或第三方素材及开源代码的辩称意见,经技术调查官和双方当事人对比对内容一致确认,双方对比代码中涉及开源代码的内容,仅是调用开源引擎平台(Laya引擎)的相关接口函数,而不存在其他使用方式。其次,上述调用开源引擎平台接口函数的方式不会将开源引擎平台的具体代码内容引入到对比代码中,对比代码中只会出现相应的被调用函数名称,而仅仅是某个被调用函数名称相同,不会被Beyond Compare软件判定为代码行相同,其必须是代码行内容完全相同,所以上述调用也不会导致代码相似度对比的结果出现变化。再次,开源引擎平台相关接口函数可视为开发者所使用的程序语言自身的一部分,开发者在编写程序的过程中有选择和使用的自由,如何使用开源引擎平台接口函数也体现了开发者利用程序语言表达程序逻辑的独创性。综上而言,本次代码对比已充分考虑双方代码中涉及开源代码的内容,相关情况不影响本次代码相似度比较的结果。
三、本案体现的代码比对中的重难点问题
(一)本案体现的代码比对典型问题
1.代码量较大。在本案中, bundle.js作为手机游某2的主要源代码文件,其包含的代码量较大。该文件涵盖了游某2逻辑、场景构建、效果渲染、用户交互等各方面的功能实现,函数和类定义丰富、依赖关系多且层次结构复杂,为代码比对工作带来了不小挑战。
2.存在代码段顺序调整和新增功能代码。在软件开发中,类(Class)通常被视为功能相对独立的代码段。由于类的功能相对独立,因此类定义在代码文件中的位置(顺序)通常不会影响代码文件整体的功能实现。换句话说,只要类的定义保持不变,无论它在文件中出现的位置如何变化,一般不会改变该类所实现的功能。在对原被告代码文件进行初步分析时,技术调查人员发现存在上述类定义顺序调整的情况,这种情况会对准确评估代码相似性造成干扰。此外,相比原告的游某2功能,被告在游某2中增加了聊天室等附加功能,这些新增功能相关代码与其他代码之前交互依赖关系不大,但会引入额外的差异点,使得直接比对变得更加困难。
3.存在名称简单替换的情况。前期分析还发现,原被告代码文件中部分类定义代码,其类结构、参数数量和取值、类方法实现几乎完全一致,代码段相似度非常高,而区别仅在于类名、变量名不同,有使用自动化工具进行混淆处理的嫌疑。类名、变量名的修改往往会导致整行代码被判定为存在差异,从而影响对比结果的准确性。
4. Beyond Compare工具的不足。利用Beyond Comp are工具进行代码比对,通常是基于文本行的差异进行识别的。这意味着Beyond Compare工具对代码段的顺序调整、新增代码以及名称变化非常敏感。即使两个代码文件在功能上完全相同,仅仅因为代码段的顺序不同、新增了少量代码或简单的参数名称替换,也可能会误报大量的差异,这种差异还存在累积效应,对比过程中不断积累,从而严重影响比对结果的准确性。
(二)本案代码比对所采用的创新做法
考虑到上述代码对比的难点,本案创新性地采取了以下比对策略:
1.代码预处理。在正式比对前,先对代码文件进行预处理,包括标准化格式(去除空白行、注释等),以及对变量名、类名等标识符进行规范化处理,以减小由于编码风格或混淆策略引入的差异。
2.功能模块分割比对。将原告代码文件以类为单元,分成29个代码段,每个代码段包含一个或多个类代码。分段的原则是在源代码文件中位置相邻,且功能上具有一定关联性的若干个类划分为一个片段,否则将一个类单独作为一个代码段。技术调查人员依据专业知识进行比对和分析,在公证的被告代码文件中查找与原告划分后的各代码段相对应的代码段,作为对应的对比代码段。
3.同时给出相似比例和综合判断。在使用Beyond Compare软件比对相同代码行数的同时,技术调查人员也会根据类的功能、结构、参数变量、方法实现等进行综合判断,同时给出以上两项对比结果,为法官进一步判断代码相似性提供支撑。
(三)借鉴意义
在涉及手机游某2代码侵权的案件中,由于代码量庞大、结构复杂,且容易存在因代码段顺序调整、新增功能代码以及名称简单替换造成的对比障碍,传统的代码比对方法往往难以准确评估代码之间的相似程度。
本案创新性地采用了以上比对策略,提高代码比对的准确性,提供定量与定性相结合的评估结果,使得比对结果更加全面、客观,为法官做出更公正、合理的判决,维护了当事人的合法权益提供了有力支撑。通过本案的实践,可以为其他类似案件提供有益的经验和参考。
四、确定赔偿损失金额的考量因素
根据《计算机软件保护条例》第二十四条第一款的规定,除著作权法、本条例或者其他法律、行政法规另有规定外,未经软件著作权人许可侵害他人计算机软件著作权的,应当根据情况,承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任。
本案中,原告主张以其损失作为赔偿金额的依据,其虽提交了收入截图证据,但一方面,该收入统计截图并未体现与本案游某2的直接关联性,亦无相应银行流水、对账单等财务凭证予以佐证,故并不能证明其关某权利游某2的实际收入情况。另一方面,原告据此主张被诉侵权游某2在线5日给其造成分流损失,但依据该证据,并未体现其收入在被诉侵权游某件上线运营的5日时间内,对其权利游某2运营收人造成实际影响。因此,本案原告提交的证据并不能证明其因被诉行为遭受的损失。亥公司因侵权行为的获利情况。故法院综合考虑涉案软件具体情况、代码相似比例、侵权持续时间等因素,适用法定赔偿酌情确定被告应承担的赔偿损失数额及维权合理支出。
左慧玲;于白
北京知识产权法院;国家知识产权局专利局
在法小和里继续
把这条案例当成参考,用你自己的案情做一次相似检索,可以同时看到相关法条、司法解释和更多同类案例。
在知识库中打开