作者:何国铭律师(专于商标犯罪与商业秘密犯罪案件研究辩护)
计算机软件包括程序与文档,计算机程序是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或可被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。文档,是指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等。
计算机文档与程序中的技术信息均能被认定为商业秘密,但与文档相比,计算机软件编程中的源代码与目标代码是常被进行司法鉴定的主要检材。
源代码与目标代码是不一样的概念,程序员在编程中所编写出来的文本是源代码,是按照某种特定语言的惯例和规则编写的,对人类来说,这些代码是可读的,程序员能对源程序进行交流,但计算机不能直接理解这种以英文或者其他人类语言编写的指令。因此,只要将这些人类可读的源代码编译成机器可执行的代码,才能在计算机运行。这些被编译后的代码表现为一串二进制数(由“0”和“1”组成)指令编码,我们将之成为目标代码。尽管目标代码已经是机器指令,但还不能独立运行,还需解决函数调用问题,将目标代码与库函数(函数库、动态链接库)链接,才能形成完整的可执行程序。
就计算机软件程序而言,其可成为著作权和商业秘密的保护对象,但由于保护目的与法律规制的不同,软件程序作为著作权保护与作为商业秘密保护存在差异。基于对软件著作权的保护不延及开发软件所用的思想、处理过程、操作方法或者数学概念等,故对软件的鉴定主要是外在表达方式进行鉴定,如对源代码及目标代码进行鉴定。而商业秘密所保护的计算机程序及文本中所蕴含的技术信息秘密,其中也包括程序和文档中开发软件的“思想、处理过程、操作方法或者数学概念等,商业秘密可涵盖的范围要比著作权大,但以侵犯商业秘密案件处理,需进行非公知性鉴定与同一性鉴定。
某一软件获得商业秘密保护的法定条件与其获得著作权法保护的法定条件不同,有些案件即使能获取著作权保护,但不一定能以商业秘密来保护。软件著作权之鉴定,重点在于权利软件与侵权软件之相似性鉴定,而商业秘密案中除判断技术信息是否相同或实质性相同外,还需在此之前进行非公知鉴定。尔后司法人员结合涉案软件是否具有价值性,权利人是否采用合理的保密措施等,辨析涉诉的技术信息是否能构成商业秘密。一般而言,若是权利人曾向国家版权局进行著作权登记,则以著作权寻求救济会简单得多,以已登记的软件源代码作为样本,与侵权产品使用的源代码作相似性鉴定即可。
计算机软件以商业秘密的形式获取保护时,其在非公知性鉴定与同一性鉴定中均有难点。“非公知性”鉴定,即鉴定权利人所主张的技术信息不为公众所知悉。需判断其是否符合非普遍知悉与非容易获取的条件,如被追诉人所使用的源代码是否为开源代码,是否为公开、公用代码,或是否为第三方代码。在开发过程中,被追诉人是否使用反编译的方式获取权利人的源代码,被追诉人是否使用反向工程。权利人主张的源代码是否在公开的报告会、展览等方式公开,或该代码是否在专业的期刊杂志中发表,又是否仅从网站页面上即可搜索获知源代码的。此公开信息,或无需付出一定的代价即可容易获得的技术信息,不应构成商业秘密。
此外,在非公知性鉴定中,权利人需要对软件的源代码梳理,整理出其自主编写的属于秘点的技术信息,但现实中往往是软件权人在开发软件时,一般会使用到开源代码、第三方代码与自主代码,经开源的公共代码自然具有公知性,故应排除在商业秘密的范畴。对使用了第三方代码的,需权利人出示第三方代码的授权文件,但常有权利人删除和隐瞒相关引用的事实证据,由此致使鉴定难度增大。
在同一性鉴定中,由于侦查人员无法查获被追诉人所使用的完整源代码,因此,鉴定人对被追诉人软件的目标代码进行反编译,在得到汇编程序后,再进行比对。此做法的难点在于软件源代码的反编译是一个复杂的过程,由C、C++、VB等语言编写的软件程序不容易被反编译;由JAVA、NET平台下的编程语言(如C#、VB.NET、C++.NET、F#NET)编写的软件程序容易被反编译;由Delphi设计的软件程序中窗体代码容易被反编译,而逻辑执行部分代码不容易被反编译。此外,代码中通常是经过多层加密,从目标代码到源代码的反编译的过程,不亚于反向工程,工作量是非常巨大。有人主张,在源代码无法获取的情况下,则可对目标代码进行鉴定,将权利人编译后的目标程序与被告人目标程序进行比较。
此外,在进行鉴定前,鉴定人员需做一些核对工作,鉴定人会将权利人所递交的源代码与其软件产品中的目标代码进行比较,以确认所递交的源代码真实。具体操作为将源代码通过编译的方式获取目标代码,再将编译完成的目标代码与产品中的目标代码进行比较。另,鉴定人也需对从被追诉人处查获扣押的软件源代码与侵权产品的目标代码进行比对,其确定所查获的源代码是真实的,此举之目的在于核实源代码的真实性。实践中,有些被追诉人会将侵权源代码放置于较为隐蔽的地方,侦查机关难以查获,或出于迷惑办案人员,躲避侦查之动机,案发前伪造一份虚假的源代码。因此,鉴定人在鉴定前,需要将该源代码与目标代码进行比较,以确定查获的是真实的源代码,而非伪造的源代码。
鉴定机构接受商业秘密鉴定委托后,会委托专业检索机构进行技术查新,尔后鉴定人再补充检索。常见的查新网站,除了谷歌、百度等搜索网站外,查新人员会通过开源软件的方式查新,常见的源代码搜索网站如Searchcode、Github及Krugle等都是主流的开源软件网站。此外,检索人员会通过软件专利的方式进行查新,查证权利人所主张的代码是否已被他人申请专利。
鉴定人在作同一性鉴定中,使用的鉴定方式一般有以下四种。一是逐句对照法。这是一种传统的参照文字作品的鉴定方案,即将软件作品进行逐字逐句的对照。二是“全部观念及感觉”对照法。从整体感官出发,判断检材与样本的相似度,这种方法操作简单,但缺乏一个客观的评判标准,给予了鉴定人较多的主观性与自由性。三是“结构、顺序与组织”方法,又称SSO规则。结构是一个程序中的各个组成部分,如指令、语句、程序段、子程序和数据结构等;顺序是让计算机先执行哪些结构,后执行哪些结构的前后次序,即程序中的处理流程;组织是指这些结构之间、流程之间以及结构和流程之间的相互关系(如层次嵌套关系、调用从属关系、串行并行关系等)的总体安排。四是抽象—过滤—比较三步判断法,又称AFC规则。首先要对程序抽象为代码、子程序、模块等层次,然后再进行逐级抽象,将属于公共领域的表达部分过滤,将剩下的“表达”进行比较。
结语:计算机软件应用广泛,在生产经营中起着十分重要的作用。近年来,全球及我国计算机软件行业高速发展,涉计算机软件的知识产权犯罪案件逐年增加。在此类案件中,司法鉴定意见是重要的定罪量刑证据,然而,因司法鉴定存在诸多不规范的情形,导致在认定案件事实上陷入困境。对此,作为辩护律师,我们更应了解计算机软件司法鉴定的过程,以期寻找有效辩护要点,依法合理辩护,为当事人争取最大利益。