首页 > 资讯 > 热点分析 > 信息详情
512月
开源软件在商业应用中的风险与对策
e小方 2024-12-05 14:51 浏览1143 收藏30

image.png

一、引言

开源软件因其低成本、可改进以及代码开放的特性,极大地推动了软件产业的发展。同时,中国在全球开源软件产业中占据着愈发重要的地位。据央视报道,我国目前有97%的开发者以及99%的企业都在使用开源软件,开源软件开发者数量已突破800万,位居全球第二[1]


然而,开源软件对应的开源许可协议版本众多且条款繁杂,仅经OSI(开放源代码促进会,Open Source Initiative)批准的开源许可协议目前就多达 100 多种[2]。在商业应用中,一个软件包中可能会用到多个开源软件,不同开源软件可能适用不同的开源许可协议,不同的开源许可协议规定的义务各不相同,协议之间甚至存在兼容性问题,这给开发者带来了沉重的阅读负担。


其次,一部分使用开源软件进行商业软件开发的人员缺乏专业的法律知识,想当然地认为所有开源软件都可免费使用并修改,没有意识到违反开源许可协议使用开源软件所面临的法律风险。

再次,开源许可协议大多采用规范的法律语言并且用英文书写,对于非法律专业的开发人员而言晦涩难懂,存在因未理解条款而未按协议规定履行义务,进而导致侵权或者违约的法律风险。


基于上述情况,本文旨在从法律视角对软件开源许可协议进行剖析介绍,以便开发人员在使用开源软件时,能够更加注意相关开源许可协议的相关义务,有效防范法律风险。


二、开源许可协议在中国法律规范下的认识

目前,我国国内没有专门针对开源软件的法律法规或司法解释,涉及开源软件的案件屈指可数,有关开源许可协议的裁判规则几乎空白。然而,笔者认为,中国现有法律规范也可在一定程度上对开源许可协议进行保护。

在确定开源许可协议所适用的法律之前,需要确定开源许可协议的属性。目前,学界对于开源许可协议是否属于合同存在争议[3]

开源许可协议中,任何人只要遵守协议内容,就可以使用开源软件。从权利义务行使的外观上看,该协议似乎是对不特定第三方进行的许可。有观点据此认为,开源许可协议不具备合同的主体相对性原则,不属于合同。

对此,笔者持不同看法。虽然对于不特定第三方而言,只要遵守协议义务就可以使用开源软件,但如果其中一个使用者违反协议规定,著作权人可以终止协议并追究其民事责任,但这不影响其他遵守协议义务的使用者享有开源软件的许可权。

也就是说,不同的被许可方之间,开源许可协议的法律状态相互独立,法律效力不会相互影响。因此,笔者认为开源许可协议符合主体相对性原则。应理解为,软件著作权人就开源许可协议与多个被许可方分别达成了一致的意思表示,这相当于与多个不同的合同主体签订了内容相同的多个合同,每个合同分别约束对应的使用者。

在确定开源许可协议属于合同之后,接下来根据《民法典》中合同编的相关规定,分析使用者未按照开源许可协议规定使用开源软件应承担的法律责任。

根据法律相关规定,合同在要约人发出要约后,受要约人在规定期限内作出承诺,合同即成立。

笔者认为,著作权人在发布源代码时,一并发布开源许可协议的行为构成要约。


根据《民法典》第四百七十二条规定,要约是希望与他人订立合同的意思表示,该意思表示应当符合下列条件:

(一)内容具体确定;

(二)表明经受要约人承诺,要约人即受该意思表示约束。

开源许可协议的内容规定了使用者享有免费使用甚至修改代码的权利,有些协议还规定使用者需遵守一定的义务,如著作权人的署名权披露义务、对软件的衍生文件的源代码披露义务等。可以看出,开源许可协议的内容规定了具体确定的使用者所享有的权利、承担的义务。

并且,从交易习惯来看,如果使用者承诺履行开源许可协议的义务,著作权人即受到该许可协议的约束,给予使用者许可权。


 因此,著作权人在发布源代码时一并发布开源许可协议的行为符合《民法典》关于要约的定义。

笔者认为,使用者通过行为作出履行开源许可协议中规定的义务的意思表示的基础上,再使用著作权人发布的源代码的行为可以构成承诺。

