从软件源代码的技术特征看开源软件与反向工程的法律属性

2010-01-13 03:48
武汉纺织大学学报 2010年6期
关键词:源代码开源许可

赵 丽

(武汉纺织大学 人文社科学院,湖北武汉 430073)

从软件源代码的技术特征看开源软件与反向工程的法律属性

赵 丽

(武汉纺织大学 人文社科学院,湖北武汉 430073)

源代码是计算机软件的技术核心,是软件技术思想的直接体现。理清源代码的技术特征和法律属性,便于我们理解在现有的以版权保护为主,商业秘密法保护为辅的知识产权保护模式下,开源软件的法律性质以及反向工程的合法性问题。

计算机软件;源代码;开源软件;反向工程

1 软件源代码的编码过程及技术地位

软件是指挥计算机解决某问题而编写的程序及相关文档的总称。计算机程序通常包括源程序和目标程序,又称源代码和目标代码。二者虽然表达形式不同,但内容本质相同。因此,我国《计算机软件保护条例》明确规定二者属于同一软件作品。[1]

然而,二者所采用的编码语言、成码过程、针对对象及用途都有明显差别:源代码编写使用的是类似于自然语言和数学公式的高级语言或汇编语言,如C、Java、Basic、Fortran语言等。其主要面向编程人员,可被专业人员阅读修改,但不能直接被计算机识别和执行,不依赖于具体的计算机硬件。在不同情况下,程序员可根据自身的国籍、语种、程序开发的技术要求等选择最适合的一种或几种高级语言编写源代码,以便于其技术思想的表达和开发。目标代码则以0或1的二进制编码形式表示,能直接指挥计算机各种硬件如存储器、处理器、输入设备、运算器、控制器等执行各项操作,实现一定功能。它通常无需编写,只需由开发工具包①提供的翻译程序将源代码翻译而成。它直接面向机器,可被计算机识别并执行,但不能被人阅读和修改。一般而言,一个源代码编译得到的目标代码唯一,但一个目标代码却可能对应多个源代码。软件开发完毕,最终用户只能获得目标代码和用户手册,除非有特殊约定或公开许可②,源代码保密。

如下图所示,软件开发首先从开发人员的技术思想开始,而这种技术思想、结构又需要且只能通过源代码的编写来实现。技术开发过程,即开发人员分析用户需要和技术要求,明确软件预期功能和用途,运用专业技术知识,设计算法、确定结构,选择高级语言编制源代码的过程。此后,利用翻译程序将源代码翻译成目标代码,由计算机自动识别运行。初次试运行结束,开发人员根据运行结果,调试查找问题,修改源代码,再次投入翻译、运行。一个新程序开发成功往往需要多次试运行修改,直至获得最佳程序方案,投入使用。A.伯特兰先生曾将这一循环试验过程划分为六个阶段:设想—算法—流程图或解决方案—源代码—汇编—目标代码。[2](P74)当然,这其中也包含着开发失败,程序预期功能最终不能实现的风险。

因此,软件开发的关键,在于分析用户需求,编制源代码阶段。源代码直接反映了开发者的思想和结构设计,决定了软件的技术含量和智力水平。获取和阅读源代码是用户及其它开发者获知软件技术的必然途径,尤其对后者而言,更是借鉴现有技术,进行改进和创新的必由之路。

明晰了软件源代码的技术功能与特征后,运用现有的知识产权保护模式——即以版权法保护为主,辅之以商业秘密法的兜底保护,也就不难合理的解释由其引发的开源软件和反向工程的合法性问题了。

2 软件源代码的技术特征及法律要求

2.1 源代码表达的文字性与功能的技术性

首先,计算机软件本身兼具表达的文字性和技术性的二重属性。一方面,源代码通过机器编译执行,可使计算机按指定数学算法进行运算以达到特定功能,解决某一实际问题,这种功能显然属于一种“思想”。从本质上说,软件是“为实现或解决某一特定问题的一系列创造性思维的过程,是将少数专家掌握的特定知识从这些人的头脑中游离出来,以一定的载体存在,成为不必完全掌握这些专门知识的广泛社会公众都能使用的工具”[3]。另一方面,源代码用高级语言编写,又符合“文字作品”的外在特征。

