你须要知道的关于开源的知识

1.从linux提及

从大学就开始接触和使用linux系统,好比ubuntu、centos等发行版,最近才搞清楚称呼“linux”系统其实并不许确,准确的叫法应该是“Linux/GNU”系统。linux其实只是咱们所称呼的“linux”系统中内核的那部分,完成诸如进程管理、内存管理、硬件管理等功能,一个系统只有内核的话是毫无用处的,起做用的是内核之上的各种应用软件,它们和内核一块儿完成各类各样的功能。html

GNU就是这样一个工程,开发了许许多多开源的应用软件、库等,如glibc库、gcc编译器、gdb调试工具、Bash、gnome桌面等等。Linux内核通常和GNU软件一块儿使用,整个系统基本上就是GNU加上Linux,或叫GNU/Linux。一个CD-ROM提供商发如今他们的“Linux发行版”中,GNU软件占单一最大的比重,大约是整个源代码的28%,其中包括一些关键性主要部件,没有它们,就没有整个系统。Linux自身占大约3%。linux

固然咱们不能以代码的多少来判断linux内核和GNU软件谁更重要,或许之后咱们会继续用“linux”这个名称去称呼“GNU/Linux”,但咱们内心必定要清楚这背后的知识和故事,对于今天linux系统获得如此普遍的普及和发展,GNU功不可没。git

关于GNU和linux关系的更多介绍,能够参考Linux和GNU系统github

2.自由软件与开源软件

“自由软件”和“开源”基本上指的是同一范围的程序。然而,出于不一样的价值观,它们对这些程序的见解截然不同。自由软件运动为用户的计算自由而战斗;这是一个为自由和公正而战的运动。相反,开源理念重视的是实用优点而不是原则利害。咱们所以不赞同开源运动,也不使用开源这个词。——Richard Stallmanweb

在我看来,Richard Stallman是自由软件的布道者,也是理想主义者。redis

在实践中,开源的要求比自由软件宽松一些。据咱们所知,迄今发布的自由软件源代码都是开源软件。尽管大多数开源软件也一样是自由软件,但会有一些例外。首先,有些开源许可证对用户过于苛刻,它们就没有被列为自由软件。好比,“Open Watcom”就非自由的,由于其许可证不容许修改该软件和私自使用该软件。幸运的是,不多软件会使用这些许可证。ubuntu

去年,MongoDB 宣布其开源许可证从 GNU AGPLv3 切换到 Server Side Public License (SSPL)。主要针对是国内某些云计算厂商不够买商业许可证,利用免费的MongoDB社区版提供商业云服务,而且“一些组织在违反 GNU AGPLv3 协议的边缘疯狂试探,甚至直接违反了协议。”我以为应该是指修改了MongoDB的代码并无回馈贡献到社区,这是违反 GNU AGPLv3 协议的。尽管 SSPL 与 GNU GPLv3 没有什么不一样,但 SSPL 会明确要求托管 MongoDB 实例的云计算公司要么从 MongoDB 获取商业许可证,要么向社区开源其服务代码。也就是说只要利用MongoDB提供商业云服务,无论改没改代码,要么购买商业许可,要么开源你的服务代码。此时MongoDB可否称得上自由软件就值得商榷了,但它无疑是开源软件。centos

关于自由软件与开源软件的更多介绍,能够参考为何开源错失了自由软件的重点安全

3.版权与许可证

3.1 版权

前面提到了一些许可证,这里进一步介绍。ide

在开源项目的源代码中,源码文件头部常常会有以下所示的声明。

* Copyright (C) 2008 ARM Limited
 * Written by Catalin Marinas <catalin.marinas@arm.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

其中的“Copyright © 2008 ARM Limited”就是版权声明,这里指的是ARM公司拥有该文件源码的版权。

版权是指拥有使用、受权、出售著做物等权利。这样的版权声明最先是美国的版权法律要求的,后来(《伯尔尼公约》的出现)对版权保护的体系逐渐完善,创做者对创做的做品自动拥有版权,并不须要声明。也就是说你对你本身创做的代码自动拥有版权(也多是公司拥有),除非你向相关机构申请放弃版权。

为了不侵权的发生,也为了让使用者更容易与版权拥有者联系以便得到受权,在文件中进行版权声明仍然是一种好的作法。一般,与版权声明一块儿的还有许可限制和免责声明。这样就能让看到代码的人知道谁拥有这段代码的版权,而且使用者在使用时拥有哪些权利,要受哪些限制,上面代码采用的是GPL V2许可证。紧接着是免责声明,意思就是用这些代码的话出现问题或者故障引发的后果版权方概不负责,用不用是你本身的事。

3.2 许可证

