目录

什么是开源软件

什么是 license

商业许可证与开源许可证

对开发者的影响

开源许可证的类型

如何选择开源许可证


什么是开源软件

开放源代码的软件。假设有一天自我感觉代码能力不错,写了个小工具,但我并不想通过它来赚钱,我更想把这个工具及代码分享出去,让别人免费使用或阅读我写的代码,对我而言,能获得别人的认可,提升影响力我就感到很开心,这就是开源,开源也是一种精神。

相对应的就是闭源,不开放源代码,比如大多数商业软件。关键技术不能跟你分享,不然哪一天你成为我竞争对手咋办,我还得靠这代码恰饭。

什么是 license

license 翻译为许可证。理解为协议或版权声明,违反协议的后果就是商业纠纷。用原创作品类比,我发布这篇文章时声明了原创,别人如果要转载这篇文章,要经过我允许,否则就侵犯了我的权益。当然文章的版权与软件版权还是不一样的,不做过多比较。

商业许可证与开源许可证

商业许可证理解为使用该软件的门票,比如要使用 IDEA,你需要付费购买 license。

原创文章,你可以免费看,但不可以抄袭或者用作商业用途。类似的,开源软件,你可以免费使用、修改代码、与别人分享,但有一定的约束,通过开源许可证进行约束,它就像文章原创声明,但比原创声明复杂得多。

开源许可证有很多种类型,包含的内容各不相同,也就是对使用者的约束不一样。比如开源代码如果使用 GPL 协议,那么你就不能将这个代码利用在自己的商业产品中。

对开发者的影响

如果公司开发一个产品,需要使用到开源项目,将开源项目作为 jar 包引用或者需要修改项目源代码,不同情况应该使用不同的项目,否则会引起商业纠纷。

开源许可证的类型

开源许可证种类繁多,大概有上百种,但常用的有 6 种,为了方便理解,以主要特点作简要说明。

不推荐用于商业产品的协议

GPL - GNU General Public License

GNU 通用公共许可协议,免费使用、引用、修改代码,但不能用在闭源软件中发布及销售。“传染性” 表示如果一个软件使用了 GPL 协议的开源代码,那么这个软件也必须开源,仍然免费使用。不能用于商业产品。

LGPL - GNU Lesser General Public License

对 GPL 作了一些补充,在商业产品中,可以引用 LGPL 协议的代码,如果对代码进行了修改,额外的代码也需要使用 LGPL 协议,可以用于商业产品。

MPL - Mozilla Public License

可以对源代码进行修改,但必须有一个额外的文件对修改进行描述,还有一些严格的限制,可以用于商业产品。

适用于商业产品的协议

BSD - Berkeley Software Distribution License

代码可以被引用及修改,进行二次开发,适用于商业产品中。

主要限制在于不能用开源代码的作者或机构进行商品推广。

MIT - Massachusetts Institute of Technology License

协议名源自麻省理工学院,和 BSD 协议比较接近,但比 BSD 更宽松,无论用于开源还是商业产品,只要包含开源代码的许可协议声明,至于你会不会通过它进行商品推广,作者并不关心,只想保留版权。

Apache - Apache License 2.0

Apache Licence 是著名的 Apache 软件基金会发布的协议,相对于 MIT 协议,要求稍微严格,如果修改了源代码,需要进行说明。

如何选择开源许可证

如果你要发布一个开源项目,下面这张图能让你更清楚自己应该选择哪种 license。图片来自阮一峰老师博客,网上用得比较多。

参考来源

https://www.ruanyifeng.com/blog/2017/10/open-source-license-tutorial.html

https://www.cnblogs.com/lisa090818/p/4229353.html

