13910160652
010-52852558
| |EN
首页 > 实务探讨 > 律师 > 版权
  • 13910160652
  • ciplawyer@163.com

软件开发过程中使用开源软件的潜在侵权风险分析

日期:2023-10-31 来源:IPRdaily 作者:范吴斌 浏览量:
字号:

1.什么是开源软件?


开源软件的字面意思是:开放源代码的软件。源代码(也叫源程序)是指一系列人类可读的计算机语言指令。直观理解就是码农们所“码“出来的一行行代码就是源代码。与源代码相对应的概念是目标代码。源代码是人类程序员根据高级语言规则(例如:C语言)所写出来的便于人类理解和认知的代码,而将源代码通过编译器进行编译,生成的可供计算机识别和执行的二进制指令就是目标代码。


与开源软件相对应的是闭源软件,也就是源代码封闭不公开的软件。目前市面上绝大部分的商业版权软件都是闭源软件,即源代码只有作者或者权利人能够看到。这也就导致在软件出了问题或者在实际运行中发现了BUG(漏洞)时,也只有权利人能够通过查看、修改源代码来对软件进行修正和更新。相应的,其不公开的源代码也会构成权利人的商业秘密被法律所保护。而如果一个软件是开源的话,则意味着其源代码面向社会公众是公开的,任何人都可以去查看、修改以及使用该源代码。


有关开源思想的诞生,背后有一个有趣的故事。理查德·斯托曼(Richard Stallman)是有史以来最伟大的几名黑客之一,也是世界上写代码最多的人之一。他曾经买过一个商业软件,结果使用的过程中发现一点小问题,于是他去找软件公司,问他们能不能帮忙修复一下,软件公司说不行,Richard 于是说,那能不能把源代码给我,我来修复一下,公司也说不行。于是Richard很生气,创立了著名的自由软件基金会(FSF),发布了大名鼎鼎的GPL(通用公共许可协议),GPL至今为止依然是最著名的开源许可协议。


2.什么是开源许可协议?


开源许可协议又称开源许可证(Open Source License),通俗来说就是软件权利人在选择将软件的源代码面向社会公众进行公开时所附加的授权许可条款。这里需要强调的是,开源软件即不等于免费软件,也不等于没有著作权的公共软件。一款软件的著作权人虽然面向社会公众公开了该软件的源代码,但是在没有明确的意思表示的情况下,该种公开行为只能代表权利人放弃了以商业秘密的形式来保护其源代码,并不代表权利人放弃了被公开的源代码上的著作权。而开源许可证的作用就是充当了被公开源代码的著作权授权许可协议的角色,权利人可以通过自己拟定许可条款,或者选择特定类型的开源许可证来向准备使用该源代码的不特定用户明确使用的规则和限制。目前已知的开源许可证已经有上百种,常见有GPL、LGPL、Apache、MIT、BSD、MPL、SSPL 等。不同类型的许可证中,针对源代码的复制、使用、修改、传播、再发布等行为的许可与限制条件也不同。


总的来说,开源许可协议就是保证开源软件及源代码按照约定使用的一个法律文件,目的在于规范受著作权保护的软件及源代码的使用、分发等行为。开源许可证是开源软件生态系统的基础,可以极大的促进软件的协同开发。


3.开源许可协议的法律性质


广州知识产权法院在(2019)粤73知民初207号案的判决书中对许可协议的性质做了详细论述,法院认为开源许可协议具有合同性质,是授权方和用户订立的格式化著作权协议,属于广义的合同范畴,受合同相关法律法规的调整。而具体到某一特定的开源许可协议(例如:GPL),在法律上视为针对某一特定的项目,预先设定好格式化条款的协议。只要权利人作为授权方为其开放的源代码选定了该协议,那么使用该开放源代码的不特定用户就必须遵守该协议中所约定的内容。上述行为视为是授权方和用户之间形成的以开源软件源代码为目的的一种民事法律行为。在此基础之上,授权方通过开源许可协议授予不特定的用户复制、修改、再发行等权利,是设立、变更、终止民事法律权利义务关系的协议。同时,当不特定用户针对该源代码采取了实际的复制、修改、发行等行为时,那么上述协议便在权利人和用户之间成立并生效。


