GitHub如何选择合适的license(许可证)
license译为许可证,也可作为开源协议,它可以将自己创作的东西,授权给他人使用,并约定了使用者可以有的权利和必须遵从的义务。现在很多优秀的开源项目都有设置license,不同的license所约束的条件也不同。因此开源不等于免费,开源也不等于没有约束。
对于大型的软件可能都有专门的律师团队去撰写软件协议。可是作为一名开发人员,有时候我们想开源自己的项目,但又不想自己的源代码被随意借鉴或者分享到别处。这个时候我们就可以设置license去约束一些行为。
但是协议往往需要具备专业的知识,它涉及到了法律规则,普通人不可能在短时间内就掌握这些知识。这时候我们可以选择一些流行的开源协议去满足项目的需求。
快速选择流行的license
在创建项目的时候,我们可以选择一个license,可以看到有很多流行的开源协议可以选择。

下文将以GitHub这份协议做简单的介绍,给项目快速选择一个合适的协议。
各协议介绍
| 协议 | 简述 |
|---|---|
| Apache | 允许他人修改源代码后再闭源,但是必须对每个修改过的文件做版权说明 |
| GPL3 | 无论以何种方式修改或者使用代码,都需要开源 |
| MIT/BSD2 | 允许他人修改源代码后再闭源,不用对修改过的文件做说明,且二次开发的软件可以使用原作者的名字做营销 |
| BSD3 | 和上面一条类似,但二次开发的软件不能使用原作者的名字做营销 |
| BSL | 和GPL类似,但不需要复制版权信息 |
| CCZ | 放弃创作的作品版权权益,并将其奉献给大众,不对代码做任何担保 |
| EPL | 与GPL类似,有权使用、修改、复制与发布软件原始版本和修改后版本,但在某些情况下则必须将修改内容一并释出 |
| AGPL | GPL拓展,使用在线网络服务的也需要开源 |
| GPL2 | 和GPL3相比,如果使用代码作为服务提供,而不分发软件,则不需要开源 |
| LGPL | 和GPL相比,LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码 |
| Mozilla | 与LGPL类似,但是需要对修改过的源码内容做说明 |
| Unlicense | 与CCZ相似,且开放商标和所用的专利授权 |
关于BSL和GPL的区别介绍 >> https://www.boost.org/users/license.html

不选择协议
并不是一定要在项目中添加协议的。但如上文所讨论过的优点,如果你想把代码分享出来,又想约束一些行为,最好还是选择一个适合的开源协议。不选择协议可以让发布者保留作品的解释权,不允许他人分发,复制或二次开发。但是部分网站会有特有的协议,例如当你将代码发布到GitHub上,会默认公开的项目可以自由的查看和fork。
总结
- MIT可以说是很宽松的一个协议了,它是目前很常用的一个开源协议,它允许对代码做任何形式的修改和宣传
- GPL鼓励免费,著名的Linux使用的就是这个协议,这使得它成为时下热门的一个协议
- BSD3允许源码用于商业用途,如果不介意的话,这也是一个不错的选择
GitHub如何选择合适的license(许可证)的更多相关文章
- Android研究之为基于 x86 的 Android* 游戏选择合适的引擎具体解释
摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90% ...
- NoSQL系列:选择合适的数据库
NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 待处理的数据量很大 数据量超过关系型数据库的承载能力 ...
- 为MySQL选择合适的备份方式
数据库的备份是极其重要的事情.如果没有备份,遇到下列情况就会抓狂: UPDATE or DELETE whitout where… table was DROPPed accidentally… IN ...
- (转)NoSQL系列:选择合适的数据库
内容目录: 为什么使用NoSQL数据库? 键值数据库 文档数据库 列族数据库 图数据库 附思维导图 参考 NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数 ...
- (转载)通过dbgrideh 从数据集中选择合适的记录
通过dbgrideh 从数据集中选择合适的记录 //---------------------------------------------------------// 通过dbgrideh 从数据 ...
- 【转】app后端如何选择合适的数据库产品
转自:http://blog.csdn.net/newjueqi/article/details/44003503 app后端的开发中,经常要面临的一个问题是:数据放在哪里? mysql ?redis ...
- 谈谈数据库中MyISAM与InnoDB区别 针对业务类型选择合适的表
MyISAM:这个是默认类型,它是基于传统的ISAM类型, ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法. ...
- 如何选择合适的PHP开发框架
PHP作为一门成熟的WEB应用开发语言,已经深受广大开发者的青睐.与此同时,各式各样的PHP开发框架也从出不穷,面对如此多而且良莠不齐的开发框架,开发者们想必都会眼花缭乱,不知道该选择用哪个.其实并没 ...
- MySQL如何选择合适的引擎以及引擎的转换。
我们怎么选择合适的引擎?这里简单归纳一句话:"除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎." 除非万不得已,否则不建议混 ...
随机推荐
- NVDA、争渡读屏语音开放API接口
什么是读屏软件? 读屏软件是一种专为视力障碍人士设计的,能够辅助视障人士操作计算机的工具,它可以将屏幕上显示的内容用语音朗读出来,这样视障人士就可以正常使用电脑了. 知名的屏幕阅读软件国内有争渡读屏. ...
- Spring Boot数据访问之动态数据源切换之使用注解式AOP优化
在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...
- Spring Boot部署之 web项目war包运行
传统的部署方式:将项目打成war包,放入tomcat 的webapps目录下面,启动tomcat,即可访问. 具体打war包流程: 1.pom.xml配置文件修改: 2.改造启动类,如果是war包发布 ...
- ASP.NET Core 6框架揭秘实例演示[10]:Options基本编程模式
依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中.除了可以采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对 ...
- Vue 源码解读(8)—— 编译器 之 解析(下)
特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了两篇文章,本篇是对 Vue 源码解读(8)-- 编译器 之 解析(上) 的一个补充,所以在阅读时请同时打开 Vu ...
- 论文解读(Geom-GCN)《Geom-GCN: Geometric Graph Convolutional Networks》
Paper Information Title:Geom-GCN: Geometric Graph Convolutional NetworksAuthors:Hongbin Pei, Bingzhe ...
- 为什么用Python,高级的Python是一种高级编程语言
Python特性 如果有人问我Python最大的特点是什么,我会毫不犹豫地告诉他:它简单易学,功能强大.作为一个纯自由软件,Python有许多优点: 很简单.基于"优雅".&quo ...
- 怎么查看已安装的office的序列号?ospp.vbs是什么文件
office2007查看方法:点击开始菜单→控制面板→系统和安全→系统把它往下拉.就可以看到你的序列号.也就是激活码和密匙了office2010查看方法:下载使用Product Key Finder. ...
- Oracle导出/导入数据方法--两种方法(pde格式/dmp格式)
转至:https://www.cnblogs.com/houbxblogs/articles/13365557.html?ivk_sa=1024320u 1.导出数据方法一(pde格式) 工具→ 导出 ...
- java创建线程的四种方法
第一种: 通过继承Thread类创建线程 第二种: 通过实现Runnable接口创建线程 这两种早已烂记于心,这里就不作过多的介绍, 主要介绍其源码 Thread类 implements Runna ...