代码的版权是个人,可是我能够受权许可你使用。许可证就是对使用者的权利和义务进行约束的协议。例如,linux内核总体采用GPL V2许可证,网上都说GPL是一种传染性的许可证,也就是只要你的代码使用了采用GPL许可证的代码,无论是一小块,仍是几个文件或者整个软件,那么你的软件就须要一样采用GPL V2许可证并开源。这也是为何咱们可以看到那么多开源的linux发行版本的缘由。

GPL许可证的目的就是为了推进自由软件的发展,即你用了我自由软件的成果,你就得继续保持自由软件,让你们都能使用。许可证的类型有多种多样,如GPL类许可证里面又有GPL V二、LGPL V二、GPL V三、AGPL等,限制更少的如FreeBSD许可证、Apache许可证等,每种许可证都有其特定的用处。

我建议你们认真读一读普遍使用的几个许可证,包括GPL V二、GPL V三、Apache许可证等。我也是读了以后才对许可证有了更深的认识,好比怎样才叫开源,哪些许可证之间是兼容的,特别对于公司应该优先选择哪些商业友好的许可证,在采用了开源代码并商用后如何不违反许可证,避免没必要要的官司等。

前段时间公司采购了F国某公司的路由平台部分组件源代码,价格不菲,我参加了源代码的验收,发现其提供的路由组件是采用GPL V2许可的Frrouting(一个开源的路由协议软件。供应商提供的Frrouting相比于社区支持的开源项目frrouting更稳定),但在采购合同中却要求公司不能向外复制和传播源码,明显与GPL V2许可证相悖。随后向供应商反应,对方赞成对开源这部分签定补充协议,取消对开源代码复制分发的限制许可。

更多关于许可证的介绍

4.开源商业模式

红帽是全球最大的开源商业公司,去年以340亿美圆被IBM收购。

以前对向红帽(redhat)这样的开源商业公司盈利模式一直百思不得其解?红帽企业Linux是红帽的主打产品,是开源的Linux操做系统。明明都是开源的软件,为何还能卖钱?

首先,自由软件或者开源软件中“自由”、“开源”两个词和是否免费没有关系,开源的软件同样能够卖钱,只要有人愿意买。其次,开源并非说必定要把代码放在github这类的网站上,让全部人都能随时访问。红帽企业Linux基于GPL V2许可证,根据许可证要求,当厂商把基于GPL V2的产品分发给客户,若是客户须要产品的源代码,厂商就要把源代码提供给他,这样就知足了许可证对分发的要求,也就是对开源的要求。

这里实际是要解释清楚两个问题:

  • 客户为何会选择红帽的企业Linux

红帽企业Linux相比于其余的linux发行版更安全、更稳定可靠。红帽在linux操做系统上深耕多年,对于加入到企业Linux中的功能都会进行严格的、系统的测试,保证系统的安全和稳定性,而且可以及时应对出现的bug、开展验证并通知客户。对于我的或者普通的小公司可能并不太在乎系统的安全稳定性,但对于银行和股票等金融机构、云服务或者电信运行商等对系统安全稳定有较高要求的企业就会极可能成为红帽的客户。而且红帽并非卖企业Linux的开源代码,而是经过订阅的方式,客户经过购买红帽订阅,能够得到红帽企业Linux及其配套服务,如培训、系统bug修复、更新等。

  • 客户拿到红帽的企业Linux二次开发再销售与其竞争怎么办?

客户可以基于红帽的企业Linux二次开发再销售,但一样也要受许可证的限制,也要开源给其客户。“前阵子腾讯内核团队基于 RHEL7.4 源码发布 TCPA 项目闹出的笑话,RHEL 基于 GPL,按照协议要求,TCPA 也须要基于 GPL 开源其内核源码,可是团队并无这样作,最终 TCPA 项目“下架”收场。”因此,最终比拼的是竞争力,关键是竞争得过红帽吗?

“红帽的开放式开发模式将红帽工程师与开源社区紧密联系在一块儿。开源社区的成员经过协调努力,共同发掘和改进好的创意。红帽经过贡献代码、建立上游项目产品,为开源社区提供支持。”目前红帽是许多开源软件基金会的会员,已经普遍的参与到各开源社区中,经过在社区发起项目与贡献代码,并为基金会贡献资金促进社区发展;另外一方面,又将社区项目的成果应用到本身的企业级开源产品中,使本身的产品更有价值。如此企业和社区造成相互促进的良性循环。

目前红帽经过普遍参与开源社区,积极构建和完善现代 IT 技术,产品覆盖了从操做系统到存储产品、中间件和容器,再到管理方案和自动化技术等众多领域,成为了开源商业领域的No1。下图是部分社区开源项目与红帽企业级开源产品的关系。
在这里插入图片描述 上面描述的开源商业模式只是开源商业模式中“支持和服务”模式这一类,还有其余的开源商业模式,但我以为不是主流方式,这里就不作进一步说明了。