其次,法院认为开源许可协议为非典型合同。与我国著作权法有关著作权许可使用和转让合同的规定相比较,开源许可协议中不存在权利转让的对价或许可使用需要支付的报酬等典型著作权许可合同的主要条款。开源许可协议是开源软件的权利人向不特定的使用者让渡其著作权中部分或全部的人身权利和财产权利,从而换取使用者承诺遵守开源许可协议的许可条件和义务。例如,GPL协议中要求使用者基于开放源代码修改后产生的新的源代码也必须面向社会公众进行公开。


第三,开源许可协议在合同性质上是格式合同,是由著作权人向软件程序及源代码使用者提出的合同条款。该格式化条款保持承继性,且不属于格式合同条款无效的情形,其授权内容符合我国著作权法的规定,合法有效。


第四,不特定用户针对开源许可协议的承诺是通过行为作出。例如,GPL协议第9条规定:一旦修改和传播一个受保护作品,就表明你接受本协议。该要约内容表明以实践行为作出承诺,无须再另行签订书面的合同。因此,开源许可协议中有关承诺可以用行为完成的条款符合合同法关于要约和承诺的规定,应为有效。


综上,法院认为开源许可协议具有合同性质,是授权方与用户订立的格式化著作权协议,属于我国合同相关法律法规调整的范围。


4.用户违反开源许可协议的约定使用开源软件及源代码的法律后果


如上所述,开源许可协议在法律上可以看作是开源软件及源代码的著作权授权许可协议,那么超出授权许可协议范围的使用行为便同时构成了违约行为和侵权行为,进而相应产生了违约责任和侵权责任。但考虑到用户只有一个违法行为,因此两种责任构成民事责任竞合,根据《民法典》第186条的规定,权利人需要择一主张,针对用户违反开源软件许可协议的行为要么采取违约救济,主张违约损害赔偿请求权;要么采取侵权救济,主张侵权损害赔偿请求权。


1.选择违约救济与选择侵权救济之间的区别


实务中,很多企业类用户通常会在开源软件及源代码基础之上衍生开发出新的商业软件,通过售卖商业软件作为企业的盈利模式。这种情况下企业就天然不愿意去面向公众开放新开发商业软件的源代码,而是倾向于通过商业秘密的形式来保护其源代码。但是如果新的商业软件所使用的开源软件采用了GPL开源许可协议,那么根据GPL协议的约定,使用者基于开源代码修改后产生的新的源代码也必须面向社会公众进行公开。这时候企业最担心的往往是权利人能不能基于开源许可协议的约定,强制要求企业公开新开发软件的源代码?


在违约救济中,由于其诉讼基础是用户违反了合同的约定,理论上权利人是可以向法院提出公开源代码的诉讼请求,即要求作为违约方的用户按照开源许可协议的约定继续履行合同,公开新开发软件的全部源代码。但笔者认为如果用户明确表示拒绝公开相应源代码时,实务中法院大概率不会直接判决用户强制公开,法院会倾向于适用《民法典》第580条,以合同目的不能实现为由,终止双方的合同权利义务关系,判决违约方承担违约损害赔偿责任。另一方面,考虑到我国法律中有关合同违约的赔偿标准是以实际造成的损失为限,当开源许可协议中并没有约定具体的违约条款及损害赔偿额的计算方法时,权利人想要证明用户的违约行为给自己造成的实际损失,笔者认为会存在不小的举证困难。