依据《民法典》第四百七十九条的规定,承诺是受要约人同意要约的意思表示。即受约人同意接受要约的全部条件而与要约人成立合同。承诺通常以通知的方式作出,但也可以根据交易习惯通过行为作出。

由于使用者不特定,开源软件发布后会有数量庞大的使用者使用。要求每个使用者在使用前以通知著作权人的方式作出承诺并不现实。通常情况下,在履行开源许可协议中规定的义务的基础上,使用者使用著作权人发布的源代码的行为(包括引用代码、修改代码、链接开源软件等行为)即构成承诺。

但需要注意的是,只有使用者在以实际行动表示自己愿意履行开源许可协议中规定的义务的情况下使用开源代码,才能构成承诺。


根据《民法典》第四百八十八条的规定,承诺的内容应当与要约的内容一致。受要约人对要约的内容作出实质性变更的,为新要约。

开源许可协议赋予了许可人使用开源软件的权利,也规定了使用者所要履行的义务。如果使用者没有履行开源许可协议中规定的义务就使用了开源代码,则相当于使用者只愿意享受权利而不愿意承担义务,即使用者希望将开源许可协议从原本的双务合同修改成纯获利益的合同,受要约人(即使用者)对要约的内容(即开源协议的内容)作出了实质性变更。此时,使用者使用源代码的行为不是承诺,而是新要约,开源许可协议并未成立,著作权人不能依据开源许可协议请求使用者承担违约责任。 

然而,使用者未获得基于开源许可协议的使用权许可,如果此时出于商业目的对开源软件的代码进行修改、复制、引用,则会侵犯著作权人的修改权、复制权,著作权人可以要求使用者承担删除代码、民事赔偿等法律责任。

结合上述分析,使用者如果在未阅读开源许可协议的情况下直接使用开源软件,可能因无法充分履行开源许可协议规定的义务而承担侵权风险。因此,建议使用者在使用开源软件前阅读开源许可协议的相关内容,按照规定履行义务。


三、开源许可协议常见的使用者义务及相关风险介绍

在一般的软件许可协议中,通常只需使用者在分发软件时向其他接收者提供开源许可协议副本,并且保留原代码中的版权声明、修改声明和免责声明即可。但对于某些特殊的许可协议,还要求使用者履行其他义务,以下就其中一些常见的使用者义务及违反义务的相关风险进行介绍。


(1)著作权条款

在开源许可协议中,最被熟知的使用者义务是“著佐权条款[3]”。“著佐权(Copyleft)”这个词最早出现在对创立GPL协议的GPU操作系统的网站上[4],其初衷是创建一个与“版权(Copyright)”有镜像意义的词汇。通常的版权许可行为中,用户必须在使用软件前联系著作权人签订许可合同,这剥夺了用户的使用自由。而创建著佐权的目的是提供另一种保护方法,在保护版权的同时给予用户使用自由,但为开发者设立了开源的义务。


著佐权条款出现在GPL系列的许可协议(包括AGPL、LGPL协议)及MPL、EPL、CDDL等相关许可协议中。该条款规定,如果将相关许可协议下的代码与自己的代码达到了一定程度的结合,那么整个软件都必须依据相关许可协议进行发布,这也就意味着所有源代码必须强制公开,这对大部分商业软件不利。对于商业软件而言,代码开源后,竞争对手便可以直接使用或修改源代码,可能导致商业竞争加剧,影响企业市场地位。


根据强制代码开源的严格程度,可以将包含著佐权条款的许可协议分为超强著佐权协议、强著佐权协议、中等著佐权协议和弱著佐权协议。

超强著佐权协议的代表是AGPL协议,该协议要求,被许可的软件不仅在分发时需要允许用户获取源代码,即使没有分发行为而仅通过网络提供云服务,也需要允许用户获取服务所使用的源代码。

强著佐权协议的代表是GPL协议,如果某个软件使用了GPL协议下的代码,那么在分发软件时,整个软件必须以GPL协议发布,这意味着所有源代码必须公开。


中等著佐权协议的代表是LGPL协议,该协议允许动态链接开源数据库,即如果某个软件只是动态链接了LGPL协议下的库,而没有修改库的代码,那么主程序可以不以LGPL协议发布,即可以是闭源的。

