开源许可证(License)选择与使用指南

文摘   2024-11-27 17:54   广东  

关注+星号公众号,不容错过精彩

作者:HywelStar


 

对于每个开发者来说,都会使用到开源相关的软件。开源推动了软件的快速发展,解决了我们很多问题,节约宝贵时间。然而,开源也伴随着相应的法律规则,那就是开源的许可证(License)。今天我们来探讨一下开源许可证的作用、种类以及如何选择适合的开源License。

本章节可以了解到:

开源License的种类有哪些,有什么区别?

开源License有什么作用,使用时需要注意什么?

如果自己需要开源某些项目,如何选择合适的License?

1. 开源License 作用

开源软件的快速发展为开发者提供了更多选择,不仅能节省开发时间,还能利用社区的力量快速解决问题。然而,开源软件并非没有规则,如何在使用开源代码时遵循合适的法律和规范,是每个开发者必须了解的。开源许可证(License)就是这种规范的核心,它规定了代码使用、修改和分发的权限和限制。

2. 开源License 种类

开源协议种类繁多,具体协议的选择取决于项目的需求、开发者的使用目的以及对于代码的控制需求。一般来说开源Licensen简单来说内容是:

我允许你们XXX,我许可你们XXXX,你们可以XXXX,但是,你们必须XXXX,如果你们XXXX了,你们就必须XXXX,对了,对于XXXX这些情况,我可不负责。

你要同意,就用,不同意就别用。如果你用了,但违反了许可证的要求,我可能会告你啊!

那么对于大家来说不可能对于每一个开源都重新写一个License, 其实前辈们早已经帮我们出具了很多种开源License,下面列出一些常见的开源License,并简要说明其特点和适用场景。

目前比较常常用 MIT、BSD、Apache、LGPL、GPL。

2.1 MIT License

The MIT License – Open Source Initiative

MIT License 来自于麻省理工学院(Massachusetts Institute of Technology, MIT),以其简洁性和灵活性著称。对于希望快速启动项目并吸引更多贡献者的开发者而言,MIT License是一个理想的选择。要求比较简单,也是这几种最为宽泛的许可,MIT许可证允许任何人自由地使用、修改、分发、甚至商业化软件,但要求保留原作者的版权声明,并声明不对使用中出现的任何问题负责。

极简的许可证:MIT许可证是最简洁且宽松的开源协议之一,几乎没有限制。它仅要求在分发代码时保留原始的版权声明和许可证信息。

自由使用和修改:MIT许可证允许任何人自由地使用、修改、分发代码,甚至可以将代码封闭为私有项目。

比如在github 看到的:

Vuex(vuex)是一个基于MIT许可证发布的开源项目。

2.2 BSD License

https://en.wikipedia.org/wiki/BSD_licenses

BSD License(Berkeley Software Distribution License)是一种广泛使用的开源许可证,因其简洁性和灵活性而受到许多开发者的青睐。

简洁的开源协议:BSD协议是另一种宽松的开源许可证,类似于MIT协议,主要要求保留版权声明和许可证信息。它允许代码的修改、分发和商业使用。

版本差异:BSD协议有多个版本,最常见的是2-Clause BSD3-Clause BSD,两者之间的主要区别在于是否包含“广告条款”(要求在广告中提到使用了BSD代码)。3-Clause BSD被广泛采用,因为它去除了广告条款。

例如:FreeBSD(FreeBSD)采用的是2-Clause BSD许可证,适合用于许多自由和开源项目。

2.3 Apache License

Apache License 2.0协议来自于著名的Apache基金会,其最重要的开源软件就是Apache(HTTPD)网站服务器。

宽松的开源协议:Apache 2.0 是一种宽松的开源许可证,允许修改、分发和商业化使用。它要求保留版权声明和许可证信息,并提供专利授权,但没有要求将衍生作品开源。

专利授权:该协议特别强调专利授权,贡献者必须明确授予使用者对其专利的使用权,避免因专利问题产生法律纠纷。

例如:小米铁蛋采用的Apache License :