再来看侵权救济,由于开源许可协议在法律上可以被视为附解除条件的许可合同,那么用户由于违反了开源许可协议中的限制性条款,则视为著作权的许可前提条件已经不复存在,权利人和用户之间已经达成的授权许可协议终止适用,用户获得的授权也将自动终止。此时用户继续使用开源软件及代码的行为构成无权使用,属于著作权侵权行为。在著作权侵权损害赔偿程序中,权利人可以向公司主张停止侵权,即要求公司停止新开发商业软件的下载、安装和运营服务,同时可以要求公司赔偿经济损失。需要说明的是,在知识产权侵权纠纷中,损害赔偿的计算方式可以是多样的。根据《著作权法》第54条的规定“侵权人应当按照权利人因此受到的实际损失或者侵权人的违法所得给予赔偿;权利人的实际损失或者侵权人的违法所得难以计算的,可以参照该权利使用费给予赔偿。对故意侵犯著作权或者与著作权有关的权利,情节严重的,可以在按照上述方法确定数额的一倍以上五倍以下给予赔偿;权利人的实际损失、侵权人的违法所得、权利使用费难以计算的,由人民法院根据侵权行为的情节,判决给予五百元以上五百万元以下的赔偿。赔偿数额还应当包括权利人为制止侵权行为所支付的合理开支。”


由此可见,采用侵权救济途径时,赔偿额的计算方式更为多样,且能够向作为侵权方的用户主张律师费等维权合理开支,笔者认为应当是权利人维权的首选方案。


2.谁可以作为适格的起诉主体发起诉讼?


上文提到,开源软件生态系统的优势在于通过向社会公众免费开放软件的源代码,使得遍布世界各地的程序员都可以共同维护开发该开源软件,极大的促进了软件的协同开发。但同时也导致了一款开源软件的作者并不唯一,甚至可能出现根本无法完全统计所有参与软件开发的作者。这就导致了针对合作作品,当存在多个主体共同享有著作权的情况下,如何确定适格的起诉主体。根据《北京市高级人民法院侵害著作权案件审理指南》第一章1.14中规定:“对于不可分割使用的合作作品,如果能够查清权利人基本情况,以全部权利人作为共同原告。明确表示放弃实体权利的权利人,可不予追加;不愿意参加诉讼,又不放弃实体权利的,将其列为共同原告,其不参加诉讼,不影响对案件的审理。如果结合在案证据难以查清权利人基本情况,可以将已查清的部分权利人作为共同原告,但在判决论理部分为未参加诉讼的权利人保留相应的权利份额。”


由此可见,对于像开源软件这种无法查清所有权利人的情况,法院可以将已查清的部分权力人作为共同原告。同时,广州知识产权法院在(2019)粤73知民初207号案的判决书中也认为:开源软件项目的贡献者往往人数众多,互不相识且散布于全球各地,只要项目保持开源,则贡献者数量会持续动态地增加。即使涉案软件属合作作品,就在案证据难以查清所有权利人的基本情况下,若开源项目要求必须经过所有贡献者的授权才能提起诉讼,那么将导致开源软件维权无从提起。因此,作为提交了绝大部分代码量的项目管理者,有权单独提起诉讼。


5.企业在商业软件开发过程中使用了开源软件时,存在哪些潜在的侵权法律风险?


此处笔者以执业中处理的一起涉及Qt开源软件潜在侵权风险排查的案例,来具体探讨下企业在使用开源软件过程中需要注意哪些合规问题。


A企业为一家从事工业制造领域智能化改造相关技术研发和应用的公司,产品涉及到软件与硬件相结合的领域,拟进行科创板上市。其中,A企业的软件部分均为自主研发,软件的源代码中包括多项自主研发的核心算法,因此其所有自研软件均为闭源软件,相应的源代码均是作为企业的核心商业秘密在进行保护。


A企业在软件开发的过程中不可避免的需要用到一款著名的开源软件Qt。Qt软件是一款跨平台图形用户界面应用程序开发框架软件,包括两个版本,商业版本和开源版本。商业版本中采用的是商业协议,该协议中针对用户基于Qt软件自主开发闭源商业软件不做任何限制,但商业版本需要收取价格不菲的授权使用费。开源版本则使用了LGPL开源许可协议。


