当前位置: 首页 > 后端技术 > Java

总结了程序员应该知道的各种开源license和compliance相关知识

时间:2023-04-01 19:43:40 Java

因为我们也是做开源的,所以比较关注这个问题。License相关的知识也分享给大家一起讨论,希望得到大家的指导。前言2021年12月,抖音海外版抖音上线了一款名为抖音直播的APP,但不久后其下载页面被删除。TikTok官方回应了此事,因为该APP违反了GPL许可。它使用了GPL许可下开源软件的源代码,但没有按照GPL许可的要求进行开源。随着开源软件的发展,其数量和影响力不断攀升。开源软件具有成本低、升级快的特点,因此越来越多的企业选择使用开源软件。但是“天下没有免费的午餐”。在开源许可证的约束下,开源软件的使用并没有想象中那么自由。开源软件使用不当可能会造成负面舆论甚至给企业造成经济损失。什么是开源许可证(“开源许可证”)?开源许可证是对开源软件用户的约束,旨在规范受版权保护的软件的使用或分发。常见的许可证及其区别常见的许可证主要有GPL、LGPL、AGPL、MPL、MIT、BSD、Apache,每种许可证还包含不同的版本。根据不同的使用条件,这些许可大致可以分为两类:Copyleft许可和permissive许可,主要是对使用、修改和分发的场景进行相应的约束。1.BSD许可证——特点是可以自由使用、修改和重新发布。但在商业或个人分发过程中,必须携带原代码的许可,不得使用原作者的相关信息进行宣传。2.MIT许可证——源自麻省理工学院(MIT),是目前使用最广泛的开源许可证。其特点类似于BSD许可证,只要在项目的所有副本中包含版权声明和许可声明,不承担任何责任。3.ApacheLicense——作为permissivelicense的一员,Apache多了几个限制,禁止将其商标和作者的相关信息用于商业活动,所有修改过的文件必须明确注明。4.GPL许可——GPL和BSD还是有很大区别的。GPL提倡代码和派生代码的开源,不允许修改和派生代码作为闭源商业软件发布和销售。如果发布的商业软件的源代码中包含GPL开源软件的源代码,则该商业软件必须开源或下架。5.AGPL许可——AGPL是对GPL的补充,在GPL的基础上增加了一些限制。GPL约束生效的前提是软件是“已发布”的。一些公司使用GPL组件编写web系统,但不发布系统,仅使用该系统在线提供服务,从而避免开源系统代码。AGPL要求如果云服务(也就是saas)中使用的代码是license,那么云服务的代码也必须是开源的。6.LGPL许可——LGPL允许商业软件通过类库引用使用LGPL类库,不需要开源商业软件源代码。7.MPLlicense-在商业软件中,如果包含MPLlicense的代码在一个单独的文件中,其他新添加的文件可以避免开源。我们统计了两种常用编程语言C/C++和Java的开源组件许可证分布情况。可以发现:C/C++主要使用MIT、BSD、Apache许可,GPL/LGPL约占16%,整体使用较为严格。Java主要使用Apache和MIT许可,GPL/LGPL约占1%。更宽松的开源许可证的整体使用是标准化的。SPDX是Linux基金会发起的用于交换软件物料清单信息的开放标准。400多个开源许可证的名称、标识符等信息被标准化并持续更新。SPDX还提供了开源许可证的匹配指南,鼓励开发人员在他们的代码中添加简短的标识符,例如SPDX-License-Identifier:MIT。可以预见,未来开源许可证将更加标准化,更容易被机器识别和处理。开源合规风险2008年,美国联邦巡回上诉法院在Jacobsen诉Katzer一案中首次断言开源许可的版权有效性。中国在2019年的“玉子案”中默认了GPL许可的法律效力。相关案例的出现,意味着开源许可不再是君子协定,违反开源许可会给企业带来经济和声誉损失。比如GPL许可和MPL许可,GPL许可要求“使用本许可下源代码的用户必须在GPL许可下发布整个程序的源代码”,而MPL则要求“代码MPL许可证的一部分在一个单独的文件中,其他新添加的文件可以避免开源。”因此,企业在使用同时带有GPL和MPL许可的开源软件时,可能会因为开源许可冲突而面临违反其中一种许可的风险。国内外相关案例1.2019年,在北京数字天堂网络技术有限公司诉北京柚子科技有限公司案中,北京柚子的开发商在2015年使用了数字天堂的HBuilder软件工具中的三个插件的部分源代码做了不符合开源软件许可协议,具有开源要求的软件产品被视为商业产品,开源软件著作权人以违约侵权为由提起诉讼,承担法律责任。2、4月2021年1月30日,漯河公司起诉风铃公司侵权,获赔50万元,同时要求风铃公司停止侵权。App)插件框架虚拟引擎系统V1.0”(简称VirtualAppV1.0),2016年引入GPL3.0许可,2017年取得计算机软件著作权登记证书,并注明用于商业用途使用,请购买商业授权。2018年,原告发现名为“点心桌面”的软件使用了VirtualAppV1.0的代码。经分析比对源代码,发现两者高度相似,遂起诉被告福建凤岭公司。经法院审理,被告赔偿原告合理费用50万元,以制止侵权行为。该判决是国内首例明确GPL3.0许可具有法律效力的案件。3.2021年12月中旬,抖音海外版抖音上线了抖音直播APP。有网友发现该软件违反了GPL许可,违规使用了开源软件OBS(一种免费的开源视频录制和录像)。实时流媒体软件,并允许任何人免费使用和商业化),既然源代码是允许商业使用的,为什么还被曝出违规?这里需要再次普及一下GPL许可。GPL许可证具有很强的传染性。如果一款软件使用了GPL许可下的开源软件的源代码,那么该软件也必须是GPL许可下的开源软件。事件曝光后,OBS开发者证实了此事,抖音也对事件做出回应,删除了抖音直播工作室的下载页面。给开发者/企业的建议温馨提示:开源文章数以千万计,遵守的第一条规则是1.软件开发者在使用开源软件时,需要慎重选择开源软件,注意内容和其开源许可证的相关条件,并避免潜在的风险。法律风险。2、企业应建立完善的机制,识别本企业使用的开源软件清单,明确相应的开源许可和权利约束,及时规避相关合规风险。3.通过隔离机制避免开源license感染。例如,使用MPL许可下的代码,应将许可的代码放在单独的文件中,避免许可感染;LGPL下的代码可以通过动态链接调用许可库实现隔离。解决方案:使用murphysec开源工具解决此类风险我们在开源工具中集成了开源license合规性检测功能开源项目地址:https://github.com/murphysecurity1.使用murphysec开源工具扫描你的代码目录,帮助您一键识别代码项目中使用的所有开源组件,包括直接依赖和间接依赖的组件列表,并列出所有组件对应的开源许可信息。2.查看报表,根据报表可以清楚的看到对应组件license在哪些场景下的licensecompliancerisk。3、您可以根据License的合规风险提示判断您的项目是否存在违规的可能,并调整您引入的组件来应对该风险。无意中可能踩到的一些陷阱:1)部分组件有多个license,不同目录文件指定的license类型可能不同,需要特别注意。当然我们的开源软件也考虑到了这种情况2)有些组件你没有直接依赖,但是可能存在间接依赖,需要特别注意查看相关组件的依赖文档:https://www.murphysec.com/docs/参考链接https://spdx。组织/许可证/https://opensource.org/licenses/category