有关计算机软件著作权源代码司法鉴定相关知识

  来源 | 长昊律师

  整理 | 陈军

  如何做一份有力的计算机软件著作权司法鉴定报告

  计算机软件司法鉴定均表述为软件同一性鉴定,同时也是针对软件源代码的同一性鉴定,所做的工作主要集中于比对源代码。通过软件代码对比工作来确定鉴定双方是否存在相同或相近似,以确认是否存在软件侵权行为;

  为此,有力的计算机软件同一性司法鉴定报告对软件侵权案件的重要意义不言而喻。那么我们应该如何更好的进行软件同一性鉴定呢?

  我们依照所办理的案件可以明显的感觉到:聘请专业的软件侵权律师与对口的司法鉴定机构,是您办理软件侵权案件的基础;

  我们提供准确的计算机软件司法鉴定指导,以精确达成案件诉求 ;同时,我们更擅长制作用于公安报案的软件同一性对比鉴定报告,助推客户获取公安机关的立案。

  专业的软件侵权律师能更好的提炼侵权事实,组织有效证据链条;对口专业的司法鉴定机构更好的固定侵权事实,同时能减少被告质疑,确定诉讼效果的达成;

  软件源代码同一性鉴定的法律依据

  对于软件同一性鉴定,主要依据的法律、法规包括:

  (1)《计算机软件保护条例》2002年1月1日起施行;

  (2)《北京市高级人民法院关于审理计算机软件著作权纠纷案件几个问题的意见》1995年6月21日。

  其中,《计算机软件保护条例》第二条规定,“本条例所称计算机软件(以下简称软件),是指计算机程序及其有关文档。”该条例第三条第二款规定,“计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。”

  软件源代码司法鉴定的原则

  依据上述规定,比对两个软件是否具有同一性,应遵循以下原则:

  (1)比对二者的目标程序二进制代码、源程序代码和有关文档是否构成相同或实质性相似。

  (2)若二者比对项的相应内容完全相同,则二者的比对项具有同一性。

  (3)若二者比对项的相应内容不完全相同,但比对项的必要部分、或主要部分没有本质区别,属于实质性相似,则二者的比对项仍具有同一性。

  (4)若二者比对项的相应内容不完全相同,且具有本质区别,不构成实质性相似,则二者的比对项不具有同一性。

  (5)若二者比对项的相应内容完全不同,则二者的比对项不具有同一性。

  (6)一般情况下,当二者的目标程序二进制代码构成相同或实质性相似,则二者的目标程序具有同一性;当二者的源程序代码构成相同或实质性相似,则二者的源程序具有同一性;当二者的目标程序或源程序具有同一性,则比对的两个软件具有同一性。

  计算机软件源代码司法鉴定对比需提交的材料说明

  针对计算机软件源代码是否相同或相似,是否具有关联性的司法鉴定需要按照如下模式进行准备相关的鉴定材料:

  1.鉴定委托书:“兹委托XXX司法鉴定所对…软件…与……是否相同或相似/具有关联性作出鉴定”;

  2.待比对鉴定的双方材料;

  3.待比对鉴定双方公司以及产品简介(可能包括但不仅限于:软件总体、模块功能介绍;引用第三方软件及开源软件的情况;软、硬件设计资料等);

  4.待比对软件特征点;

  5.软件著作权登记证书(若有);

  6.委托人营业执照复印件(个人提供身份证复印件);

  7.委托鉴定材料清单;

  8.开发票资料(单位名称、组织机构代码、联系人、联系电话、地址、邮政编码);

  9.其它。

  以上只是一般的要求,针对不同个案的情况材料可能会有很大区别,待详细了解委托人情况后方能确定。

  计算机软件商业秘密的司法鉴定意见应包括哪些内容

  《全国人民代表大会常务委员会关于司法鉴定管理问题的决定》中提出,司法鉴定是指在诉讼活动中鉴定人运用科学技术或者专门知识对诉讼涉及的专门性问题进行鉴别和判断并提供鉴定意见的活动。

  根据《中华人民共和国民事诉讼法》的规定,人民法院对专门性问题认为需要鉴定的,应当交由法定鉴定部门鉴定;没有法定鉴定部门的,由人民法院指定的鉴定部门鉴定。

  根据民事诉讼法,司法鉴定的对象是“专门性问题”。具体到涉及商业秘密的案件中,司法鉴定的范围主要包括两个方面:

  (1)权利人所诉被侵权的商业秘密技术信息是否为“不为公众所知悉”;

  (2)侵权人与权利人的商业秘密是否“相同”或者“实质性相同”。

  (具体请查阅商业秘密律师网司法鉴定部分说明:http://www.ipmimi.com/sifajianding/)

  具体到涉及计算机软件商业秘密侵权的案件中,针对软件源代码是否属于商业秘密等进行司法鉴定应按照上述两个方面进行;就软件代码的不为公众所知悉进行鉴定,同时就权利人代码与侵权人代码是否属于实质性相同进行鉴定,并出具有效司法鉴定报告;

  传统的商业秘密案件与涉及到软件源代码商业秘密侵权案件的本质不同就是在商业秘密的载体不同,针对软件侵权的部分是以代码等形式存在,掌握精确的秘点方能有效的办理此类软件侵权案件;

  软件源代码的同一性司法鉴定比对技术及技巧总结

  计算机软件源代码同一性鉴定对比,软件源代码司法鉴定对比

  涉及软件知识产权司法鉴定均表述为软件同一性鉴定,同时也是针对软件源代码的同一性鉴定,所作的工作主要集中于比对源代码。通过对比工作来确定鉴定双方是否存在相同或相近视,以确认是否存在软件侵权行为;为此,有力的计算机软件同一性司法鉴定报告对软件侵权案件的重要意义不言而喻。那么我们应该如何更好的进行软件同一性鉴定呢?为此,我们总结我们做过的两起案件来说明鉴定中的技术和技巧问题。

  软件源代码的同一性鉴定

  1、关于“同一性”、“实质相似”,以及“相似性”的表述问题

  关于软件的“同一性”、“实质相似”,以及“相似性”的表述问题,我们认为“同一性”与“实质相似”的内涵基本上是相同的,“同一性”所表达的程度较“实质相似”更高一些,但是在两套代码中多少比例的代码是相同或相似,进而将两套代码认定为具有“同一性”或“实质相似”,业界并没有统一的标准,笔者认为对于具体情况,应该有一个弹性标准。

  比如两套软件中实现核心功能的代码量所占总代码量的比例并不大,除了核心代码外,还存在与前端界面相关的大量代码,在核心代码基本相同的前提下,由于核心代码量占总代码量的比例不高,也不能轻易认定两套代码不具有同一性或实质相似性的结论。如果在委托过程中,进一步明确要求鉴定的代码的具体范围,一定程度上可以解决这个问题,但是这个范围往往不是太好确定。“相似性”是较“同一性”和“实质相似”更上位的一个概念,三者之间都是对结果状况的一种描述,笔者认为在没有对其进行充分详细界定的前提下,具体使用哪一种表述区别不是太大,但是无论用哪一种表述,其背后的客观事实——相同或相似代码所占总代码的比例,都是相同的,这也是鉴定真正要发掘和反映的客观事实。

  2、软件同一性鉴定的依据和鉴定原则

  对于软件同一性鉴定,主要依据的法律、法规包括:

  (1)《计算机软件保护条例》2002年1月1日起施行;

  (2)《北京市高级人民法院关于审理计算机软件著作权纠纷案件几个问题的意见》1995年6月21日。

  其中,《计算机软件保护条例》第二条规定,“本条例所称计算机软件(以下简称软件),是指计算机程序及其有关文档。”该条例第三条第二款规定,“计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。”

  依据上述规定,比对两个软件是否具有同一性,应遵循以下原则:

  (1) 比对二者的目标程序二进制代码、源程序代码和有关文档是否构成相同或实质性相似。

  (2)若二者比对项的相应内容完全相同,则二者的比对项具有同一性。

  (3)若二者比对项的相应内容不完全相同,但比对项的必要部分、或主要部分没有本质区别,属于实质性相似,则二者的比对项仍具有同一性。

  (4)若二者比对项的相应内容不完全相同,且具有本质区别,不构成实质性相似,则二者的比对项不具有同一性。

  (5)若二者比对项的相应内容完全不同,则二者的比对项不具有同一性。

  (6)一般情况下,当二者的目标程序二进制代码构成相同或实质性相似,则二者的目标程序具有同一性;当二者的源程序代码构成相同或实质性相似,则二者的源程序具有同一性;当二者的目标程序或源程序具有同一性,则比对的两个软件具有同一性。

  3、源代码比对的几种方式

  (1)使用文本比对工具

  无论使用什么语言开发的源代码,均可以视为文本文件,进而对其中的内容进行比对。UltraCompare、UltraEdit是两款常用的文本比对工具。笔者在工作过程中常使用的一款文本比对软件是Beyond Compare。Beyond Compare是一套由Scooter Software推出的软件,主要用于比较用途。Beyond Compare可以比较的内容有以下这三种:1.电脑上两个目录的内容;2.电脑上的目录和FTP地址的内容;3.两个文本档案的内容(包括 UTF-8、html、Delphi源程序等文本档案)。

  (2)使用DOS中的Fc和COMP命令

  Fc和COMP是DOS中的两个命令,其中,FC命令只进行二进制文件和ASCⅡ文件的比较。

  Fc的语法为:fc [/a] [/b] [/c] [/l] [/lbn] [/n] [/t] [/u] [/w] [/nnnn] [drive1:][path1]filename1 [drive2:][path2]filename2

  FC e:\1.txt 2.txt>3.txt 意思是比较e盘根目录下的1.txt和2.txt中文本的不同之处,比输出到3.txt里。

  COMP的语法为:COMP [FILE1][FILE2][/D][/A][/L][/N:number][/C]

  对于一些完全copy的软件,无论源代码还是目标代码,均完全相同的情况,使用Fc和COMP命令比较有意义,尤其是对于一些只有目标代码而无源代码的情况,但是如果源代码或目标代码差异比较大,使用这两个简单命令无法达到细致的比对目的。

  (3)使用sdiff命令编制shell脚本进行比对

  sdiff使用LCS(最长公共字符串)算法,主要用于版本合并的目的,本不是用来进行文本比对的。使用LCS算法进行文本比对时,相同行的标准是文本行的内容(空格除外)和格式完全一致,文本行的前后顺序需要完全一致。如果一个文本行完全相同,但中间有其他的文本插入或删除,或行的位置发生了移动,都可能导致LCS将文本行标识为差异。一般情况下,会导致比对结果较实际的文本相似度低出较多,此外,sdiff还存在其他的较多局限,表现在:

  ①LCS算法以最长公共字符串为优先识别目标,搜索到LCS后,在此搜索过程中的其他公共字符串将被标识为差异;

  ②无法识别文本行前后位置调换的情况;

  ③变量名告便,代码语法的轻微调整等任何细小变化,sdiff都将识别为完全不同的文本;

  ④使用如:-b(sdiff的一个参数,它的作用是忽略空行差异)这样的选项会使得比对更有效一些,但会产生较小的统计差异。

  鉴于此,使用sdiff编写shell脚本,对其比对的结果进行人工或辅以比对软件对sdiff不能比对的情形进行人工比对和识别,从而提高比对的精度。

  在代码比对过程中,为了进一步提高比对精确度,可以将删除代码中的空行和注释行。剔除空行和注释行后进行比较的意义在于,在源代码中往往存在着大量的空行和注释行,由于空行和注释行均不是实现功能的源代码,与程序功能的实现无关,将其剔除后只对实现程序功能的源代码进行比对,能从另一个角度客观反映检材本身的情况。

  在上述脚本中加入一些正则表达式,就可以达到删除注释和空格文本的目的。

  软件源代码司法鉴定比对技巧

  笔者在从事软件知识产权司法鉴定过程中,主要工作是围绕源代码进行比对,但是除此之外,根据实践中碰到的一些问题和笔者个人的一些思考,将所认为的在鉴定过程中可以/需要考虑一些问题简述如下:

  (1)源代码的表现形式

  对于源代码,不仅仅只有一种表现形式,随着软件工程和IDE(Integrated Development Environment,集成开发环境),在现实中至少存在着开发者直接开发的源代码和版本控制器用于控制版本的源代码形式。对于java源代码来说,就存在着.Java文件与.Java-svn-base文件的形式。

  一般来说,.java文件是开发者开发的源代码,.java文件在所需要的Java类库和配置文件的配合下实现软件的功能。第三方的类库属于第三方的工作成果,因此不应予以考虑;对于内部类库应予以考虑。关于配置文件,一方面其数量很少,另一方面,由于各方开发测试的环境不一样,进行统计和比对没有意义。

  .java.svn-base文件(保存在Java文件所在目录下的.svn/text-base/目录下)是由版本控制系统生成的文件,其保存从版本服务器上检出的Java源代码原本。此外,SVN工具还会在本地建立其它svn控制文件,如:.svn/prop-base/*.java.svn-base,.svn/text-base/*.java.svn-work等,SVN工具使用控制文件对本地版本和服务器版本进行比较和更新维护。对于.java.svn-base文件,一方面,.java.svn-base文件本身是源代码的一种表现方式,记录了与版本服务器最近一次同步更新后的源代码状态;另一方面,将.java.svn-base文件与开发者的本地机器上的.java文件作对比,能够体现出开发者针对.java.svn-base原本文件所作的修改。如:

  D:/SRC/ORG/TOOLS/mytools.java与D:/SRC/ORG/TOOLS/.svn/text-base/mytools.java.svn-base是对应的,前者为本地修改后的副本,后者为从版本服务器上检出的副本。

  如果检材中存在着.java文件和.java.svn-base文件,为了全面反映检测的情况,更客观地出具鉴定意见,应该均予以考虑。

  (2)源代码文件的时间戳

  时间戳是指文件属性中的创建、修改和访问时间。由于时间戳能够较容易地被篡改,而篡改后在文件中并不留下直接的痕迹,因此时间戳信息仅可以反映检材中的文件的当前的时间信息。

  (3)源代码中的签名信息

  在编写源代码的过程中,开发者在源代码中往往标记一些反映开发过程中的涉及个人或/和开发过程的状况的信息,一般称为签名信息,比如指向具体开发者的姓名、邮箱、公司、编写日期等。一般来说,签名信息是有含义的信息,具有唯一性。

  敏感词往往是一些与时间、人物和公司/厂家名称相关的词,是特定于某一环境的专属信息,一般不会巧合。在两个文本中,一旦发现大量的相同或类似的敏感词,可以证明两个文本之间具有一定的相关性。

  (4)源代码中的注释信息

  注释是对源代码功能实现、开发记录等相关内容的一些文字描述。在源代码中,注释往往包含程序功能描述、开发者签名、版本和修改记录等信息。注释本身不构成程序的功能、逻辑和控制,一般来说,也没有特定的格式和内容约束,因此,注释往往包含了大量的个性化信息。另外,一些开发者也习惯将一些之前版本中不用的源代码注释掉,以备查看和比较。注释检测的目的是反映检材的各个版本之间注释信息的情况。另外,由于有些类型代码的可执行文件(如java代码的.class)可以被容易反编译,源代码之间的注释比对还可以从一个角度反映源文件是否是反编译的结果,为相应的司法裁量提供依据。

  (5)源代码中的字符串信息

  固定字符串是程序代码中的常量数据,常用于输入输出的显示信息、文件和数据的固定内容等。一般来说,固定字符串与开发者的语言水平和用词用语习惯有密切关联。比如java中大量存在的print(“字符串”)语句中的字符串,如果两套代码中所打印出的一行或两行字符串相同无可厚非,但是若存在大量相同的打印输出字符串,两套代码很可能系同一开发者所为或其中一套大量剽窃了另外一套。

  (6)待比对文件对的确定

  在实践过程中,检材中的代码常常存在拆分、组合,以及重新划分等现象,在代码比对过程中,如果仅仅文件名相同的文件组成待比对文件对,而将文件名不同但是其中存在大量相同或相似代码块的文件均忽略,则有失客观,可以通过人工,寻找文件名称相似/相近、名称含义相似/相近、或命名规则雷同的文件,若存在相似性,使用文本比对工具比对文件,如果有相当数量的相同代码行,则组成文件对。

  (7)类库文件中文件与源代码

  类库为应用软件系统提供运行支撑环境、公共功能、整体框架、以及有效继承前人已经完成的工作。类库通常分为第三方类库和内部类库,前者为由外部公司或组织提供的类库。后者为一家公司内部自主开发的类库。通常情况是,在开发软件时,对一些公共的功能和程序,开发者将一些已经固化的公共程序和公共功能编译为类库供多个项目或者部门使用,也有利于知识积累、继承和版本控制。

  以java程序为例,.jar文件是java中类库的表现形式,其实际上是Java源代码编译后的Java二进制代码(.class文件)的打包和压缩文件,可以使用常用的WinZip或者WinRar工具打开。通常情况下,.class文件可以轻易地被反编译工具还原为可读性很高的Java源代码,Java源代码也可以很容易地被编译打包后以.jar文件的形式提供。对于java的同一代码,至少有三种表现形式,.class、.java和.Java-svn-base。由于编译器的实现机制不同以及格式差异,反编译后的.java源代码与.class对应的原始.java源代码之间会存在差异,如果.class反编译后的.java与某些.java的相似度极高,基本可以确定这些.java文件与.class文件对应的原始.java源代码是一致或者高度相似的。

  因此,笔者认为,对于所涉及的非第三方代码(诉讼中鉴定申请人自主开发或对方当事人自主开发的),在检材中如果出现同一代码的不同表现形式,即使其存在于类库中,为保证比对范围的公正,也应该将其纳入考虑范围。

  (8)其它

  除软件源代码比对,以及上述所可以/需要考虑的问题之外,对于软件的功能、体系结构、调用流程等等也可以作为辅助的考虑角度。