计算机软件反向工程法律问题探究

2016-04-11 11:38杜昕曜
关键词:源代码计算机软件代码

杜昕曜

(西安财经学院,陕西 西安 710100)



【法学纵横】

计算机软件反向工程法律问题探究

杜昕曜

(西安财经学院,陕西 西安 710100)

目前,各个国家都倾向于用著作权保护计算机软件,我国也不例外。因此,要讨论反向工程在版权上属于哪种权利,这就涉及了反向工程法律属性的问题。反向工程所涉及的法律属性问题归根结底也就是反编译和反汇编的法律属性问题。计算机软件反向工程所涉及的是著作权当中的复制权。

计算机软件;反向工程;著作权法

一、计算机软件以及反向工程的基本理论

(一)计算机软件的基本理论

计算机软件是一种运行程序,电脑作为软件的运行载体,在运行时遵循一个预先的确定方式来达到这一软件的最终使用目的和影响,组成计算机软件的最主要部分是代码,我们所要研究的反向工程问题事实上也就是研究编译代码(源代码与目标代码)的问题。简单而言,源代码与目标代码指的是电脑程序在使用前其编译前及编译后的表现形式。

源代码的内容主要包括,程序员或程式设计工具对开发该软件程式内容编写的以及储存的数据,比如,软件程式设计者根据自己的选择而使用某种计算机程式语言编写或开发一个新的软件,并最终以所使用的程式语言储存,则以此类形式所呈现的就称之为源代码。源代码编写储存完毕,那么意味着软件开发完成,而当软件最终投放市场供所有人使用时,必须使用一个区别于源代码的代码形式来显示以达到最终使用目的,这样做的目的也是为了避免其他竞争对手窃取其开发概念,从而开发出相关的软件。目标代码文档包含许多只能被电脑处理器解读而不能被人为修改或者阅读的指令程序,这样的程序成为计算机软件的最终表现形式。源代码与目标代码的最大区别就是能否为编译者直接阅读,源代码可以直接被人阅读而获悉软件设计原理,不能直接用于处理器,而需要转换为目标代码。另一方面,目标代码最终的表现形式除了被处理器阅读外,并不能被其它相关处理器修改或者被反向推理,这是因为源代码在编译为目标代码的过程中会隐去一部分软件信息,而使得目标代码无法被反向编译。

(二)计算机软件反向工程的基本理论

1.计算机软件反向工程的基本含义。反向工程(Reverse engineering),又被称为“还原工程”或者“逆向工程”,此技术最早应用于集成电路和布图设计权保护领域。原指对他人“掩膜作品”的布图设计进行评价、分析,然后根据所得到的结果创作新的布图设计。目前在世界范围内,例如,华盛顿条约以及其他国家的集成电路法规定,对他人受保护的布图设计进行反向工程而做出复制,此行为不构成侵权。随着科学技术的进步与发展,反向工程逐渐被运用于各类技术领域,于是就提出了计算机软件反向工程的概念。在计算机软件领域方面,反向工程一词最早出现在1960年,当时该技术的运用主要是在软件运行平台的移植方面。通俗的来讲,计算机软件方向工程是指进行逆向解剖与分析,采取反向编译等方式推导出其它软件的功能、结构、处理流程、算法、界面等。在计算机软件领域,进行反向工程通常也被叫做反向编译。世界知识产权组织(WIPO)在《世界知识产权组织知识产权手册:政策、法律及其适用》一书中,对软件反向编译是这样解释的:“反向编译是一种对计算机程序进行复制和编译,从而使其编码与结构可被观察和分析的程序。这种程序一般即指通过对计算机软件的目标代码的分析反推出其相应的源代码的过程。”事实上,在软件领域方面,反向工程囊括了许多活动,比如阅读分析软件的说明书、使用手册等文字性说明,以了解开发此软件的人或单位所要表达的功能性能和软件的运行方式方法;在电脑上使用被分析软件,体验该软件在实际运行时的功能、操作等主观情况;分析制作出被分析软件的源代码,通过阅读、理解该源代码,得出相关此软件的处理流程等设计。