其次,源代码的实用性并不在于表达,而在于程序的构思和功能的实现。因此软件开发和应用具有很强的工业产权性。对此,美国学者曾给与精辟论述:“对于法律评论者和立法者与司法者来说,计算机软件具有一系列非常重要但又难以理解的特征。首先,软件的价值主要在于它的运行而不在于它的文本。其次,软件的文本与软件的运行是相互独立的。第三,软件事实上是由文本(源代码和目标代码)媒介所形成的机器(产生某些实用的功能,也即运行)。体现在软件中的工程设计,通常具有叠加创新的特征。这是由软件工程技术和大量的实用技巧所造成的。”[4](P2308)

2.2 源代码作品表达和思想的创造性都相对较低

首先,表达的多样性和创造性并非源代码编写的创作目的。源代码编写并非为诉诸人的视觉阅读和感知,给人带来精神或情感享受。因此,源代码完全不注重表达形式,如何驱动计算机更具有效率的运作,实现特定功能才是其价值所在。

其次,极其有限的表达方式无疑会限制源代码的创造性。源代码编制过程中,为维持互换性及追求效率,往往只能采用极其有限的表达方式,而编码语言和基础语法、结构的局限性也限制了表达的选择。有的程序表达方式甚至只有一种,若给予这种表达方式以著作权保护,则意味着一个人或极少数人可以长期独占创意(idea)。[5](P210)

最后,功能的普及决定了大多数软件技术新颖性含量较低,无法达到专利审查“三性”要求,专利保护覆盖率不可能很高。然而,源代码的结构、顺序、组织(Structure、Sequence and Organization,简称SSO)又的确体现了编程人员独特的设计思想,对这种思想,版权法断然拒绝保护,对软件开发者有失公平,不利于软件的创新。

2.3 源代码不强制公开

源代码是软件技术的核心,但现有著作权法及专利法均无强制公开的要求。在著作权法自动保护原则下,源代码一经独立创作编码完成,无论发表与否,都可作为“作品”自动获得保护。而根据目前采用软件专利保护国家的专利申请要求,“专利权保护计算机软件之实施,专利的撰写若能使熟悉该项技艺的人士得以据以实施,即为充分揭露,无需写出原始码(源代码)”[6](P45)。只有“在某些情况下,例如在使用自动编写程序代码时”,才需要“在权利要求中使用程序设计语言,因为这种程序源代码代表了一种‘足够高的语言和描述性标识符’使其能够为该技术领域的其他人所完全理解”[7](P320-321)。这就导致了专利权人实质上垄断权利的同时保持技术的秘密状态,非权利人要获取、阅读源代码“作品”必须通过反汇编、反编译等反向技术工程方可完成。

2.4 源代码易于复制

软件的易复制性已成为无可争议的事实,无论源代码或目标代码,一经获得即可轻易廉价复制,且很容易从一种高级语言转换为另一种,盗版的隐蔽性强,很难发现或取证。对此,“没有多少人会否认有必要制止这种复制行为,以及这种直接翻译行为,因为这类行为将从根本上动摇软件开发者开发的积极性。”[8](P68)

软件源代码的上述特性一方面造成了其知识产权保护的诸多困境,专利法保护遭遇理念冲突,而单一的版权法或商业秘密发保护则均存在各自的漏洞和弊端,因此,目前各国比较通行的做法是以版权保护为主——主要保护源代码的表达形式,辅之以商业秘密法保护——以权利人的技术保密手段为前提,保护源代码的技术思想;另一方面,随着软件技术以及开发理念和方式的不断发展,实践中的一些崭新的做法开始出现,需要我们以源代码的技术和法律属性入手,以一种全面的思维去解释其中的法律问题。

3 反向工程的合法性问题——源代码著作权的合理使用

简单说来,反向工程就是前文介绍的软件开发过程的逆向运行。是从软件的目标代码入手,通过反汇编工具将目标代码反向转化为一种中间代码——“汇编代码”(assembly code),而后分析、编译成源代码,以获取其结构、顺序、组织的过程③。这个过程产生的源代码并非与软件编写的源代码完全一致,相反,它要粗糙的多。

