阻止你变现的,从来都不是开源许可证

文 | lola_chen

出品 | OSC开源社区(ID:oschina2013)

之前,《GPL 转闭源?法院判决:一日 GPL 终身 GPL》一文提出一个冷门却又重要的知识点:GPL 许可证之下的开源项目,可以分叉出来闭源吗?从评论可以看出,大家非常关心这类问题,但是却普遍缺乏相应知识。

其实,这算是国内开源的一个弊病 —— 开源知识普及不够。不少实践者因为接触此类知识的途径有限,加上相关意识也不足,很容易犯错,造成误会和麻烦。就比如以上案件中的原告罗盒公司,之所以后期会将 GPLv3 许可证下的开源项目闭源,大概率就是这个原因。又比如,之前被机械妖姬上门索要源码的国内公司,后来其实也很配合地公布了源码,究其根源也是这个原因 

总的来说,许多开发者主要是两个方面知识没有补课到位:第一,在选择开源许可证的时候,不知道该怎么选,更不知道选择这个许可证对项目来说到底意味着什么?第二,选择开源项目变现时的商业模式为了难,不是想闭源 GPL ,就是乱加附加条款。

自打开源诞生,从来都没有拒绝过商业化,只不过需要掌握一些知识和技巧罢了。以下是一些关于开源许可证和开源商业模式的科普知识,都是我在查找资料过程中发现的宝藏文章的节选,有关来源我也一并给出,大家感兴趣可以查看原文,全面掌握。

01 开源许可证都会保留版权,差别在于共享权限

从 RMS (Richard Mattew Stallman)捣鼓出 GPL 开始,开源许可证发展到现在已经有了上百种,但流行的其实并不多。原教旨一些,只有被 OSI (Open Source Intiative)认可才能称之为开源许可证,而其它一些例如 SSPL、Elastic 等都是商业许可证。那些官方认证的开源许可证被罗列在了 OSI 官网上。

OSI 官网将所有其认可的开源许可证分为“流行且广泛使用或拥有强大社区”的许可证、国际许可证、特殊用途许可证、不可重复使用的许可证、被取代的许可证等几大类,详情大家可戳:https://opensource.org/licenses/category

其中,出现频率最高、最常被使用的无非是以下几种:

b799648cfe2e8c0b4f437f2daa01ac4c.png

一些科普文章会贴心地为大家画出直观易懂的示意图,最为知名的就是阮一峰老师翻译来而的这张图:

44ae3ee23a140615dd49d8975832a36f.png

开源许可证虽然五花八门,但共同点都是保留版权,而在商业兼容性或共享权限上体现区别。在一些科普文章中,经常将这些开源许可证分为三大类,这里我们将中国信通院在 2018 年 3 月发表的《开源治理白皮书》中的一段节选出来:

一类是传染型开源许可证 (Copyleft):

传染型开源许可证明确修改版本须以同一许可证发布, 如果一个软件包含该协议下部分代码,完全发布时必须作为整体适用 该协议,GNU General Public License Version 2 或 Version 3 (下 称“GPL V2”或“GPL V3”)作为传染型开源许可证给予任何人自由 复制、修改和发布 GPL 代码的权利,但是作为回报,所有以 GPL 协议 发布的源代码的衍生,也必须按照 GPL 发布。

第二类是弱传染型开源许可证 (Weak-Copyleft):

如果一个软件包含该协议下部分代码,完 全发布时某些部分必须适用该许可证,其它部分可在其它协议下发 布,如 LGPL、MPL 等。

第三类是获准型许可证:

对已修改代码的许可 方式没有任何要求,如 BSD 要求许可证附上许可证的原文以及所有开 发者的版权资料,它允许原作品及修改版发行不公开源代码或以其它 许可证发行。广泛使用的开源许可证包括 Apache-2.0、 BSD-3-Clause、BSD-2-Clause、 GPL、LGPL、MIT、MPL-2.0、CDDL-1.0、Eclipse 2.0。

此外,《开源治理白皮书》也罗列一些常用许可证各自的特点:

-- GPL(GNU General Public License,GNU 通用公共许可证): 一种广泛使用的自由软件许可证,保证用户可以自由的运行、学习、分 享和修改软件。许可证最初由自由软件基金会 (FSF) Richard Stallman 为 GNU 项目所撰写。GPL 是一个非盈利版权许可证,要求衍生作品只能在相同的许可条款下发布。GPL 的出发点是代码的开源使用和引用代码开源使用,不允许修改后和衍生的代码作为闭源的商业 软件发布和销售。

-- LGPL (GNU Lesser General Public License,GNU 宽通用公共 许可证): 一种由 FSF 颁布的自由软件许可证,允许开发者或公司在 私有软件中使用,不要求使用 LGPL 许可代码的软件以 LGPL 方式发布。与 GPL 的强制性开源方式不同,LGPL 允许商业软件通过类库引用的方式使用 LGPL 类库而不需要开源商业软件的代码。

