无源码条件下的计算机软件实质性相似判定
计算机软件著作权侵权的判定依据与传统著作权侵权相似,除权利证明之外,主要包括“接触可能性”和“实质性相似”两方面。在具备源代码比对的情况下,可通过文本比对源代码,这相对简单。但现实中,往往难以获取被控侵权软件的源代码,此时需借助其他方法判定实质性相似性。本文借美摄公司诉抖音公司的(2021)京民初4号案件探讨在无源码的情况下,如何通过分析软件反汇编代码来判定软件的实质性相似性。
计算机软件著作权侵权的判定方法
计算机软件著作权侵权的判定关键在于接触可能性和实质性相似这两个要素。接触可能性意味着被告有机会接触到原告的软件,而实质性相似则表示被告的软件与原告的软件在本质上相似,并非巧合或独立开发。
接触可能性并非判断计算机软件侵权的必要条件,当被告方有可能接触到权利方的软件时,可以减轻对于被诉侵权软件与原告软件相似性的证明责任力度。例如,在北京高院(2021)京民初4号案件中,美摄公司提供了证据证明其软件具有一定市场知名度,且抖音科技公司及其关联公司员工解某曾在美摄公司任职。这些证据表明抖音科技公司有机会接触到美摄公司的软件,满足了接触可能性的要求。
实质性相似是指被告的软件在具体表现上与原告的软件存在相似之处,这种相似并非偶然巧合,而是由于抄袭或未经授权的复制造成的。在有源代码的情况下,可以通过源代码进行详细对比。但在没有源代码的情况下,则需要采用其他方法,如对软件的反汇编代码进行分析。
无源码情况下的实质性相似判定
在无源码情况下,通过反汇编代码来判定软件的实质性相似性是一种有效的手段。具体而言,可以从以下四个方面进行分析:函数名的实质性相同、函数名的实质性相似、函数代码的实质性相同和函数代码的实质性相似。
(1)函数名的实质性相同
函数名一般由英文单词或缩写构成,能够体现函数的功能。函数名称实质性相同,意味着函数名使用了相同的英文单词,或者函数名存在差异,但主要的英文单词和缩写相同,差异部分有特定的对应关系。例如,一个软件的大部分函数名称主体部分相同,只是前缀由“AAA”变为“BBB”,这很可能是批量修改的结果。
在(2021)京民初4号案件中,国家工信安全中心的鉴定意见书指出,抖音软件中有多个函数名与美摄软件中的函数名实质性相同。比如,美摄SDK软件中的函数
“NvImageBufferGetSizeInBytes”
在抖音软件中对应的函数名为
“TEImageBufferGetSizeInBytes”
美摄SDK软件中的函数
“NvCalcCanonicalBoundingRectFromImagePos”
在抖音软件中对应的函数为
“TECalcCanonicalBoundingRectFromImagePos”
两者在单词选择、顺序、类型和数量上高度一致。
(2)函数名的实质性相似
函数名称相似是在综合考虑类名和函数名称的英文单词(及缩写)后判断构成相似的情形。例如,个别英文单词的大小写或词性有细节性变化,而其他部分实质性相同,则可认定为函数名实质性相似。
在(2021)京民初4号案件中,美摄SDK中的
“CNvBaseStreamingGraphNode::IsInputPinResovled”
与抖音软件中的
“TEvBaseStreamingGraphNode::isInputPinResovled”
两者的类名和类成员函数都高度相似,仅在类成员函数中单词Is和is有大小写的区别,而且两个软件中都保留了同样的拼写错误“Resovle”,因此可以认为函数名的实质性相似。
(3)函数代码的实质性相同
函数代码的实质性相同是指两个软件中某些函数的代码在汇编层面上完全一致,或者语句的操作码相同,仅操作数不同。这种情况通常表明两个软件在实现某些功能时采用了完全相同的代码逻辑。
在(2021)京民初4号案件中,国家工信安全中心通过对抖音软件和美摄SDK软件的反汇编代码进行比对,发现多个函数的汇编代码在操作码和操作数上高度一致,甚至出现了相同的拼写错误。例如,
“NvGetMatchedFormatFromOpenGLInternalFormat”
函数在抖音软件中对应的函数名为
“TEGetMatchedFormatFromOpenGLInternalFormat”
二者不仅名称相同,代码实现也基本一致。
(4)函数代码的实质性相似
函数代码的实质性相似是指两个软件的某些函数代码在实现逻辑和功能上相似,尽管在具体实现上存在差异。这可以通过相似匹配算法进行分析,并结合人工判断,考虑汇编语句差异对函数主要功能的影响等因素。
在前述美摄诉抖音案中,国家工信安全中心采用了函数相似性匹配算法,对抖音软件和美摄SDK软件的汇编代码进行了比对,发现多个函数的代码在实现逻辑上具有高度相似性,尽管在具体操作码和操作数上存在一些差异。鉴定机构通过综合考虑函数的相似程度和汇编语句的差异,确认这些函数代码在实质上是相似的。
侵权方的抗辩路径
针对著作权方的软件实质性主张,侵权方有两个主要的抗辩点可以主张:一是应排除公有领域代码,二是应排除有限表达内容。
(1)排除公有领域代码
公有领域代码是指那些没有著作权保护的代码,通常包括标准库函数、第三方库函数等。这些代码属于公有领域,任何人都可以自由使用,不应被视为侵权的一部分。
在上述美摄诉抖音案中,国家工信安全中心在进行汇编代码比对前,对代码进行了预处理,排除了C++标准库函数、Windows库函数和第三方库函数等。因此,鉴定结果中已排除了公有领域代码的影响。
(2)排除有限表达内容
有限表达是指受其性质或功能所限,仅能以有限方式表达的思想或信息。在这种情况下,著作权法通常不保护这些有限表达,因为它们被视为思想的必然结果,而非具有创造性的表达。在软件开发中,属于常见做法或行业惯例的代码实现也属于有限表达。这些代码实现通常是标准的、通用的,不具备独创性,因此不应被视为侵权的一部分。
例如,代码仅由成员变量定义及成员变量对应的geter、seter等方法组成,且成员变量采用常见命名,这种代码是编程语言推荐的标准写法。此类代码函数通常汇编后的代码较小,汇编指令通常小于10行。
在美摄诉抖音案中,国家工信安全中心在比对过程中设定了大于10行代码的比对规则,并对比对结果进行了人工分析,以确保排除行业惯例和有限表达内容的影响。
实质性相似的证明力度
在被告方不愿意提供源代码作比对的情况下,加上“接触可能性”的存在,法院可以减轻实质性相似的证明力度。具体来说,鉴于被告拒不提交源代码,导致无法通过源代码比对直接确认软件实质性相似,法院可以依据反汇编代码的比对结果和接触可能性,推定被告的软件与原告的软件构成实质性相似。
结语
在计算机软件著作权侵权案件中,“接触可能性”和“实质性相似”是两个关键的判定依据。在无源码的情况下,通过分析反汇编代码可以有效判定软件的实质性相似性。本文通过对函数名和函数代码的实质性相同和相似的分析,结合个案中的判决理由,论证了反汇编代码比对在软件侵权判定中的重要作用。
被告方有权提出排除公有领域代码和有限表达内容的抗辩,审判机构应在鉴定机构的比对过程中充分考虑这些抗辩。如果被告方拒绝提供源代码以供比对,法院可以减轻实质性相似的证明要求,依据现有证据做出合理判决。
通过对反汇编代码进行实质性相似判断,可以作为计算机软件著作权侵权的重要参考依据。特别是在无源码的情况下,通过反汇编代码比对来判定软件实质性相似性的方法具有较高的可行性和可靠性。