作者简介:
邓  超,北京合弘威宇律师事务所律师,法学博士。行业领域为TMT领域,专业领域为知识产权。为TMT领域的客户提供知识产权与合同相关的诉讼以及非诉类法律服务。
一、开源软件的简介
使用开源代码的好处是显而易见的。在进行软件开发时,如果有现成、免费且成熟的代码可以使用,那么为何还要费时费力从头开始编写呢?通过使用开源软件,软件工程师可以更有针对性地进行个性化开发,而不必重复进行劳动,从而节省开发成本并缩短开发周期。
而将自己的代码开源也有可以想见的好处:如果能成功吸引开源社区的参与,那么与自己独立完成相比,可能会更好地改进代码(想一想接下来要说明的GNU Hurd与Linux)。并且通过向开源社区进行回馈,可以提高自己的声望和影响。
当然,开源代码也不可避免地会带来一些负面影响,比如安全问题、竞争问题等等。
但目前,无论是软件工程师还是法务人员,普遍对于开源软件仍然不够了解。有人甚至认为:
开源软件是免费的,所以我可以不受限制地随意使用。
这句话的前半句基本正确,因为绝大部分的开源软件确实是免费的,但后半句的“不受限制地随意使用”则显然是一种误解。
开源软件与专有软件等闭源软件一样,都是受法律保护的。开源软件的著作权既没有放弃也没有过期,仍然是享有著作权的。除了著作权外,开源软件还可能被合同法、专利法、商标法等法律所规制。
在著作权法的语境下,软件代码是类似于小说文字被保护的(当然更深入地讲,软件与小说有着诸多不同)。购买了一本小说不意味着你可以改写这本小说或者将这本小说复印并出售,这些行为都构成对小说作者著作权的侵犯。同样,在获得了一段源代码之后,默认情况下不能对该源代码进行改编或者再发行。开源软件的特点在于,在使用者承诺满足一定条件(通常包括给作者署名、附带许可证)的情况下,作者会放弃、让渡部分权利,例如允许使用者将代码改编或者再发行。
使用者所承诺的条件以及作者所放弃的部分权利形成了一种合同关系,更具体来讲是许可合同,在开源软件的情况下该合同经常被称作许可证(license)。许可证是一种无需磋商的、标准化的公共合同,降低了合同的成本。
可能有人会对没有签字、盖章如何形成合同一事抱有疑问。但法律并未要求合同的成立必须以书面进行。事实上,除了复杂的书面合同外,大量的合同关系的形成是不需要签字或盖章的,我们完全可以用行为来形成一个合同关系。例如乘坐地铁,花费4元地铁费从北京站坐到西直门,我们和地铁公司就形成了一个运输合同的关系。
从图中可以看出,许可合同的当事方仅涉及开源代码的作者和使用者,而与制定许可证的开源组织(例如GPL情况下的开源软件基金会即FSF)无关。换言之,在发生合同纠纷或侵权纠纷时,该争议应在开源代码的作者与使用者之间解决,而与开源组织无关。但在一些情况下,开源组织会拥有某些开源代码的著作权而成为作者,可能会使人有些迷惑。例如FSF就拥有GNU系统中众多组件的著作权。
如果未遵守开源许可证,也就是说违反许可合同,会有哪些后果?
违反许可合同的一个后果是守约方可以要求违约方继续履行合同。例如,如果信用卡的持卡人没有按照约定的日期还款,银行当然可以要求持卡人继续还款并加收罚息。在开源软件的情况下也是如此,例如根据GPL许可证的要求,链接到GPL代码的软件全部都必须开源。如果软件未开源,那么就违反了GPL许可证。
2007年,华硕发布了名为Eee PC的上网本产品线,为控制成本,Eee PC的操作系统使用了Linux。而Linux的内核适用的是GPL许可证,但华硕并未根据GPL许可证的要求将驱动程序等组件开源。这一情况被Linux社区的成员发现后,华硕采取了应对措施,将Eee PC的完整源代码公开,包括asus_acpi组件和所有核心数据。公开全部的源代码对于某些软件项目而言可能是灾难性的。
另外一种违反许可合同的后果是许可方(作者)可以追究被许可方(使用者)版权侵权的责任。一些许可证规定了自动终止条款,即在未遵守许可证时许可证自动失效。在没有自动终止条款的情况下,未遵守许可证也可能同时构成合同违约以及版权侵权。开源软件的作者可以要求使用者停止侵权并承担赔偿责任。换言之,任何使用该开源代码的产品需要下架或召回,使用该开源代码的服务需要停止。美国等地曾有过一些开源代码的使用者被作者起诉版权侵权的诉讼,但在我国目前为止还未发生过。
二、开源软件的历史
讲述开源软件的起源就不得不谈自由软件(free software),其历史可以追溯到上世纪50年代。1949年5月6日,世界上第一台完整的冯·诺依曼结构计算机在剑桥大学开始运行,这天因此被认为是现代计算机的诞生日。自计算机的出现直至70年代中叶,计算机的形式为大型机(mainframe),个人电脑(personal computer)尚未出现。计算机的使用者多为政府机构、科研院所或者大学这样的专业用户。彼时的软件产业也与现在大相径庭,因为软件并不单独提供销售,而是随着硬件免费附带的。
当时计算机产业以硬件为王的商业模式有些类似于今日的苹果公司,都以硬件的销售为主要的收入来源,软件是针对硬件量身定做且免费提供的。例如,苹果公司的操作系统(macOS、iOS)不能运行在非苹果设备上,但一旦购买了苹果的硬件设备,其操作系统本身及后续升级都不收费。苹果公司的大量软件,包括生产力套装(Pages文稿、Numbers表格和Keynote讲演)也是不收费的,但其实这些免费软件的成本已反映在了硬件的价格上。但彼时与现在的一个最大的不同在于:当时的软件附带有源代码,便于专业人员调试和修改。
Lawrence Livermore National Laboratory的IBM 704大型机(1964)
从法律上看,当时的法律并不能给软件这一新兴事物提供周密的保护。虽然现在都将软件受著作权法保护视作是理所当然,但在过去,采用何种路径来对软件提供保护一直争议很大。因为著作权法的传统对象是文学艺术领域的作品,而软件显然不属于该领域。虽然在上部分中提到过,在著作权法的语境下,软件被视为文字作品(例如小说),但没有人会去阅读软件代码——就像阅读小说那样。软件作为功能性文本,其唯一作用就是被计算机执行以实现一定的功能,并且曾被认为是著作权法不保护的“思想”。因此,直到上世纪80年代末我国在进行相关立法时,究竟是将软件保护单独立法还是纳入著作权法的框架内都发生过争议。由于不受著作权法保护,因此,当时软件的形态为公有软件(public domain software),这也成了软件附带源代码的法律基础。
进入70年代后,随着微处理器的出现(1971年,因特尔4004)和个人电脑的普及(1974年,第一台个人电脑Altair 8800上市;1976年,乔布斯开始销售苹果一代电脑),计算机产业和软件产业的形态发生了大幅变化。由于受众的增加和使用范围的扩大,硬件附带的软件无法满足需求,逐渐出现了一些专门开发通用软件的公司。自然,这样的软件公司需要对软件收费来获取利润。但软件收费与提供源代码显然是矛盾的,因为只要仍然提供源代码,就无法阻止用户或者竞争对手复制或改写软件代码。因此,到了1983年,在IBM执行“仅目标代码”策略后,几乎所有的软件公司都不再提供软件的源代码。
在法律方面,美国在1974年到1980年之间逐步通过一系列法律,确定了用著作权法保护软件的路径。并且在1981年,美国最高院通过一个判例确定了软件也可以受专利法保护。至此,美国确立了在原有知识产权法的框架下保护软件的方针,我国亦然。
一些人对于软件从免费转向收费并且不再提供源代码这一现象感到不适应或不满,其中最著名的就是发起了自由软件运动的Richard Stallman。时间退回至70年代,当时Richard在MIT的AI(人工智能)实验室做程序员。在70年代到80年代的变革期间,有两件事给了Richard较大的刺激,促使他辞去工作,投入到自由软件运动当中。
Ruben Rodriguez的Richard Stallman at LibrePlanet 2019 / CC BY 4.0
一件事涉及实验室的打印机。当时的打印机都带有程序的源代码,因此在打印机出现故障时,Richard可以直接修改源代码以解决各种故障。但后来实验室购入了一台新的施乐打印机,但不再附有源代码。Richard无法像以前通过修改代码来解决打印机故障,并向实验室的与施乐公司有往来的教授寻求帮助。但该名教授拒绝了Richard,因为已经与施乐公司签署了保密协议。
另一件事涉及LISP编译器。LISP是一种古老的编程语言,Richard曾经在一个LISP编译器的项目上工作了好久。后来Symbolics公司向他索取该编译器的代码,Richard便提供了公有领域的代码。该公司在拿到代码后对编译器进行了扩充和改进。得知此事后的Richard向Symbolics公司索取改进后的代码,但是被拒绝,原因是修改后的代码属于专有软件。
Richard秉持所有软件都应该对所有人公开的共享哲学。对上述事件感到不满的他认为解决问题的手段就是编写一个完全自由的、与Unix(当时最流行的闭源操作系统)兼容的操作系统,并将其命名为GNU(GNU’s not Unix的递归缩写)。1983年,Richard辞职投入到GNU操作系统的开发当中,并于1985年在美国波士顿成立了自由软件基金会(Free Software Foundation,FSF)。1989年,代表其哲学的GPL许可证第一版发布。该许可证是使用最广泛的自由软件许可证,其特征为:适用该许可证的代码的所有衍生代码都必须开源并且基于相同的许可证发布,具有鲜明的著佐权(copyleft)性质。Richard的自由软件运动影响了很多人,包括维基百科的创始人Jimmy Wales。
时间来到1991年,自由软件基金会已经开发了GNU操作系统的大部分组件(例如编译器、编辑器、用户界面等),但是仍然未完成作为操作系统核心的内核,即GNU Hurd。时至今日,在自由软件基金会成立的35年后,GNU Hurd仍没有释放出可用的1.0版。这不能怪任何人,因为开发一个操作系统内核的成本实在是太高了。根据2018年9月针对4.1版本Linux的一个测算,如果该版本所含有的2000万代码全部由美国程序员来完成,按照当时美国的平均工资,重写该版本Linux的成本大约要147亿美元!
完成操作系统内核的任务是在一个21岁的芬兰大学生Linus Torvalds的带领下完成的。出于个人兴趣和测试目的,Linus于1991年9月编写了0.01版的Linux内核,而该版内核甚至还无法运行。不过1个月后他就写出了0.02版,该版本已可以运行各种GNU组件了(所以Linux也常被称为GNU Linux)。在0.02版后,来自世界各地的程序员们加入到了Linux内核的开发中,使其迅速完善。在1992年2月释放0.12版时,Linus将Linux内核的许可证改为GPL许可证第二版,并一直保持至今。1994年3月,1.00版Linux内核开发完成。目前,Linux几乎垄断了除个人电脑层面外的其他所有计算设备的操作系统,从世界前500台超级计算机到大量的移动设备(主要是安卓操作系统)都在使用Linux或其变种。
Krd拍摄Von Sprat改编的LinuxCon Europe Linus Torvalds 03 / CC BY-SA 4.0
虽然事后来看Linux是非常成功的,但在当时,少有人能够预见到一群志愿者能够共同完成一件极其复杂的作品。美国的Eric Raymond于1997年针对此现象撰写了文章《大教堂与集市》,他比较了两种软件开发方式,GNU Hurd类似于大教堂,其特点是封闭式开发、成本高、周期长、品质优异;而Linux类似于集市,其特点是开放式开发、成本低、周期短、品质平庸。GNU项目的软件虽然源代码是公开的,但其开发是由一个专属团队管控的;而Linux的源代码在互联网公开后可以被所有人查阅并改进。
1998年1月,在浏览器大战中由于Windows的捆绑而败给微软IE的网景公司部分是因为受到了《大教堂与集市》一文的启示,决定开放其导航者(Netscape Navigator)浏览器的源代码,作为自由软件由全世界的程序员进行改进(导航者浏览器之后演变为今日的Mozilla火狐浏览器)。Eric反过来又受到网景公司的启示,认为可以将自由软件引入到商业世界中。但自由软件(free software)这一用语在当时并不被商业界接受,因为自由与免费的英文都是同样的free,自由软件容易令人联想到免费软件。另外,自由软件的哲学,尤其是著佐权(copyleft)性质的许可证也过于激进。
jerone2拍摄Bilby改编的Eric S. Raymond / CC BY-SA 2.0
思前想后,Eric等人引入了开源软件(open source software)这一用语,并获得成功。1998年2月,旨在推广开源软件的开源促进会(open source initiative,OSI)在美国加州成立。根据开源促进会的标准,开源软件可以使用非著佐权(copyleft)性质的宽松(permissive)许可证,允许该许可证下的代码的衍生代码闭源。
自由软件与开源软件有时被合称为自由开源软件(Free and Open Source Software,FOSS)。虽然并不严谨,但是可以粗略地认为自由软件适用的是著佐权(copyleft)许可证,而开源软件除此之外还可以适用宽松许可证。
三、开源软件的许可证
开源软件许可证从法律的观点来看相当于一份一份的许可合同,只不过这种许可合同并非协商得到,而是事先规定好的标准化合同。据不完全统计,目前存在的许可证有超过200种。有一些许可证的要求看起来很奇怪,例如Jason Hunter许可证(http://www.servlets.com/cos/license.html)要求如果将该许可证下的代码用于商业目的,那么项目开发团队的所有成员都必须拥有最新版本的《Java Servlet编程》(作者:Jason Hunter)一书。即便是开源促进会批准的许可证(https://opensource.org/licenses/alphabetical)目前也有96个之多。
但幸运的是,绝大多数开源软件使用的都是常见的许可证。根据WhiteSource的调查,2019年,90%的开源软件都在使用10个许可证(包括同一许可证的不同版本)。因此,了解常见许可证的内容,无论对于使用开源代码还是将自己的代码开源,都是非常有帮助的。
许可证可以大致分为两种类型:著佐权(copyleft)许可证以及宽松(permissive)许可证。正如前文提到过,著佐权(copyleft)许可证的特征在于其互惠性:如果你使用了该类许可证的代码,那么也需要将衍生的代码开源给他人使用。而宽松许可证的特征在于其“怎么都行”:对于使用了该类许可证的代码后的衍生代码的使用方式几乎没有限制。根据上述调查,宽松许可证的占比近几年一直在上升。
由于开源软件的性质,开源许可证一般具有如下两个共通点:开发者不承担瑕担保责任以及保留著作权标记。瑕疵担保责任一般发生在有偿合同中,而开源代码通常都是免费提供的,因此,开发者并不负有瑕疵担保责任。事实上,由于开发者无主观过错,多数许可证都免除了开发者的任何责任。另外,由于开源软件的著作权并未放弃或过期,因此,许可证一般都要求以适当的形式保留著作权标记(包括许可证正文以及作者署名)。
下面说明常见的许可证
1.GPL
GPL即GNU GPL(General Public License,通用公共许可证)。GPL第一版由Richard于1989年撰写,1991年发布了第二版(v2),2007年发布了第三版(v3)。目前常用的版本是v3和v2。GPL是典型的著佐权(copyleft)许可证,任何基于GPL代码编写的软件都必须成为开源软件。换言之,使用了任何GPL代码的软件——无论GPL代码的占比有多小——都必须将完整的源代码公开,并允许他人修改、发布。GPL的这种特性经常被称为“传染性”,在使用开源代码时需要多加注意该许可证下的代码(为了简化,不考虑classpath例外)。
GPLv2和GPLv3的主要差别在于:GPLv3的兼容性更好,FSF明确表示GPLv3与Apache 2.0许可证兼容。意味着这两个许可证下的代码可以合并为一个更大的项目。另外,GPLv2是针对美国版权法撰写的,而GPLv3的撰写则更多地考虑到了其他国家的版权法,便于在世界范围使用。
2.LGPL
GPL由于其传染性,对商用化并不友好。例如,如果一个软件链接(为了简化,不考虑动态链接或静态链接)到GPL下的库(library),那么在法律意义上该软件也属于衍生软件(为了简化,不提及独立软件与衍生软件的判断标准),根据GPL的规定,该衍生软件需要开放源代码。针对GPL的这一缺陷,于是就有了LGPL许可证。LGPL是lesser GPL的简称,也就是限制更少的GPL的意思,目前常用的版本是2.1。
LGPL下发布库时,链接到该库的软件可以不适用LGPL或GPL,换言之,可以不公开源代码。LGPL的这一特性消除了在GPL下软件商用的障碍。但需要注意的是,链接到该库的软件不需要开源,基于该库修改而得到的软件仍然需要遵循GPL许可证进行开源,因此,LGPL被认为是弱著佐权(copyleft)性质的许可证。
3.MIT
MIT许可证是几乎所有许可证中最简单、最宽松的,也是目前最受欢迎的许可证。其对于开源代码的使用没有任何限制,只需保留著作权声明和许可证内容即可。
4.BSD许可证
BSD许可证包括原始的4句许可证(BSD)、修改的3句许可证(BSD3)以及简化的2句许可证(BSD2)。BSD既指该原始的4句许可证(BSD)本身,也泛指这3个宽松许可证(BSD、BSD3、BSD2)族。目前常用的版本是BSD3、BSD2和BSD。
BSD2许可证下,保留著作权声明、许可证内容以及免责声明即可,类似于MIT许可证。只要满足许可证设定的条件,就可以自由地修改并发布代码。BSD3许可证在BSD2许可证的基础上增加了背书条款;BSD许可证进一步增加了广告条款。
5.Apache
Apache许可证也是一种宽松许可证,其最大的特点在于Apache许可证许可给使用者著作权以及专利权——不同于其他只涉及著作权的许可证。作为宽松许可证,Apache允许修改后的软件以不同的许可证发布,但是未修改的部分仍然需要保留Apache许可证。目前常用的版本是2.0。
BSD的区别主要在于专利条款,以及Apache许可证文档本身不需要改写。
四、开源软件的法律风险
开源软件的一个法律问题是在决定将软件开源时要如何选择许可证。如果公开了源代码而不使用许可证,那么默认的著作权法会发生效力。换言之,软件完成时自动产生的著作权将禁止该源代码被除作者外的他人使用、修改或者发行。因此,在将软件开源时应该附有许可证。作者有时可能期望撰写一个全新的许可证以完全满足自己的需求,而不使用常见的许可证(如MIT、GPL、Apache)。这是完全可以的,但是没有必要,而且会造成所谓的许可证泛滥(license proliferation)现象。开源的主要目的在于鼓励更多的人员参与到项目中来,而编写一个令人陌生的许可证(考虑到现实状况,许可证语言一般采用英文)显然与该目的背道而驰。
另外,还要考虑许可证的兼容问题,也就是将不同许可证下的代码合并在一起,而又不违反许可证的要求。常见许可证的兼容性更好,且更易于判断兼容性问题。更何况现有的几百个许可证已经可以满足几乎所有的需求了。总而言之,在决定将软件开源的许可证时,建议根据项目的特点和需求,从现有的许可证中进行选择。
开源相关的主要法律风险主要在于使用开源代码进行软件开发时,由于未遵守许可证(许可合同)而可能负有继续履行合同的义务或者可能承担版权侵权的责任。我国迄今为止未发生过这样的判例。在以往发生的若干判例中,情况大多为软件权利人起诉他人侵犯了该软件的版权,而他人以开源软件作为抗辩理由(基本都不成立)。美国、德国等有一些涉及开源软件许可证的诉讼,但数量也不多。
与商用软件相比,开源软件和开源社区仍然是十分友好的,纠纷较少的原因可能有如下几点:第一,侵犯软件版权的最重要形式——盗版,在开源软件中并不存在。盗版是发行软件而不向权利人支付许可费的行为,但开源软件本身就允许免费发行,只有在发行修改后的软件并且没有遵循许可证规定的情况下才构成违约或侵权。第二,在遵守许可证方面,与法律诉讼相比,开源社区更加依赖于程序员间的自律。违反许可证的行为会导致开源社区的不满或抱怨,从而导致被开源社区排斥。第三,至少在中国而言,开源软件属于不可分割的合作作品,在起诉时,绝大多数法院要求所有作者共同提起诉讼才能被受理。
但不注意合法使用开源软件仍然会带来麻烦。近日的Artifex诉Hancom案就是一起韩国公司因为开源软件的使用被美国公司在美国起诉的案例。其案情为:美国的Artifex公司拥有一款名为Ghostscript的软件。针对该软件,Artifex公司提供了两种许可方式:商用许可或者GPL下的开源许可。韩国的Hancom公司将Ghostscript整合进其Hangul软件中,但并没有从Artifex公司购买商用许可,也没有根据GPL许可证将软件开源,因此违反了GPL许可证。2016年12月,Artifex公司在加州北区联邦法院起诉Hancom公司版权侵权以及违反开源软件许可证。Hancom公司提出了撤销案件的动议,包括原告不能针对被告在美国境外的侵权行为根据美国版权法提起诉讼。2017年4月,法院否决了被告的动议并认为“至少有一些侵权行为是在美国发生的”并且“美国的行为与境外侵权之间存在必要的联系”。2017年年底,双方达成庭外和解。
下面说明使用开源软件时需要注意的两个主要问题,版权和专利。
1.版权
在我国,开源软件许可证构成作者与使用者之间的合同。使用者在违反许可证设定的义务时构成合同违约,同时,根据具体情况还可能构成版权侵权。根据合同法的规定,在违约与侵权构成责任竞合时,当事人需择一地主张权利。
在美国,开源软件许可证的法律性质仍存在争议,有观点认为许可证是可以寻求版权法救济的单方的许可;有的则认为许可证是可以寻求合同法救济的双方的合同。违反许可证仅构成合同违约抑或是还构成版权侵权,Jacobsen诉Katzer案给出了一些启示。其案情为:Jacobsen管理编写了名为DecoderPro的软件,允许铁路模型爱好者对控制火车模型的解码器芯片进行编程。DecoderPro以开源的艺术许可证1.0发布。Katzer提供一个也用于对解码器芯片进行编程的竞品软件Decoder Commander。在开发过程中,Katzer的雇员从Decoder Pro下载了解码器定义文件并用于Decoder Commander,但Decoder Commander软件没有遵守艺术许可证,例如没有记载版权声明等。2006年9月,Jacobsen向地区法院申请临时禁令,但法院于2007年8月认为该案仅仅是合同违约,因为驳回了该禁令。Jacobsen向联邦巡回上诉法院提起上诉。上诉法院认为根据加州法律,艺术许可证中的条款是可执行的版权条件,于2008年8月将案件发回重审。双方于2010年2月达成庭外和解。
该案的意义在于美国法院确认了艺术许可证1.0的条款构成可执行的版权条件,从而在违反该许可证的条款时构成版权侵权。与中国法类似,美国法下版权侵权的救济往往优于合同违约的救济(例如在版权侵权案件中,权利人可以要求诉前禁令,败诉方负担律师费,惩罚性赔偿等等),因此,该裁决有利于开源软件的作者一方。
2.专利
软件被多项法律规制,以著作权法和专利法为例,著作权法保护的是软件的编写表达,而专利法保护的是软件的设计思想。在专利方面,开源软件与其他软件并无不同。
随着微软公司对开源软件的态度从敌意转为拥抱,在2018年微软公司携带6万件专利加入了开放发明网络(OIN,Open Invention Network)。由于OIN是个旨在保护Linux自由运行而持有防御性专利池的团体,因此,这一事件仅仅表示微软不会对Linux内核及Linux环境主张专利权,不代表使用开源软件的其他实体的专利风险会因此减少。
使用Apache 2.0等含有专利条款的许可证可以防止开源代码的使用者被作者起诉专利侵权。至于来自开源软件当事方外部的第三方专利威胁,则需要通过自由实施(FTO,Freedom to Operate)等来识别。虽然国内外并未发生过专门针对开源软件的专利诉讼,但是该等专利诉讼与普通的软件专利诉讼并无差别,因此本文不赘言。
作者邮箱[email protected]
扫码关注我们
继续阅读
阅读原文