-- BSD (Berkeley Software Distribution): 允许使用者修改和重新发布代码,也允许使用或在 BSD 代码上开发商业软件并发布和销售。

-- MIT License: 允许开发者任意处置该软件,包括使用、复制、修改、合并、发表、分发、再授权或者销售。唯一的限制是,软件中必须包含许可提示。

-- Apache License: 一种由 Apache 软件基金会发布的自由软件许 可证, 相对比较友好,被授权者可以发布商业化软件。 

-- MPL (Mozilla Public License 1.1): MPL 协议允许免费重发 布、免费修改,但要求修改后的代码版权归软件的发起者。

-- CDDL (Common Development and Distribution License): CDDL 开源许可证,是 MPL 的扩展协议,它允许公共版权使用,无专利费,并提供专利保护,可集成于商业软件中,允许自行发布许可。

-- EPL (Eclipse Public License 1.0 ): EPL 允许 Recipients 任意使用、复制、分发、传播、展示、修改以及改后闭源的二次商业发布。 

*** 还有一个知识点值得关注:开源软件的专利该如何处理?这个问题在《写了开源软件没申专利,反被索赔该怎么办?》:https://my.oschina.net/u/4489239/blog/5417289一文中已经阐述了,大家可以扩展阅读。

02 不同许可证适合的商业模式也不一样

开源软件企业如何通过一定的盈利模式来持续获取利润?之前,知乎博主刘博用了一篇大长文《“技术-经济范式”视角下的开源软件演进剖析》:https://cloud.tencent.com/developer/news/592562来剖析,其中对开源商业模式的总结十分全面。为了大家快速找到重点,我节选了这一部分:

根据开源软件商业模式与软件本身的紧密程度,国内外常见的 10 种商业模式可分为三大类:许可证类、直接配套类、间接配套类以及附属产品类。

8db5491b5f8bb1547b19ae7365bafe32.png

其中典型主流的商业模式包括:

a. 销售专业服务模式(selling professional services)

65eabe659b6c1e3f6bf3e9ab532cf778.png

销售专业服务模式是指通过为开源软件提供专业服务获利,比如培训、技术支持或者技术咨询等。许多企业没有资源也没有能力来维护自身的IT 系统,于是就出现了专门为企业提供基于开源软件的IT服务公司。因为开源软件的特性,使得公司有编程能力的工程师可以熟练掌握,并利用专业所长为其他企业提供相应的服务。

在该模式下,免费用户仅能获得开源软件的源代码而不包括可执行的二进制代码,付费用户则可同时获得可执行的二进制代码,并且包括软件编译和打包等商业化服务;此外,还可同时提供物理安装媒体(比如DVD)。

红帽公司就主要通过订阅模式向客户提供专业服务,逐渐成长为最成功的开源软件公司。

b. 双许可模式(dual-licensing) 

9ea1e65400aa5006c66e0f5618f88324.png

双许可模式是最常见的开源软件商业模式之一,指开发者不仅在开源许可证下提供软件,还在专有软件许可证下提供软件。

在该模式中,产品的源代码主要来源于开源社区或软件厂商,这两部分的源代码共同组成了核心产品,再通过两类许可证(专有许可证和开源的copyleft 许可证)分别许可给免费用户和付费用户。专有版本的营收将用于下一个版本开源软件的研发中。

双许可模式中,用户在开始阶段被免费的开源版本所吸引,在使用过程中通过不断了解厂商所能提供的商业化技术支持和服务,进而成为购买付费版本的客户。以MySQL 数据库为例,公司同时推出面向个人的开源版本和面向企业的专有版本两种,所采用的商业模式就是开源 copyleft 许可证(GPLv2)和专有软件许可证的双重许可。

c. 再许可专有化模式(re-licensing under aproprietary license)

dd7365267ce0c241414d10ed785166f2.png 

再许可专有化模式是指在某些宽松许可证下,允许软件厂商将自身的专有软件与宽松许可证下的开源软件进行组合,组合后的软件产品可以不提供源代码。

该模式的软件供应商可以针对最终的软件产品在专有许可证下进行销售,甚至直接对某些开源软件进行修改后进行销售。软件产品是由开源社区和软件供应商两部分开发者开发的软件组合而成(两者所开发的不是同一个软件)。开源社区的开发者们开发的是一款开源软件,并且该开源软件应用了宽松的开源许可证,允许再次许可闭源;而软件供应商开发的是专有软件,软件供应商将该专有软件与开源软件进行组合开发,然后形成一款新的软件产品,并在专有许可证下进行销售。

