
在讲开源协议之前,我们先要弄清楚一个问题:什么是开源?
开源,最基本的含义就是公开源码,任何人都可以查看,修改,使用。
开源代码给了用户便利,也给了开发者好处。用户可以随便用开源的代码,也可以为源码修bug,提交新功能。总之,开源似乎是个一举两得的做法。
所以开源其实就是一种互助,我允许你用我的代码,你也可以为我的代码提交新功能。
目前你可以去全球比较知名的网站Github查看或发布开源工程,它的网址是Github.com(很多时候都登不上,可能需要科学上网)
开源协议
可以看下面这张图,用一张逻辑图简介了各种开源协议的区别及作用(协议其实就是许可证,这里统称协议)
从右到左依次介绍一下:
Apache协议
你拿走我的源码,可以把你的成果封起来不让别人用,但你必须放一个版权说明。
Apache 软件基金会(ASF)发布的一种开源许可证。它为用户和开发者提供了广泛的权利,使他们可以自由地使用、修改和分发软件。
协议名称 | 允许商用 | 允许修改 | 必须公开修改源码 | 衍生作品协议要求 | 主要作用 | 典型项目示例 |
---|---|---|---|---|---|---|
Apache | 是 | 是 | 否(但需保留修改记录) | 必须使用相同协议 | 强调专利授权,保护贡献者权益,适合商业公司参与的开源项目 | Apache Hadoop、Spark |
Apache是一个比较宽松的协议,它既允许你商用,也允许你闭源。但必须标清楚哪里修改了源代码,且你用了使用Apache的源码生产的作品也必须使用Apache协议
MIT协议
我的源码你随便用,商用闭源都无所谓,只要保留我的版权就行了。
协议名称 | 允许商用 | 允许修改 | 必须公开修改源码 | 衍生作品协议要求 | 主要作用 | 典型项目示例 |
---|---|---|---|---|---|---|
MIT | 是 | 是 | 否 | 可使用不同协议 | 宽松授权,允许自由使用、修改和分发,适合希望最大程度推广作品的场景 | React、Node.js |
MIT是很宽松的协议,基本上你什么都可以干。这种源码是活菩萨一般的存在,也是Github上使用率较高的协议。
BSD协议
我的源码你随便用,但是不能蹭我的流量。
协议名称 | 允许商用 | 允许修改 | 必须公开修改源码 | 衍生作品协议要求 | 主要作用 | 典型项目示例 |
---|---|---|---|---|---|---|
BSD | 是 | 是 | 否 | 需保留原版权声明,不得用原作者名义推广 | 宽松授权,比 MIT 多一项广告限制,适合学术或非商业主导的开源项目 | FreeBSD、NetBSD |
也是很宽松的协议,但是不能用原作者的名字推广自己的作品想蹭流量是不可能的
GPL协议
我都开源了你也得开源,而且也要和我用一样的协议
协议名称 | 允许商用 | 允许修改 | 必须公开修改源码 | 衍生作品协议要求 | 主要作用 | 典型项目示例 |
---|---|---|---|---|---|---|
GPL | 是 | 是 | 是(修改后分发必须公开源码) | 必须使用相同协议 | 保证软件及其衍生作品的开源性,防止被闭源商用,适合核心开源基础设施 | Linux 内核、GCC |
比较严格的协议。首先它禁止了衍生作品的闭源,其次用GPL协议的开源项目完成的作品必须使用GPL协议。
LGPL,Mozilla协议
这两个比较冷门,唯一的区别就是是否要对你在源码上修改的地方加说明。这里不再赘述了。好吧其实是因为我懒得写了
各大协议表格
最后,把完整的表格列出来,方便读者阅览
协议名称 | 允许商用 | 允许修改 | 必须公开修改源码 | 衍生作品协议要求 | 主要作用 | 典型项目示例 |
---|---|---|---|---|---|---|
MIT | 是 | 是 | 否 | 可使用不同协议 | 宽松授权,允许自由使用、修改和分发,适合希望最大程度推广作品的场景 | React、Node.js |
Apache | 是 | 是 | 否(但需保留修改记录) | 必须使用相同协议 | 强调专利授权,保护贡献者权益,适合商业公司参与的开源项目 | Apache Hadoop、Spark |
GPL | 是 | 是 | 是(修改后分发必须公开源码) | 必须使用相同协议 | 保证软件及其衍生作品的开源性,防止被闭源商用,适合核心开源基础设施 | Linux 内核、GCC |
LGPL | 是 | 是 | 是(仅修改库本身时需公开) | 库本身需用 LGPL,应用可自由选择 | 允许闭源软件链接使用该库,平衡开源与商业需求,适合通用类库 | Qt(部分模块)、GNU C 库 |
BSD | 是 | 是 | 否 | 需保留原版权声明,不得用原作者名义推广 | 宽松授权,比 MIT 多一项广告限制,适合学术或非商业主导的开源项目 | FreeBSD、NetBSD |