2.计算机软件反向工程的过程。计算机软件反向工程,就必须要联系到软件工程学说方面。软件工程用于研究用工程化方法构建和维护有效的、实用的和高质量的软件,其运用现代科学技术,如程序设计语言、数据库、软件开发工具等,来设计并构造计算机软件的开发、运行以及维护这些软件必须的相关文档资料。根据软件工程学说的观点来看,开发一个软件项目通常情况下要先从分析和形成用户及市场需求开始,在此基础上确定所要开发软件的各种需求,其中包含软件所要执行的功能分析、性能指标情况,并包含对软件整体组织结构的设计、数据结构和算法的设计、软件最终应用界面和处理流程的设计、代码的编写和排错检测,最终形成能够在计算机上安全可靠稳定运行的目标程序代码以及相关的文档手册等一系列步骤。这样的开发过程,我们称之为“正向工程”。而反向工程与其相反,在反向工程中,软件工程师通常会运用“反向编译”或者“反向汇编”的方法,以进行逆向解剖分析其它开发商软件的目标程序代码,从而通过反汇编等方式转换成其源程序代码,试图导出软件的功能、组织结构、处理流程、界面等设计要素。简言之,计算机软件工程(正向工程)的过程是以用户或者市场的需求以及软件开发商的设计理念等信息为输入,以软件产品的目标程序代码和文档手册为输出;计算机软件的反向工程则是以目标程序代码和文档手册为输入,以该软件的设计理念信息等为输出。

3.计算机软件反向工程的目的。(1)修改完善软件。为了使软件可以完美适用于计算机环境或者是需要改进其使用功能和增强使用性能,该软件复制品的合法持有人通常需要修改和完善软件。但由于软件的目标程序代码只能由计算机阅读,不能进行认为阅读,这就必须要对软件实施反向工程,从而得到源代码进行修改完善。(2)解决软件运行阻碍。最初的软件有可能会出现设计不完善或者编程方面不足,导致在运行过程中出现错误;或者另一方面是由于软件和计算机硬件设施不匹配而阻碍运行。当出现上述情况时,软件合法持有人就有必要通过反向工程才能达到诊断和解决原软件中存在的错误。(3)检测并排除软件病毒。通常情况下,软件所生成的病毒是编程人员在编制程序时有意或无意加进的一段特殊代码。软件复制品的合法持有或使用者,为了保护自身系统安全和不被病毒所感染就不得不设法检测软件并将其排除。在这种情况下,这就需要进行软件反向工程得到该软件的源代码,并进行理解分析,找到所谓加进的特殊代码并删除。(4)提升软件之间的兼容性。此内容下的兼容性包括两个方面内容:一是系统软件与应用软件之间的兼容;二是应用软件与应用软件之间的兼容。软件的兼容可以增强软件自身的功能和性能,也是扩大软件应用范围和领域的一个重要途径。要实现各类软件之间的兼容,就必须掌握了解软件的组织结构设计和功能性能规格等,这就需要实施反向工程来实现。(5)再次开发。为了达到对软件功能性能的整体提升,实现更高层次的标准,这就需要实施反向工程来获知软件的编程思想和设计理念从而进行再次开发。(6)仿制。这是在计算机软件反向工程当中,最具有争议的也是备受关注的一方面。在了解掌握了他人所开发软件的设计流程、编程思想和组织结构设计后,进行修改抄袭。例如:在原软件的基础上,对软件产品的步骤加以改变,加入一些新功能,或者是在软件运用过程当中将并不运行的注释语句加入到程序代码中等等。最终将这些软件产品作为自己的独创作品进行大量的复制并且向市场抛售从而达到非法盈利的目的。

以上所述六种情况虽然不能囊括实施反向工程的所有目的,但还是充分体现出在计算机软件方面实施反向工程的原因是十分复杂的,不能一概而论。分析上述六种情况,我们可以得出结论:第六项仿制的目的,不难看出已经侵犯了软件的著作权,会受到著作权的严令禁止;第一项修改完善软件、第二项解决软件运行阻碍、第三项检测并排除软件病毒,这三项实施反向工程的目的是为了保证最终用户可以正常使用软件所必要的行为,属于合理使用;第四项提升软件之间的兼容性、第五项再次开发,这两项目的的法律性质不容易把握,这是否属于合理使用是需要进一步探讨的,因为要达到这两项目的在实施反向工程的行为当中在一定程度上存在侵害了软件所有者的著作权,但是这些行为无疑对计算机软件行业的发展具有重要意义,如促进现有技术发展、增长软件供给时间等。本文的重点就这一系列问题,对计算机软件实施反向工程的合法合理性进行探讨。

二、著作权法下分析软件反向工程的合理使用以及实施条件

(一)软件反向工程权利属性的界定

在探讨反向工程的合理性之前,首先要对其的权利属性进行划分。目前来说,各个国家都倾向于用著作权保护计算机软件,当然我国也不例外。所以,就必须要讨论反向工程在版权上是属于哪一种权利,这就涉及了反向工程法律属性的问题。

