1.从linux说起
从大学就开始接触和使用linux系统,比如ubuntu、centos等发行版,最近才搞清楚称呼“linux”系统其实并不准确,准确的叫法应该是“Linux/GNU”系统。linux其实只是我们所称呼的“linux”系统中内核的那部分,完成诸如进程管理、内存管理、硬件管理等功能,一个系统只有内核的话是毫无用处的,起作用的是内核之上的各类应用软件,它们和内核一起完成各种各样的功能。
GNU就是这样一个工程,开发了许许多多开源的应用软件、库等,如glibc库、gcc编译器、gdb调试工具、Bash、gnome桌面等等。Linux内核一般和GNU软件一起使用,整个系统基本上就是GNU加上Linux,或叫GNU/Linux。一个CD-ROM提供商发现在他们的“Linux发行版”中,GNU软件占单一最大的比重,大约是整个源代码的28%,其中包括一些关键性主要部件,没有它们,就没有整个系统。Linux自身占大约3%。
当然我们不能以代码的多少来判断linux内核和GNU软件谁更重要,或许以后我们会继续用“linux”这个名称去称呼“GNU/Linux”,但我们心里一定要清楚这背后的知识和故事,对于今天linux系统得到如此广泛的普及和发展,GNU功不可没。
关于GNU和linux关系的更多介绍,可以参考Linux和GNU系统
2.自由软件与开源软件
“自由软件”和“开源”基本上指的是同一范围的程序。然而,出于不同的价值观,它们对这些程序的看法大相径庭。自由软件运动为用户的计算自由而战斗;这是一个为自由和公正而战的运动。相反,开源理念重视的是实用优势而不是原则利害。我们因此不赞同开源运动,也不使用开源这个词。——Richard Stallman
在我看来,Richard Stallman是自由软件的布道者,也是理想主义者。
在实践中,开源的要求比自由软件宽松一些。据我们所知,迄今发布的自由软件源代码都是开源软件。尽管大多数开源软件也同样是自由软件,但会有一些例外。首先,有些开源许可证对用户过于苛刻,它们就没有被列为自由软件。比如,“Open Watcom”就非自由的,因为其许可证不允许修改该软件和私自使用该软件。幸运的是,很少软件会使用这些许可证。
去年,MongoDB 宣布其开源许可证从 GNU AGPLv3 切换到 Server Side Public License (SSPL)。主要针对是国内某些云计算厂商不够买商业许可证,利用免费的MongoDB社区版提供商业云服务,并且“一些组织在违反 GNU AGPLv3 协议的边缘疯狂试探,甚至直接违反了协议。”我觉得应该是指修改了MongoDB的代码并没有回馈贡献到社区,这是违反 GNU AGPLv3 协议的。尽管 SSPL 与 GNU GPLv3 没有什么不同,但 SSPL 会明确要求托管 MongoDB 实例的云计算公司要么从 MongoDB 获取商业许可证,要么向社区开源其服务代码。也就是说只要利用MongoDB提供商业云服务,不管改没改代码,要么购买商业许可,要么开源你的服务代码。此时MongoDB能否称得上自由软件就值得商榷了,但它无疑是开源软件。
关于自由软件与开源软件的更多介绍,可以参考为什么开源错失了自由软件的重点
3.版权与许可证
3.1 版权
前面提到了一些许可证,这里进一步介绍。
在开源项目的源代码中,源码文件头部经常会有如下所示的声明。
* 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 V2、LGPL V2、GPL V3、AGPL等,限制更少的如FreeBSD许可证、Apache许可证等,每种许可证都有其特定的用处。
我建议大家认真读一读广泛使用的几个许可证,包括GPL V2、GPL V3、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。下图是部分社区开源项目与红帽企业级开源产品的关系。
上面描述的开源商业模式只是开源商业模式中“支持和服务”模式这一类,还有其他的开源商业模式,但我觉得不是主流方式,这里就不做进一步说明了。