此处先针对LGPL开源许可协议做简要介绍,LGPL全称LESSER GENERAL PUBLIC LICENSE,中文名称为“较宽松公共许可证”或“函数库公共许可证”。LGPL许可证是文章开头提到的自由软件基金会(FSF)创立的开源软件许可证中的一种,是从GPL许可证的基础上发展而来。前文提到,GPL(通用公共许可协议)许可证是最著名的开源许可协议,协议中对衍生软件的开源做了非常严苛的要求,简单来说就是凡是使用了带有GPL许可证的软件,衍生出的软件必须也使用GPL许可证发布,也即是行业内所说的GPL具备高传染性。早期版本的Qt软件使用的也是GPL许可证,那么针对在GPL许可证下的Qt软件,用户无论是使用了Qt中的程序代码,还是修改了Qt类库代码,由此新开发出的软件也必须使用GPL许可证来发布,即保持开源性。然而开源在很多情况下对商业软件来说是不可接受的。因此Qt在后续的开源版本中增加了LGPL许可证。使用 LGPL许可证下的Qt软件开发新的软件时,用户只要不修改Qt的源代码或者定制Qt类库,而仅使用Qt官方发布的动态链接库时,是可以选择不开源的。因此LGPL协议也被称为商业友好型开源协议。


再回过头来看A企业,由于在创业初期企业现金流紧张,不具备实力购买价格昂贵的Qt软件商业版,因此企业选择了使用LGPL许可协议下的开源版本。同时,随着研发的不断投入,基于Qt软件开发的新的商业软件中包含大量具备自主知识产权的核心算法,该算法以源代码为载体,一旦源代码被公开,其核心算法也会被随之公开。因此企业将开发的几十款商业软件都定位为闭源软件。那么随之而来的问题就是,如果软件选择以闭源的形式发布,是否会存在潜在的侵权风险。


笔者在详细了解了A企业的商业模式以后认为,A企业所开发的数十款商业软件是否构成软件著作权侵权,其核心就在于每一款软件在开发过程中是否符合LGPL授权许可协议的要求。如前文所述,如果A企业在开发某一款软件的过程中违背了LGPL授权许可协议的约定,例如:新开发的商业软件修改了Qt软件中的部分源代码,但并没有依据LGPL协议的约定针对新软件进行开源发布,那么上述违约行为视为著作权的许可前提条件已经不复存在,Qt软件的权利人和A企业之间基于LGPL许可证已经达成的授权许可协议终止适用,A企业获得的授权也将自动终止。此时A企业针对新软件提供复制、下载、安装、运营等商业服务的行为即构成著作权侵权行为。Qt软件的权利人可以随时起诉A企业,要求其停止侵权并赔偿经济损失。


基于上述分析,我们为A企业制定了详细的侵权风险排查计划,其中包括:与A企业软件开发人员详细沟通,了解新开发软件的架构;了解A企业软件与Qt软件类库调用关系;逐一梳理比对新开发软件是否满足LGPL授权许可协议中的要求;在此基础上提供关于相关软件或设备是否符合LGPL授权许可协议要求的法律指导,出具相应的法律风险评估报告等。


6.小结


随着互联网的普及,开源软件迎来了前所未有的蓬勃发展,开源已经成为分布式协作开发模式的典范和推动者。然而很多企业对开源软件的认识存在误区,认为开源软件等于免费软件,开源软件是没有著作权可以任意使用的软件。事实上,开源软件不但与上述概念不能等同,甚至也不能等同于其字面意思:开放源代码的软件。开源软件更准确的定义应该是:源代码在一个开源协议下被公开,并且授予其他人修改和持续演进的自由。因此对修改后软件再分发的规定上的差异,形成了不同的开源软件许可体系。企业在使用开源软件进行自主研发的过程中,需要尤其注意是否符合开源许可协议的规定,应当仔细阅读相应的许可条款,针对使用过程进行必要的合规审查,以规避潜在的侵权风险。