常见的开源 License的更多相关文章

  1. 了解常见的开源协议(BSD, GPL, LGPL,MIT)

    一直对各种开源协议比较模糊, 特意在网上搜索了一下资料, 整理总结,以作记录 如果不喜欢长篇大论的话, 看下图就可以了 基本概念了解: 1. Contributors 和 Recipients Con ...

  2. 一张图让你看懂各开源License[转]

    你是否遇到过开源License,精炼而又晦涩的文字通常要读半天才能理解,而且大多数License差别不大,容易混淆.下面这张图让你段时间迅速掌握各种开源的License. 图片来源:阮一峰的博客. f ...

  3. 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)

    GPL GPL授予程序接受人以下权利,或称“自由”: * 以任何目的运行此程序的自由 * 以学习程序工作机理为目的,对程序进行修改的自由(能得到源代码是前提) * 再发行复制件的自由 * 改进此程序, ...

  4. 用ChooseALicense帮自己选一个开源license,然后用AddALicense给自己的github自动加上license文件

    在我之前的一篇博客里面介绍过tl;drLegal ——开源软件license的搜索引擎,可以很方便的查询各种license,并且给出了很简洁的解释.今天又发现了另外一个帮助你选择你的开源软件licen ...

  5. Nginx环境下常见的开源项目重写汇总

    我们做PHP开发的,作者寒冰我觉得大部分时候都在跟开源的系统打交道.比如:Discuz.PHPCMS.ecshop.wordpress等开源系统.一般我们都是在本地搭建测试环境,用的web服务器都是a ...

  6. 常见RPC开源框架

    什么是rpc框架先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用?通常我们调用一个php中的方法,比如这样 ...

  7. [android] smartimageview&常见的开源代码

    github上搜索开源框架android-smarty-imageview,下载压缩包,拷贝我们之前写的网络图片查看器布局. 解压下载包里面的数据,找到java源码拷贝到我们的项目里,这时我们可以看到 ...

  8. Java 学习使用常见的开源连接池

    目录 连接池介绍 自定义连接池 JDBC Tomcat Pool DBCP(DataBase Connection Pool) 使用配置文件来设置DBCP C3P0 Druid 连接池介绍 在说连接池 ...

  9. 开源License

    http://www.open-open.com/bbs/view/1319816219625 http://my.oschina.net/yangsheng/blog/190917

随机推荐

  1. URLDecoder异常解决方法

    URLDecoder对参数进行解码时候,代码如: URLDecoder.decode(param,"utf-8"); 有时候会出现类似如下的错误: URLDecoder异常Ille ...

  2. DevOps让金融业数字化转型更敏捷 | 分享实录

    以下为博云近期在活动中分享的关于<如何通过 DevOps 让数字化转型变得更加敏捷>的主题演讲实录. 01 金融科技进入VUCA时代 大家好,今天分享的题目是<如何通过 DevOps ...

  3. 2020重新出发,JAVA入门,标识符&修饰符

    标识符(Identifier ) 标识符是程序员用来命名变量,方法,类或标签的单词,其实就是我们在开发过程中凡是自己可以命名的一些单词就是标识符 标识符命名规则 标识符由字母(a-z,A-Z),数字( ...

  4. 详解 LSTM

    LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行. 长短时记忆 ...

  5. MySQL连接查询、子查询与联合查询

    一 连接查询 1.交叉连接: 语法: from  表1  [cross]  join  表2  ; 例如: 表一: 表2: 交叉: 交叉查询并没有意义. 2.内连接: 语法: from  表1  [i ...

  6. 文件上传控件bootstrap-fileinput中文设置没有效果的情况

    1.引入zh.js顺序错误 zh.js需放到fileinput.js下面 2. 组件创建语法错误 (class=“file”) 如果你使用js初始化fileinput组件,那么在html元素中应删除 ...

  7. 笔试算法稳了,GitHub 50k Star《labuladong的算法小抄》

    秋招算法有救了!!! 前不久在 GitHub 出现了一个手把手带你刷 LeetCode 的项目:fucking-algorithm. 该项目此前在 GitHub 开源后,连续多次霸榜 GitHub T ...

  8. eric4 打包文件

    在.py 工程 所在目录: 按住shift,鼠标右键,在此处打开cmd或shell,然后如下操作 1.打包成文件夹 pyinstaller lrs.py 2.打包成 单文件 pyinstaller - ...

  9. Jmeter 常用函数(14)- 详解 __strLen

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 读取给定字符串的长度 语法格式 ${__ ...

  10. xfs文件系统修复方法

    1. 前言首先尝试mount和umount文件系统,以便重放日志,修复文件系统,如果不行,再进行如下操作.fdisk -l 查看硬盘分区情况mount -l 查看文件系统挂载情况df -h 查看文件系 ...