弱著佐权协议的代表是MPL、EPL、CDDL协议,这些协议不仅允许动态链接,还允许静态链接开源数据库。只有在对相关许可下的代码进行修改时,修改的内容需要按照相关开源许可协议开源并发布。需要注意的是,在使用这些许可协议下的代码时,需要将这些代码与使用者自己的代码相对独立,最常见的做法就是将这些许可协议下的代码独立打包,以防止被认为使用者自己的代码构成了对许可协议下的代码进行的修改,而导致所有代码强制按照相关协议被开源。


由上一节的分析可知,如果使用者并未按照许可协议的要求进行开源,则说明双方未对开源许可协议的条款达成合意,开源许可协议并未成立。使用者此时在未经著作权人许可的情况下使用相关代码,著作权人可以据此追究使用者侵权责任,要求侵权赔偿。

这意味着,开源软件的使用者引用开源代码的行为一旦激活了著佐权条款,则需按照著佐权条款的规定开源,否则会承担停止使用并赔偿侵权费用的风险。

另一方面,在国内司法实践中,如果使用者引用开源代码导致自开发代码应开源,但使用者不履行开源义务而进行闭源处理,即使该自开发代码被他人抄袭,也可能无法向他人要求侵权赔偿。

在(2021)苏01 民初3229 号民事诉讼案中,原告南京未来高新技术有限公司起诉被告江苏云蜻蜓信息科技有限公司持续侵害计算机软件著作权。但经南京市中级人民法院查明,原告的主程序源代码软件含有应遵守GPL V2.0开源许可协议的开源代码,但原告未遵守开源协议要求进行了闭源处理。最终判决被告并未侵犯主程序的著作权。


(2)专利许可条款

如果软件旨在解决技术问题,利用了技术手段并实现了技术效果,那么它属于专利保护的对象。因此,部分软件在获得著作权的同时,还可以得到专利授权。此时,该软件同时受到著作权和专利权的保护。使用者基于许可协议获得了著作权的使用权的同时,其使用软件的行为还需获得该软件对应专利权的许可。

基于此情况,部分开源许可协议增加了专利许可条款,包括 Apache V2.0、GPL V3.0、LGPL V3.1、AGPL V3.0、EPL、MPL、CDDL协议。

专利许可条款将在授予软件许可的同时,授予该软件对应专利的专利许可,从而防止使用者使用软件的行为构成专利侵权,保障使用者安全使用开源软件。

需要注意的是,几乎所有包含专利许可条款的许可协议中都包含专利防御性条款。即,如果使用者对于软件作品的贡献者提出专利诉讼,主张作品侵犯使用者的专利权,则许可协议对于使用者的专利许可授权立即终止。这意味着,开源软件的使用者不能以侵犯专利权为由对开源软件的作者提出专利诉讼,否则会承担停止使用并赔偿侵权费用的风险。

一般来说,专利许可授权终止没有溯及力,即在专利授权终止后,使用软件的行为才构成专利侵权,侵权赔偿的计算时间从专利授权终止起计算。但MPL V1.1协议声明了专利许可终止可溯及既往,即专利授权一旦终止,其在任何时间使用软件的行为均构成专利侵权,此时,侵权赔偿的计算时间从使用者开始使用软件起计算,可溯及既往的规定会导致侵权赔偿费用增加。


(3)广告宣传条款

在一些早期创建的开源许可协议中,例如Apache V1.0和BSD 4-Clause License,包括了广告宣传条款,其目的是要求在提到使用了相关协议下的代码的软件在宣传广告中必须包含一个特定的语句,以表明软件包含了原开发者的贡献。

商业软件的开发人员在进行产品宣传时,容易忽略加入其引用的开源代码贡献者的贡献声明,尤其是开源软件贡献者数量较多的情况下,加入所有贡献声明将大大增加宣传文档的字数。但在这些协议下,如果使用者忽略了这些义务提示,则会造成许可协议未成立,而导致侵权的风险。

然而,广告宣传条款在商业应用中给软件的商业宣传造成了适用上的困难,在目前流行的大部分开源许可协议中,如GPL、MIT、Apache V2.0协议等,已经删除了广告宣传条款。


四、开源软件在商业应用中的应对建议

开源许可协议是一种授权协议,它允许他人在特定条件下使用、修改和分发软件,但这些特定条件是由著作权人通过开源许可协议明确规定的。著作权人并未放弃软件的著作权,而是通过开源许可协议来管理和控制相关权利的行使。