该商业模式被众多公司采用,以苹果公司操作系统Mac OS 为代表,该系统就是利用再许可专有化模式来开发其软件产品的,苹果 Mac 个人电脑的系统基于 BSD 操作系统内核进行开发,现为苹果公司专有软件产品进行销售。

d. 嵌入广告模式(advertising-supported software)

9875090206d85989ec14b6f782bec2e3.png

 嵌入广告模式是指依靠开源软件的快速推广而使软件内的嵌入广告得以传播。软件厂商将广告嵌入开发的软件产品中,软件产品即由软件本身和厂商嵌入的广告两部分构成。整个软件产品作为开源软件提供给广大的用户,开源软件的推广会带来越来越多的客户,这样就使得软件中嵌入的广告产生了传播的价值,广告厂商达到了产品推广的效果,更愿意向软件厂商投放广告,而软件厂商获利则会继续投入到开源软件的开发中,形成一个良性循环。

多数开源软件企业倾向于率先采用嵌入广告的商业模式来获得收入、维持经营。例如,Android 平台为Google带来了大量的移动广告流量。

随着开源软件的发展,企业由以往采用单一开源软件商业模式的策略向采用多种组合的策略转变,例如Red Hat 公司不仅提供订阅专业服务,还进行配套专有软件的销售。

此外,结构化分析结果表明,开源软件的不同商业模式所用许可证类别具有很大的差别。

开源许可证管理公司黑鸭子软件数据显示,从2009 年到2015 年期间,MIT 许可证的份额上升了15.7%,Apache 的份额上升了12.4%,而GPLv2 和v3的份额下降了21.4%。GitHub 调查数据显示,MIT以45% 的占有率成为最流行的许可证;与之相比,GPLv2 只有13%。大多数开源软件商业模式都要求宽松许可证,发展趋势显示,大量软件从限制性许可证转到宽松许可证,与之相关的商业模式也越来越倾向于使用宽松许可证。

03 相关链接:

OSI 官网:https://opensource.org

阮一峰博客:https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html

中国信通院 2018 年《开源治理白皮书》下载地址:http://www.caict.ac.cn/kxyj/qwfb/ztbg/201804/P020180323313495961952.pdf

刘博知乎首页:https://www.zhihu.com/people/liu-bo-66-15/posts

往期精彩回顾

 语言粉·征文活动,拿OSC惊喜福袋

2022新春贺岁,中国开源创企集结

富豪玩票Ubuntu?非典型“独裁者”领导的开源社区

03417639b795916476194e07000d07af.png觉得不错,请点个在看呀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yum 常用命令

yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系。在建立好yum服务器后,yum客户端可以通过 http、ftp方式获得软件包,并使用方便的命令直接管理、更新所有的rpm包,甚至包括kernel的更…

sparkshelljarlib_Spark应用程序第三方jar文件依赖解决方案

第一种方式操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中应用场景:第三方jar文件比较小,应用的地方比较少第二种方式操作:使用spark-submit提交命令的参数: --jars要求:1、使用spark-submit命令的机器上…

hdu 1460 完数

注意&#xff1a;num1和num2的大小未知&#xff0c;需比较&#xff01; 有两种方法&#xff1a; 法一&#xff1a;素数打印素数分解&#xff08;求因数和公式&#xff09; 1 #include<iostream>2 #include<cstring>3 #include<cstdio>4 #include<string&g…

03-递归

数据结构和算法 基于《算法图解》—Aditya Bhargava和《数据结构》—严蔚敏 第3章 递归 3.1 递归 假设在一堆嵌套的盒子里找钥匙&#xff0c;对比循环和递归。 使用循环解决&#xff1a; #使用while循环&#xff1a;只要盒子堆不是空&#xff0c;就从中取出一个盒子&#x…

linux c之提示format‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat

1、问题 有个long int data;我输出的时候printf("data is %d", data);出现下面警告 自己竟然不知道 长整型怎么打印出来&#xff0c;日了狗。 2、解决办法 md&#xff0c;m为指定的输出字段的宽度。如果数据的位数小于m&#xff0c;则左端补以空格&#xff0c;若大…

PostgreSQL 从源码找出哪些操作需要超级用户权限 - 阿里云rds_superuser和superuser有什么区别...

标签 PostgreSQL , 超级用户 , superuser 背景 在数据库中哪些操作需要超级用户的权限才能执行&#xff1f; 这个问题翻文档可能翻不全面&#xff0c;或者是已经比较难以完成的任务。 但是从源码里面是比较好找出这个答案的。 权限 例如 postgres# select * from pg_authid;rol…

linux c之通过消息队列实现进程通信

1、消息队列的介绍 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一…

Asp.Net Core部署:早知道,还是docker!以及一点碎碎念

