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(许可证)的更多相关文章

  1. Android研究之为基于 x86 的 Android* 游戏选择合适的引擎具体解释

     摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90% ...

  2. NoSQL系列:选择合适的数据库

    NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 待处理的数据量很大 数据量超过关系型数据库的承载能力 ...

  3. 为MySQL选择合适的备份方式

    数据库的备份是极其重要的事情.如果没有备份,遇到下列情况就会抓狂: UPDATE or DELETE whitout where… table was DROPPed accidentally… IN ...

  4. (转)NoSQL系列:选择合适的数据库

    内容目录: 为什么使用NoSQL数据库? 键值数据库 文档数据库 列族数据库 图数据库 附思维导图 参考 NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数 ...

  5. (转载)通过dbgrideh 从数据集中选择合适的记录

    通过dbgrideh 从数据集中选择合适的记录 //---------------------------------------------------------// 通过dbgrideh 从数据 ...

  6. 【转】app后端如何选择合适的数据库产品

    转自:http://blog.csdn.net/newjueqi/article/details/44003503 app后端的开发中,经常要面临的一个问题是:数据放在哪里? mysql ?redis ...

  7. 谈谈数据库中MyISAM与InnoDB区别 针对业务类型选择合适的表

    MyISAM:这个是默认类型,它是基于传统的ISAM类型, ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法. ...

  8. 如何选择合适的PHP开发框架

    PHP作为一门成熟的WEB应用开发语言,已经深受广大开发者的青睐.与此同时,各式各样的PHP开发框架也从出不穷,面对如此多而且良莠不齐的开发框架,开发者们想必都会眼花缭乱,不知道该选择用哪个.其实并没 ...

  9. MySQL如何选择合适的引擎以及引擎的转换。

    我们怎么选择合适的引擎?这里简单归纳一句话:"除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎." 除非万不得已,否则不建议混 ...

随机推荐

  1. 探秘inter()方法

    最近在阅读<深入理解Jav虚拟机>的运行时常量池章节,看到"java语言并不要求常量池一定只有编译器才能产生...运行期间也可以将新的常量放入常量池,这种特性被开发人员利用得比较 ...

  2. [编译器]dev c++单步调试

    一.dev c++调试崩溃的解决方案 1.点击"工具 -> 编译选项". 2.选择"编译器"选项卡,勾选"编译时加入以下命令",输入& ...

  3. Java多线程编程核心技术---多线程技能

    1.继承Thread /** * Copyright (C), 2018-2018, * FileName: MyThread * Author: 大象 * Date: 2018-06-08 22:3 ...

  4. PDF格式简单分析

    上周因需要编辑了下PDF,用了一两个试用软件,感觉文字版的PDF还是挺好编辑的.想要研究一下PDF格式. 0. 站在前辈的肩膀上 从前辈的文章和书籍了解到 PDF文件是一种文本和二进制混排的格式,二进 ...

  5. linux(Ubuntu)下机器学习/深度学习环境配置

    为了开发环境纯净,应该首先创建虚拟环境 mkvirtualenv -p python3 虚拟环境名称 如,mkvirtualenv -p python3 ai 但是有的童鞋会卡在这一步,会报一个这样的 ...

  6. (第三章)TF框架之实现验证码识别

    这里实现一个用神经网络(卷积神经网络也可以)实现验证码识别的小案例,主要记录本人做这个案例的流程,不会像之前那么详细,主要用作个人记录用... 这里是验证码的四个字母,被one-hot编码后形成的四个 ...

  7. Python脚本生成可执行文件&(恋爱小脚本)

    Python脚本生成可执行文件&(恋爱小脚本) 参考文献: http://c.biancheng.net/view/2690.html; https://blog.csdn.net/qq_39 ...

  8. java中如何将嵌套循环性能提高500倍

    java中如何将嵌套循环性能提高500倍 转载请注明出处https://www.cnblogs.com/funnyzpc/p/15975882.html 前面 似乎上一次更新在遥远的九月份,按照既定的 ...

  9. 树莓派4B安装 百度飞桨paddlelite 做视频检测 (一、环境安装)

    前言: 当前准备重新在树莓派4B8G 上面搭载训练模型进行识别检测,训练采用了百度飞桨的PaddleX再也不用为训练部署环境各种报错发愁了,推荐大家使用. 关于在树莓派4B上面paddlelite的文 ...

  10. JZ-013-调整数组顺序使奇数位于偶数前面

    调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对 ...