国内外关于反向工程合法性问题的争议由来已久。否定者以反向过程中不可避免的复制行为以及商业目的为由,认为其构成版权侵权。[9](P106-108)肯定者以美国《数字千年版权保护法》、欧共体《计算机程序保护指令》、俄罗斯《联邦著作权法和邻接权法》等国家和地区的相关规定④为例证,认为它是一种科研活动,其对源代码和目标代码的复制属于合理使用,软件的兼容性和软件技术发展的叠加效力使得反向工程成为必要。

事实上,由于版权只保护作品的表达,反向工程获取源代码中的技术思想的目的并不够成版权侵权;至于反向工程完成后,所获取的源代码是否一定会被用于新软件的编码之中,构成演绎作品,用于商业用途,这属于反向工程的后续利用,与反向工程本身无关。因此,其合法与否最终归结到反向工程过程中必要的复制、阅读行为是否合法的问题,即反向工程中的复制是否属于合理使用的问题。

合理使用,是指在特定条件下,法律允许他人自由使用享有著作权的作品,而不必征得权利人的许可[10](P108)。版权法规定合理使用事项大多出于社会公益的 目的,为促进文化的普及和借鉴,体现了版权垄断与信息分享之间的平衡。虽然目前世界各国著作权法中均列举了一些合理使用的情况,但都不可能穷尽。事实上,合理使用的范围是一个随社会发展而调整的变量,它既是社会发展的要求也是利益权衡的结果。

反向工程唯一的目的是为了获得源代码,研究其技术思想。诚如前文所述,由于软件源代码一般不公开,反向工程是唯一一种不违反商业秘密法获得源代码的途径。既然版权法赋予读者合法“阅读”的权利,那么就不应当同时将其唯一的阅读途径规定为违法。正因为如此,美国第九巡回上诉法院在Sega Enterprises Ltd诉Accolade,Inc.一案的上诉审中确定:为了解程序设计的思想和功能概念,当进行反汇编行为是接触程序中不受版权保护方面的唯一方法时,则这种反汇编属于合理使用。[11]该院于 2000 年 Sony Computer Entertainment, Inc. v.Connectix Corp.一案中更进一步明确,反向工程中的中间过程的复制行为是“了解原软件中包含的那些不受保护的因素所必需的”[12],因此构成合理使用。

此外,还必须将反向工程本身与反向工程的后续利用区分开来。反向工程,仅指利用技术手段破译权利人的保密措施用目标代码反编译获取源代码的这一过程[13];而获取源代码之后的具体利用,则属于反向工程的后续利用。

就反向工程本身而言,在商业秘密法上,其属于合法获得,不构成侵权;而在版权法上,则是他人对源代码作品的合法“阅读”,其间必要的临时性复制,属于对源代码和目标代码的合理使用,亦不够成侵权的理由。

但反向工程本身合法,并不意味着其后续利用也一定不构成侵权。若采用反向工程的目的仅为了阅读,用于教学或科研,不对源代码进行任何形式的修改和利用,则当然无侵权的可能。但事实是,第三人耗费精力采取反向工程,多半是为了自己新的软件的开发。至此,商业秘密法的保护效力已告终结,而版权法则仍发挥着作用:1、若后续利用时,新编程序直接复制了原软件源代码足够多的部分或全部,构成表达上的实质相似,就会导致版权侵权。2、若完全根据其技术思想,不加入任何原创因素,仅进行表达形式的转换,如换用另一种编码语言,则构成演绎作品,如同不经原作者同意将其英文小说翻译成中文,当然构成侵权。3、若在后续编码中利用了原软件代码的技术思想,但非完全照搬,而是采用新的表达编写出更优的兼容性或竞争性软件,则不构成侵权。某些美国公司为防止亲自实施反向工程的人受原软件影响,不自觉的在新的编码中使用其中的内容,将实施反向工程的人与重新编码的人完全隔离,后者仅在理解了前者对原软件技术思想的表述后开始独立编码,这就完全排除了版权侵权的可能性。

4 开源软件的法律效力——源代码著作权的有条件公开授权