前言AspNetCore技术栈在我们团队里的使用也有一段时间了&#xff0c;之前的部署方式一直是本地编译之后上传可执行文件到服务器&#xff0c;使用supervisor来管理进程这种很原始的方式。参考之前的文章&#xff1a;Asp.Net Core学习笔记&#xff1a;&#xff08;五&#xff09;…

04-快速排序

数据结构和算法 基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏 第4章 快速排序 4.1 分而治之 divide and conquer , 简称D&C&#xff1a;一种著名的递归式问题解决方法。 例子1&#xff1a; 假设你是农场主&#xff0c;有一小块土地。要求将这块地均匀地分…

android studio no marked region found along edge Found along top edge

由于种种原因&#xff0c;导致9图已经不是9图格式了&#xff0c;但是在Eclipse里面不会报错&#xff0c;在android studio 里面会报错 Error:9-patch image D:\download\avatar-android-master\avatar-android-master\sample\src\main\res\drawable-hdpi\abc_list_divider_holo…

lisp画靶子 visual_基于VisualLISP的AutoCAD绘图命令的二次开发_沈良翼

2009AutoCAD是由美国Autodesk公司于20世纪80年代初为微机上应用CAD技术而开发的绘图程序软件包&#xff0c;经过不断的完善&#xff0c;现已经成为国际上广为流行的绘图工具。AutoCAD允许用户定制菜单和工具栏&#xff0c;并能利用内嵌语言Autolisp、VisualLisp、VBA、ADS、ARX…

.Net相关

Lucene 全文搜索 http://lucenenet.apache.org/ Memcached 分布式缓存 http://memcached.org/ selenium UI自动化测试 http://docs.seleniumhq.org/ TestDriven.Net Unit Test http://www.testdriven.net/default.aspx MySql 数据库 http://dev.mysql.com/ dotPeek 反编译 http…

linux c之((void *) - 1)是啥意思

1、问题 今天看到进程通信通过使用内存共享来实现&#xff0c;看到了((void *)-1)&#xff0c;当时一脸蒙逼&#xff0c;不知道什么意思。 2、理解 我一开始以为是空指针减1&#xff0c;自己好傻逼 实际意思是((void *)-1)是把-1转换成指针0xFFFFFFFF 3、总结 当一个函数返…

Linux下安装compsoer ,并使用composer安装laravel

为什么80%的码农都做不了架构师&#xff1f;>>> 1、composer安装 https://getcomposer.org/download/打开composer官网。根据提示linux下可以使用php安装。 php -r "copy(https://getcomposer.org/installer, composer-setup.php);" php -r "if (ha…

AspNetCore在docker部署时遇到一个小坑

哦吼之前刚说了尝试了使用docker来部署AspNetCore应用&#xff08;Asp.Net Core部署&#xff1a;早知道&#xff0c;还是docker!以及一点碎碎念&#xff09;&#xff0c;结果这才刚上班就遇到问题了 …我这项目用的数据库是Oracle&#xff0c;之前直接运行没啥问题&#xff0c;…

JS篇 学习笔记

ECMA Script API: Array.prototype.splice(start, deleteCount, value ...) 数组操作中有&#xff1a;push、pop、unshift左移入、shift左进出&#xff1b;splice不仅可以完成删除操作&#xff0c;而且还可以从中间插入&#xff1a;当deleteCount参数为0时就可以将后面的多个参…

05-散列表

数据结构和算法 基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏 第5章 散列表 假设你在一家杂货店上班。有顾客来买东西时&#xff0c;你得到一个本子中查找价格。如果本子的内容不是按字母顺序来排序的&#xff0c;你可能为查找苹果价格而浏览每一页&#xff0c…

疯狂ios讲义疯狂连载之实现游戏逻辑(2)

13.6.5 定义获取通道的工具方法这里所谓的通道指的是一个方块上、下、左、右4个方向上的空白方块图13.10显示了一个方块四周的通道。图13.10 方块四周的通道下面是获取某个坐标点四周通道的4个方法。程序清单codes/13/Link/Link/sources/board/FKGameService.m13.6.6 没有转折点…

linux之进程间通信--使用信号

一、什么是信号用过Windows的我们都知道&#xff0c;当我们无法正常结束一个程序时&#xff0c;可以用任务管理器强制结束这个进程&#xff0c;但这其实是怎么实现的呢&#xff1f;同样的功能在Linux上是通过生成信号和捕获信号来实现的&#xff0c;运行中的进程捕获到这个信号…

opencv 平面法向量_在OpenCV中绘制平面的法向量

我使用2D条形码识别3D空间中的平面&#xff0c;我想绘制相对于其中心的法线。这是我用来计算正常的代码def compute_normal(camera, board, bounds, frame):extrinsics, ip, op get_extrinsics(camera, frame, board, bounds)extrinsic extrinsics[0]if not extrinsic: retur…