因此,开发者应当在谨慎考虑相关开源许可协议内容的基础上选择开源软件。笔者依据实务经验,建议开发者采取如下策略,尽可能降低使用开源软件带来的法律风险。


(1)选择常见的开源许可协议

OSI、FSF(自由软件基金会,Free Software Foundation)、ASF(Apache基金会,Apache Software Foundation)等很多机构都有其开源许可协议,由于这些机构各自管理相关协议,彼此对于协议条款的解释基准不同,不同机构的协议之间容易出现兼容性问题。其次,开源软件的开发者常根据自己的需要对常见的开源许可协议内容进行修改并形成新的开源许可协议,导致开源许可协议数量不断增加。再次,由于开发者的法律知识不足,修改某些条款很可能导致与其他开源许可协议不兼容,甚至导致条款内容难以理解和执行。

因此,建议开发者选择常见的开源许可协议(例如MIT、BSD、Apache协议等)下的开源软件,常见开源许可协议使用频繁,开发者对于其条款的含义已经基本达成了共识,从而可以避免由于协议条款理解歧义导致的法律风险,便于不同项目之间的集成和协作。


(2)慎用包含著佐权条款的协议

著佐权开源许可协议的一个显著特点是其“传染性”,即任何结合了著佐权许可的软件的衍生作品也必须遵循相同的开源许可协议条款,在实际使用中存在违反开源许可协议要求而引发的著作权侵权风险,以及因开源软件的技术缺陷导致的商业秘密泄露风险。

此外,带有著佐权条款的协议要求使用者遵循的义务较多,其繁杂的规定可能与其他开源许可协议的内容发生冲突,从而导致兼容性问题。例如,GPL V2.0与Apache V2.0就存在兼容性问题[3]。

因此,建议开发者尽量选择不包含著佐权条款的开源许可协议下的开源软件,以避免自开发代码被开源的风险,同时还能保证项目的兼容性。


(3)保持引用开源代码的相对封闭性

对于包含著佐权条款的开源许可协议而言,任何基于开源代码的衍生作品也必须以相同的许可协议开源。保持代码的封闭性,可以在被开源代码的作者认为侵权或者违约的情况下,直接断开与相关开源代码的链接,保持自开发代码的独立性。如果直接将开源代码插入自开发代码,有可能会被认为自开发代码构成开源代码的衍生文件,从而导致全代码开源。

对于不包含著佐权条款的开源许可协议,保持开源代码的相对封闭性也有好处。不同开源许可协议之间可能存在兼容性问题。通过保持代码的封闭性,企业可以避免开源许可协议之间的冲突,确保其产品符合所有相关开源许可协议的要求。此外,一旦某一开源代码的使用因违约或侵权而导致被删除,仍可将保持软件其他部分功能的完整性。此时,开发者可以直接链接到其他有相近功能的数据库以实现相关功能,降低了再开发的难度。


五、结语

虽然笔者提供了一些开源软件在商业应用中的注意事项,但最重要的是通过法律的制定和运行,为开源软件的创新提供稳定的法律环境。我国目前在司法实践中已经关注并处理涉及开源许可协议的纠纷案件,但尚未有专门针对开源许可协议的系统性立法,对于开源许可协议的具体适用、权利义务的界定等方面缺乏详细的规范。这导致在处理一些复杂的开源许可协议纠纷时,法律依据不够明确和具体。笔者建议政府相关部门颁布关于软件开源许可协议的规范性法律文件,明确划分权利人与使用者各自的权利义务,为权利人与使用者提供信心和保障,确保开源软件相关商业活动的良好运行。


参考文献

[1] 搜狐网. 我国开源软件开发者数量已突破800万:位居全球第二. https://gov.sohu.com/a/745405131_114822, 2023-12-19.

[2] 西部数码资讯门户. 开源促进会OSI联合创始人辞职:在许可方面走错了路. https://news.west.cn/68608.html, 2020-01-07.

[3] Heather Meeker. 2023. 商业开源-开源软件许可使用指南: 人民邮电出版社.

[4] GNU Operating System. What is Copyleft?. https://www.gnu.org/licenses/copyleft.html, 2022-01-02.



您可能感兴趣的文章