开源软件(Open Source Software)又称为自由软件,开放源代码首创行动组织(Open Source Initiative Association,OSIA)将其定义为:其软件权利人允许社会公众自由地复制运行、自由地发行传播;强调必须公开软件的源代码以允许人们自由地研究、修改或制作派生性版本,并允许人们自由地发行传播修改版本或派生性版本的软件⑤。它以公开源代码为主要特征,旨在对抗以微软为首的商业软件不公开源代码的版权保护模式,避免垄断,加强软件技术的交流与合作。从产生到现在,开源软件的影响越来越深广,种类已有几千种,代表有操作系统GNU Linux、语言系统GNU C++、数据库管理系统Ingress等,对传统的商业软件构成了巨大冲击。

开源软件虽以“Copyleft”自我标榜,但实际上,其并非不受版权保护的公共软件。基本上所有的开源软件在发布的同时,都会附带一个许可协议,如GPL、LGPL、MPL、NPL、BSD等,规定许可人和被许可人的权利与义务,并把这些权利义务转化为确定的责任。

首先,开放源代码并授权他人的前提是开源者本身对源代码享有版权。

开源软件的所有许可协议都必须规定将许可人(包括最初许可人和再许可人)软件的复制、修改、发布及运行、演示等权利授予被许可人,这也是软件源代码能够为权利人以外的人获得并使用的保证。然而,这种授权行为的前提是,许可人自身对软件享有版权,如果许可人将其不享有版权的软件发布并授予他人上述权利,即为侵犯版权的行为。有些许可证明确规定许可人应保证其发布软件的版权。如IBM许可证(IBM Public License Version 1.0)第2条d款即明确规定,发布者应保证其享有充分的版权以进行许可证规定的版权授权。[14]

其次,开源软件版权人仍是依据版权法取得各项人身权利和财产权利,并依靠版权法和版权制度来保障自身利益的实现。

事实上,权利人开放源代码的行为也是一种授权,只不过与普通商业软件单独有偿授权不同的是,其授权的对象是社会公众,是任何愿意接受公共许可协议条件的人。这实质上正是著作权人行使其著作权的特殊方式,是其所享有的著作权法律效力的体现。同时,开源软件公开源代码,允许公众复制、修改和使用,并不排斥开发者从中获取经济利益。权利人虽然不能再像商业软件一样通过对软件复制品的销售以及对源代码的有偿许可使用来获利,但仍可以从该软件配套的技术服务和信息服务中谋求收益。GPL(General Public License)允许也其对发布源代码的服务收取一定的费用。况且,当商业软件嫁接到开源软件上时,并不要求商业软件也必须公开源代码,因此,著作权人完全可以通过开源软件作为诱因,促进商业软件利益的实现。此外,开源软件的著作权人虽然通过公共许可,放弃了某些经济利益,但是,其享有的人身权利仍然受到著作权法的保护,作者的署名权不得侵犯。

最后,开源软件法律效力的实质是著作权人有条件的公开授权。

开源软件权利人一改商业软件的运营模式,不是将源代码作为商业秘密严加保密,而是通过网络向社会公众公布,将源代码版权的复制、修改、演绎、发布权利授予社会公众,并通过许可证将开源软件的初次发布权授予了所有愿意接受许可证内容的人。通常开源软件授予社会公众的权利包括:(1)为了任何目的运行该程序。(2)自由获取源代码,并在此基础上研究其技术内核。(3)为了个人目的修改或改进该程序源代码。(4)自由散发该源代码的复制件。但是,这种授权不是无条件无限制的。GPL协议中明确规定:“除非你按许可证提出的要求去做,否则你不能复制、修改、转发许可证和发布程序。任何试图用其它方式复制、修改、转发许可证和发布程序是无效的。”许可证中所规定的条件包括:(1)用户在复制并向他人散发源代码和一切派生工作时不得收费(除去必要的工本费),不得附加任何其它条件,并必须附带GPL协议。(3)必须保证对开源软件源代码的任何改进都必须向社会公开。(3)用户修改或使用开源软件的源代码演绎而形成的新程序也必须开源。

由此可见,开源软件并不是对源代码著作权的完全放弃,相反,它是在承认软件源代码著作权基础上的有条件授权。它以一种特殊的开发模式,实现了软件源代码的共享,并享受着因开放源代码而带来的益处:由公众共同开发和改进,让所有的使用者参与到该软件的后续维护和更新之中。它用公共许可协议实现了源代码在编制者和使用者之间的自由传播,并利用版权法的保护使这种自由传播固化成一种不允许任何人附加任何条件加以限制的权利,从而保证了源代码的始终公开。[15]