2.4 LGPL License

LGPL 叫做 GNU Lesser General Public License :GNU 宽松公共许可证,之前的名字叫做GNU Library General Public License (GNU 库通用公共许可证);LGPL 允许商业软件通过类库引用 (link) 方式使用 LGPL 类库而不需要开源商业软件的代码,这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售,但是前提是你不能修改 LGPL 许可的软件部分。

支持商业化:LGPL允许商业软件通过类库引用(link)方式使用LGPL库,而不需要将整个商业软件的源代码开源。

开源要求:如果对LGPL软件进行了修改,则必须公开修改后的代码。如果没有修改,商业软件可以直接引用LGPL库,而不必公开其源代码。

例子:FFmpeg(FFmpeg)是一个常见的使用LGPL许可证的项目。

2.5 GPL License

GPL 是一种严格上的,在之前一个美国人因为无法容忍软件私有化,而建立了GPL许可证。他认为,软件的源代码是全人类的财富,应该允许程序员自由共享。所以在这个GPL liencse 下允许任何人查看,修改,传播,但是其中的衍生品如果使用了,该衍生品的代码也需要一起公布,而且修改后的不允许进行商业,闭源发布和销售。

GPL 中还有一个内容,在软件中使用了GPL 协议的产品,那么这个产品页需要开源和免费,具有很强的传染性。

例子:Linux Kernel(Linux Kernel)是使用GPL许可证的一个例子。

2.6 对比License

特性\许可证MITBSDApache 2.0LGPLGPL
许可证类型宽松,简洁宽松,简洁宽松,带专利授权宽松,适用于类库强制开源,严格要求
修改和分发允许修改,分发,商用允许修改,分发,商用允许修改,分发,商用允许修改,分发,商用允许修改,分发,但必须开源
专利授权包含专利授权
衍生作品无强制要求无强制要求无强制要求修改需开源,使用不要求修改和衍生作品必须开源
代码封闭允许闭源允许闭源允许闭源允许闭源,前提是未修改LGPL库禁止封闭,必须开源
适用场景适用于快速开发与社区贡献项目适用于宽松的商业和非商业项目适用于需要专利授权的大型项目适用于类库,允许商业化使用适用于要求严格开源和社区驱动的项目

3. 如何选择License

当自己需要开源某项,如何选择License,可以参照下入进行选择,下图来自(阮一峰)。

选择License 主要需要考虑的几大问题:

  • • 代码开放程度,修改后是否可以闭源;

  • • 考虑修改后的代码是否采用哪种许可;

  • • 考虑是否商用问题,对衍生品的要求怎样;

简单选择流程:

  • • 关注专利保护和宽松的商业应用: 选择 Apache 2.0

  • • 想要代码最自由的使用和修改: 选择 MIT 或 BSD

  • • 希望确保代码衍生作品也开源: 选择 GPL

  • • 希望允许商业软件引用但不强制开源: 选择 LGPL

4. 总结

主要对几种License 简答介绍,随着发展应该会越来越好,相信在国内这种意识越来越强。曾经出现的某风影音,某扣影音由,格式某厂都是使用了开源FFmpeg项目,但又不遵循开源协议,一气之下作者整了个耻辱柱(Hall Of Shame)把所有名单写上。所以竟然选择了别人优秀的东西就按照别人的License来,并没有问题,减少纠纷。如果你有什么开源项目,那如何去创建选择License呢,可以看看这个

https://choosealicense.com/。

参考:

Licenses | Choose a License

Choose an open source license | Choose a License



往期推荐



聊聊嵌入式BSP开发

一篇文章带你了解视频基础知识

认识 Linux Video 子系统

嵌入式系统常用授时方案对比

Type-C 接口耳机分析

掌握性能分析工具Perf(二)

掌握性能分析工具Perf(一)

认识充电电池

掌握Dynamic debug调试

掌握GDB:在Linux 下调试程序

公众号目录指引【2】

码思途远
一位码农的日常分享,专注嵌入式领域相关知识。
 最新文章