根据前文所提及的,计算机软件反向工程的活动是多种多样的,其中最基本最主要的也就是反编译和反汇编,因此,反向工程所涉及的法律属性问题归根结底也就是反编译和反汇编的法律属性问题。而且,反编译和反汇编是相对于编译和汇编而言的,最先开始,程序员通过编译或者汇编编写出源代码,也就是人读语言,还必须通过编译器或汇编程序将该源代码转换为目标代码(机读语言),而反编译或者反汇编其实就是由目标代码得到源代码的过程。所以,我们初步得到分析途径,即反编译和反汇编的法律属性就要取决于目标代码和源代码之间的关系。

源代码在转化为目标代码时,是通过计算机运行工具完成的,在这过程当中是没有人的创造性劳动所参与,所以源代码不能作为目标代码的演绎作品来看。此外在同一计算机程序作品当中,源代码与目标代码是两种不同的表现形式,源程序属于作品,具有创造性,是人的创造劳动所获得的;目标程序属于最终实现软件功能的工具,具有工具性。由此可见,二者的运行目的以及所实现的功能相同。即一项计算机软件的源代码和目标代码,都是在硬件设备上运行程序对其操作的最终结果。在整个过程中,只有相互转换并没有实际的智力创作活动。综上,我们得到结论,无论是源代码还是目标代码都属于同一作品,此观点在《计算机软件保护条例》第三条规定当中也得到体现。

《计算机软件保护条例》第三条第一项规定:“同一计算机程序的源程序和目标程序为同一作品”。那么我们已经得知对于一项计算机程序的原始源代码以及目标代码而言,两者都属于同一作品。那么通过反编译或者反汇编针对同一目标代码所得到的又一新的源代码有可能是该目标代码的演绎作品也有可能是复制品。从版权关系来看,两项作品之间存在的关系无非只有三种:(1)相互独立创作的作品,有独创性;(2)其中一个作品是另一个的演绎作品;(3)其中一个作品是另一个的复制品。既然属于同一作品,无论是不是新的源代码自然就不是独立作品,第一项排除,具体分析第二和第三项:从作品创作角度分析,一项作品超出复制品的就是演绎作品,我国《著作权法》第十二条规定:演绎作品,是指经改编、翻译、注释、整理的作品是作者在已有作品的基础上经过创造性的劳动而派生出来的作品,其著作权归改编、翻译、注释、整理人所有。此外,在复制品与演绎作品之间,得到的作品未能达到演绎作品的程度,那就只能认定是复制品。严格来说,在汇编情况下,计算机通过汇编工具由源代码指令转换为目标代码指令之间具有一一对应的关系,同时这个过程属于机器完成的工作,并没有赋予人的任何智力创造,所以,这并不适用于《著作权法》中所提到的“改编”。由此可推出,一项计算机软件所进行的对源代码编译或者汇编活动以及对目标代码反编译或者反汇编的活动,都属于复制行为。因此计算机软件反向工程所涉及的是著作权当中的复制权。

(二)软件反向工程的合理使用

在反向工程实施的过程当中,是有复制行为参与其中的。因此实际持有软件著作权的人会认为实施人侵犯了其所享有的著作权。按照著作权法原理,在未经著作权人授权的情况下,在没有免责事由的前提下对其作品复制行为是构成侵权的。因此,若没有法定的免责事由,按照此理,反向工程也是构成侵权的。在此基础上,要想使反向工程唯一不侵权的可能就是此复制行为构成合理使用。

合理使用,是指在法律规定的特定条件下,允许软件著作权所有人之外的人不需要征求著作权人的同意,也不需要向其支付报酬,但前提是基于正当的目的使用其作品的合法行为。在判断是否属于合理使用行为时《美国版权法》第一百零七条规定了如下四个标准:(1)使用的目的、特征与性质,其中主要考察的是是否具备商业价值或者是存在非营利教学目的;(2)有版权的作品的性质;(3)所使用部分的质量与内容相对于该版权作品整体的关系;(4)该使用对版权作品造成的潜在市场和价值的影响。接下来我们对这四项进行具体分析:

1.在前文提及过软件反向工程的六种目的,是多种多样的。若实施反向工程是为了对他人软件进行仿制,则目的不合法,则为此所进行的反向工程亦不属于合理使用。若是为了软件的功能得以提升、解决软件运行故障或病毒、实现软件与其他软件的相互兼容,则实施反向工程的人具有利用学习研究性质,与规定里所提及到的“非营利教学目的”相符。在美国的司法实践中这点得到了充分的证明:美国上诉法院第九巡回法庭审理的Sega Enter.Ltd.v.Accolade,Inc.一案中,Accolade公司从Sega公司处购买了游戏器以及游戏卡,前者的开发者进行了反向工程之后开发了可以与后者的游戏器相兼容的游戏卡。Sega公司认为Accolade公司进行的反向工程所分析得到的代码等侵犯了其版权。该法院认为被告实施反向工程当中的复制行为最终目的是为了发现与原告所生产的游戏器相兼容的功能性要素,获取其目标代码是唯一途径,这不同于商业秘密,因此被告属于合理使用。

