逛Github时经常看到项目README旁边,有个License tab,不知道大家是不是跟我一样,撇了一眼就过去了,不太清楚这个license具体作用,有点法律意识的朋友可能会意识到这个可能是版权声明,不过难免还是会有其他疑问:既然都开源了,怎么还有各种条件限制?除了GPL还有Apache、MIT等,这些"License"又有哪些区别呢?
很多朋友可能像之前的我一样,二开项目或者使用第三方组件时直接拿来就用了,没有考虑过其背后的"风险"……
写在前面的一句话:开源 != 免费
首先来看一下关于开源和免费的定义:
开源: 1、一个源码开放的项目(个人或团队开发) 2、一个友好交流的社区(除了源码的开放,还有社区的开放,人人都可以提issue、pr等) 3、一个产品(好的项目同时也是一个好的产品,例如Linux的产品化,可以说,如果没有 Linux 的产品化,也不会有 Linux 开源的枝繁叶茂) 免费: 1、无任何使用费用 2、闭源或开源:免费软件可以是闭源的,也可以是开源的
互联网的发展离不开开源社区的建设,很多时候,开源发布的产品难以满足用户的需求。所以,==在不违反相关开源许可证 (License) 的条件下==,有些公司对其加以定制,就变身为自己的产品或解决方案。
很多开发同学都不清楚开源许可证的"存在",更别提Boss有这方面的意识了
开源许可证是指用于授权他人使用、修改和分发软件的一种法律文件。它规定了软件的使用权利和义务,确保开发者和用户了解如何合法地使用软件。
这里可以将开源许可证作用总结为:
下面对一些常见许可证进行整理分析
分类 | 示例许可证 | 描述 |
---|---|---|
公共代码 (Public Domain) | CC0、无License | 理论上无限制,任何人都可以自由使用、修改和分发 |
宽松型许可证 (Permissive) | MIT、Apache 2.0、BSD | 不对使用情景做限制,允许闭源使用和分发,只需保留版权声明和许可证文本 |
弱互惠型许可证 (Weak Copyleft) | LGPL、MPL、EPL | 代码使用方式限制较为宽泛,允许与闭源代码结合使用,但要求对修改后的部分开源 |
互惠型许可证 (Reciprocal) | GPL、EUPL | 除非独立使用,否则需要开源,要求衍生作品以相同许可证发布 |
强互惠许可证 (Strong Copyleft) | AGPL、SSPL | 为第三方服务就要开源,且开源对象不一定局限于开源代码相关代码,要求通过网络提供服务时也要开源 |
不同的许可证虽然属于同一类型,但是使用者所遵守的要求都是不同
公共领域代码放弃了所有版权和相关权利,允许任何人自由使用、修改和分发,没有任何限制。
允许用户自由使用、修改和分发代码,包括将代码集成到闭源项目中。只需保留原始版权声明和许可证文本。
允许代码与闭源软件结合使用,但要求对许可证下的代码修改部分保持开源。
要求任何基于原始代码的修改和扩展也必须以相同的许可证发布,确保衍生作品保持开源。
具有最严格的要求,任何基于原始代码的使用、修改和扩展都必须以相同的许可证发布,并且任何链接到这些代码的作品也必须开源。
个人开源项目维护者怎么选择一个合适的许可证呢?
这里借用一下阮一峰大佬整理的划分图,看起来一目了然。
这里以我自己的开源项目为例,使用Apache 2.0
访问:https://www.apache.org/licenses/LICENSE-2.0.txt
项目根目录,新建LICENSE文件,粘贴过去
照着修改一下就行了
简单push一下
Github会自动识别、排版
对于个人和企业,我收集整理了需要关注许可证风险的几种场景
风险:某些开源许可证(如GPL、AGPL、SSPL)要求任何基于其代码的修改或扩展必须以相同的许可证发布。如果使用这些许可证的软件来开发闭源产品,可能需要公开源代码,影响商业机密和竞争优势。 建议:在选择开源软件时,仔细阅读并理解许可证条款,确保不会违反开源许可证的要求。
风险:分发包含开源组件的软件时,必须遵守相应的许可证条款,例如保留版权声明、提供源代码等。未能遵守这些要求可能导致法律纠纷。 建议:确保分发的软件符合所有开源许可证的要求,并提供必要的文档和源代码。
风险:修改开源软件并再发布时,需要遵守原始开源许可证的条款。例如,GPL要求修改后的软件也必须以GPL许可证发布。 建议:在修改开源软件时,保留原始版权声明,并遵循许可证的发布要求。
风险:强互惠型许可证(如AGPL、SSPL)要求如果通过网络提供服务,必须公开源代码。使用这些许可证的软件提供SaaS服务时,需要公开源代码,可能影响商业机密。 建议:评估开源软件的许可证类型,选择适合的许可证,避免使用强互惠型许可证的软件提供SaaS服务,除非愿意公开源代码。
风险:不同开源许可证之间可能存在冲突,导致无法合法组合使用。例如,GPL和某些宽松型许可证之间的冲突。 建议:在组合使用开源软件时,确保不同许可证之间的兼容性,避免法律风险。
风险:某些开源许可证(如Apache 2.0)包含专利授权条款,而其他许可证(如GPL)可能不包括。这可能导致专利侵权风险。 建议:了解开源软件的专利授权条款,确保不会侵犯第三方专利。
风险:==缺乏开源软件合规性管理,可能导致违反许可证条款的风险,影响企业声誉和法律地位(开源社区谴责,舆论风险导致品牌形象受损,企业也会被行业或者地区监管处罚……)。== 建议:建立开源软件合规性管理流程,使用SCA工具检测和管理开源组件,确保合规性。
对于开源许可证的基础内容,以及风险场景引入先写这么多,下一篇将对市场上主流SCA工具许可证风险识别功能进行相关"测评🤔️"(使用方法、接入场景……)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。