注释:

① 开发工具包是一个系统软件,实现利用计算机资源,使用、管理、操作维护计算机编制的程序的功能。每种高级语言都有一个开发工具包,为程序员提供编写源程序的环境,并将源程序翻译成目标程序进行调试、运行。

② 如开源软件协议(GPL)的公开许可开放源代码条款。

③ 早期的反向工程还采用一种原始的“黑盒分析(Black Box Analysis)”的方法,但由于其效率低,准确度差,现已基本无人采用。参见:Barbara J. Vining, “The Future of Computer Software Reverse Engineering War : Excessive Protection v. Innovation”, 67 Brooklyn Law Review(2001).p567.

④ 上述三部法律分别参见:Digital Millennium Copyright Act. 17U.S. C.1201(2000);韦之.欧共体计算机程序保护指令评介[J].中外法学. 1998(6);孙海龙、李桦佩.软件反向工程法律责任研究[J].五邑大学学报.2001(3).

⑤“Free Software refers to the users’ freedom to run, copy, distribute,study and improve the software.”见自由软件组织网站:http:// www. gnu.org/philosophy/free-sw.html

[1] 计算机软件保护条例(2001年12月20日公布),第三条,第一款[S] .

[2] [西班牙]德利亚.利普西克.著作权与邻接权[M]. 北京:中国对外翻译出版公司,2000.

[3] 应明.计算机程序专利保护在美国的发展趋势[J].知识产权,2001,(1) .

[4] Pamela Samuelson,Randall Davis,Mitchell D. Kapor & J.H.Reichamn:A Manifest Concerning the Legal Protection of the Computer Programs[J],1994,94(1).

[5] [日]土肥一史.知的财产法入门[M]. 北京:中央经济出版社,1998.

[6] 刘尚志、陈佳麟.电子商务与计算机软件之专利保护——发展、分析、创新与策略[M].北京:中国政法大学出版社,2004.

[7] [印]甘古力.知识产权——释放知识经济的能量[M].宋建华、姜丹明、张永华译. 北京:知识产权出版社,2004.

[8] 吴汉东,胡开忠,等. 走向知识经济时代的知识产权法[M]. 北京:法律出版社,2002.

[9] 黄勤南, 尉晓珂. 计算机软件知识产权保护[M]. 北京:专利文献出版社,1999.

[10] 吴汉东. 知识产权法[M].北京:中国政法大学出版社,1999.

[11] Sega Enters. Ltd. v. Accolade[Z]. Inc.,977 F.2d 1510, 1992.

[12] Sony Computer Entm’t,Inc. v. Connectix Corp[Z]. 203F.3d 596, 2000.

[13] Rohan Mishra : Reverse Engineering in Japan and the Global Trend Towards Interoperability[EB/OL]. http://www.meudoch.deu.au/ elaw/issues/ v4n2/mishra42.html, 2010.

[14] See IBM Public License Version 1.0[EB/OL]. http://www.opensource.org/license/ibmpl.php, 2010.

[15] 张平,马骁. 开源软件对知识产权制度的批判与兼容(二)——开源软件许可证的比较研究[J]. 科技与法律. 2004,(2): 47.

On the Intellectual Protection of the Software Source Code based on its technical features

ZHAO Li
(Institute of Humanities and Social Sciences, Wuhan Textile University, Wuhan Hubei 430073, China)

The software Source code, which directly reflects the main creative idea of the programmer,is the technological core in the process of programming. Undersdanding the technical and legal features of the source codes can help to identify the legitimacy of the reverse-engineering of software and the legal status of the open-source software.

source codes,reverse-engineering of software;open-source software

DF523

A

1009-5160(2010)06-0022-05

赵丽(1981—),女,博士,讲师,研究方向:知识产权法学、WTO法.

猜你喜欢
源代码开源许可
版权许可声明
版权许可声明
基于TXL的源代码插桩技术研究
版权许可声明
本期作者介绍
五毛钱能买多少头牛
2019开源杰出贡献奖
软件源代码非公知性司法鉴定方法探析
基于语法和语义结合的源代码精确搜索方法
大家说:开源、人工智能及创新