2.一项软件作品具有实用的功能,反映出了设计者的思想。但是版权法对软件的保护只停留在保护其的表达形式,而不保护其设计思想。这也就意味着他人只能通过反向工程才可以分析出设计者的最初设计思想。所以,在这层面上,只要最终目的是出于研究而复制软件,否则将会使设计思想得到不应有的保护。

3.就使用部分的质量与内容而言,法律上规定不得过多使用他人的已有作品,尤其包括其实质部分,这是为了避免对权利人造成过多损害。就反向工程而言,虽然在这过程中需要对全部程序进行复制,但这一行为也只是暂时的,可以认作是一个过渡阶段,那么实质上对权利人损害不大。

4.此标准被美国法院认为是最重要的因素,因为如果使用不得当,会严重影响他人作品销售,对设计者造成极大影响。此外,如果是为了仿制盗版软件,则会妨碍正版软件的销售,损害设计者的利益。以上都不属于合理使用。但是,如果是为了软件相互之间的兼容、提升软件使用性能或者解决运行障碍与病毒,这样情况下实施反向工程对作品造成的潜在市场以及价值影响不大。则会被视为合理使用。

(三)软件反向工程合理使用的实施条件

1.欧盟在1991年5月发布的《计算机程序法律保护指令》有一条这样的规定:只有合法的用户才可以进行反向工程。另外,假如实施人已知他人的软件技术信息等负有保密义务,则不能以反向工程为由来抗辩。这也就是说,实施反向工程者首先应该取得合法的软件所有权,并且对原先版权人不负有保密义务。其可以处分自己的财产,因此以正当方式获得的软件才可以实施反向工程。以盗窃等不正当手段获取的他人软件作品,不得实施反向工程。

2.这一点是为了防止实施反向工程者滥用其权利,假如实施反向工程者可以通过查阅公开信息或者其它渠道获取到软件的技术信息等,那么就没有进行反向工程的必要。

3.在计算机软件反向工程领域,版权法规定不允许实施反向工程者利用已有软件生产出与其相同的产品,也就是说不得非法复制他人软件。另外,根据前文所提及的合理使用的要求,使用者的目的仅限于非营利性的正当目的。假如实施反向工程者为了生产盗版软件而进行反向工程,则具有了直接营利的目的而不合法。而且只是简单复制他人软件程序,这样的反向工程成本非常低,会对原软件所有权人造成重大损害。

4.为了防止实施软件反向工程者滥用权力,法律上通常规定实施者只能对其中一部分程序进行反向工程,例如生产兼容程序时就只能对其必要的部分进行反向工程,不能擅自扩大使用范围。此外,实施者一定要开展实际的反向工程活动并且需要付出应有的劳动。假设实施者条件不允许,也没有开展实际活动,最终不能以反向工程为抗辩事由。

5.实施者通过反向工程最终获得的软件技术信息等不得扩散给第三人,更不能用于生产或销售软件。这是为了避免原版权人的利益受到过分的损害。

本文的阐述,对于计算机软件反向工程而言,是有很多好处的,比如有利于开发商积极参与研制兼容性软件;有利于软件技术的进步;有利于降低重新开发软件的成本,最终可以为这一领域带来更多的利益。此外,软件反向工程只有出于正当目的才可以受到法律保护,同时也会注意到对原软件所有权人利益的充分保护,只要将反向工程控制在一定的范围内,不得对他人的利益造成损害,不得妨碍软件的使用,软件反向工程的意义是重大的。

(责任编辑:苏 涵)

2016-10-20

杜昕曜(1993-),男,山西大同人,西安财经学院硕士研究生,研究方向:知识产权法。

DF523.1

A

1672-1500(2016)04-0013-04

猜你喜欢
源代码计算机软件代码
基于TXL的源代码插桩技术研究
创世代码
创世代码
创世代码
创世代码
基于C语言的计算机软件编程
软件源代码非公知性司法鉴定方法探析
浅谈不同编程语言对计算机软件开发的影响
基于语法和语义结合的源代码精确搜索方法
浅谈基于C语言的计算机软件程序设计