开源软件是怎么发展到今天的,它又是如何影响企业的?

1,672 阅读18分钟
原文链接: mp.weixin.qq.com

本文根据王兴宇老师在〖Gdevops 2017全球敏捷运维峰会广州站〗现场演讲内容整理而成。

(点击“阅读原文”获取王兴宇演讲完整PPT)

讲师介绍

王兴宇 ,Linux中国开源社区(https://linux.cn)联合创始人,从事互联网行业二十年,专注于开源工作十余年。

大家好,我是Linux中国开源社区的王兴宇,以往都是做客Gdevops峰会的主持,今天稍稍不同,将作为演讲者为大家带来关于企业开源战略方向的一些分享。这也是我十几年来第一次以演讲者的身份登上舞台讲台做正式分享,希望大家有所收获。

从目前的形势来看,互联网和软件行业都在逐渐被开源渗透,企业越来越重视开源,甚至还出现了“开源已统治世界”的说法。那么,今天就来聊聊企业该怎样对待开源,迎接开源的浪潮。

主题简介:

1.开源简史

2.开源软件的正确打开方式

3.企业开源战略五步曲

一、开源简史

如果想了解开源、应用开源,首先需要追本溯源,了解开源的历史。倘若你不了解开源的背景和发生的过程,将会在应用开源中做得不够好或是遇到一些错误,这在我们的企业事件中已屡见不鲜。

开源,是与互联网及软件基本上同时诞生的一个文化现象及技术。在上世纪1970年Unix和互联网诞生了之后,开源文化、开源现象也几乎在同时期出现。而后随着商业专属软件的兴起,开源软件也得到了不断的发展,甚至于本世纪初取得了比较大的影响力。

图:Revolution OS

比如2001年这部名叫《操作系统革命》的纪录片,讲述的就是当时已经形成垄断地位的专属软件如Windows、商业版本的Unix是如何在开源版的Linux 等软件的压力下接连崩溃的一个采访。

软件的由来

软件是随着计算机的诞生而出现的承载于硬件之上的逻辑。硬件从最初的晶体管演变成现在的二级管、集成电路,变得越来越庞大,处理速度越来越快。但软件的本质一直没有变,始终是硬件之上承载的逻辑。

由于历史原因,最初的软件是自由的、免费的、开源的。这里并不是说以前的人们的思想情操比现在的人更高或是有共产主义理想,而是因为当时的软件是与硬件紧紧依附在一起的,所以相对于硬件,软件其实是属于浮生的一种逻辑。

举个典型的例子。在软件诞生之初,1969年的AT&T实验室的研究人员利用当时一些用不上的、比较老旧的计算机开发出了Unix系统。这个系统最初是作为内部的试验型项目和个人项目来做,可以自由拷贝。

图:Unix早期大型机与C语言创始人

然而,在那之后,AT&T因为垄断被美国政府裁决,必须一分为七,并被限制十年内不得再涉足计算机行业,这就导致了Unix开发出来后不能进行销售,于是Unix就被贡献出来,变成了可以自由拷贝和使用的系统,形成了一个免费的开端。

而早期古典黑客,并不是指我们现在理解的攻击和破坏系统的人,他们是以炫技术、深入研究的某一群体,比如说当时Unix的创始人、C语言的创始人,他们所开发的很多软件是可以自由传播的。

比如,当时有些人发现他的打印机不好用,想要一份打印机的驱动修改版本,别人说手头有,就随手给出去了,并不需要支付任何费用、早期的文化就是这样,是可以自由传播的。

专有软件模式的兴起

随着计算机的普及和专有软件的逐步兴起,软件和硬件的发展也逐渐出现分工。比如像当时的IBM,在生产个人计算机的时候会专门找到微软来开发操作系统,形成专有软件模式,并且以微软这种发扬光大的商业专有软件销售模式,主导了几十年的专有软件经济模式。

上图是微软的Windows Version 3.11版本,这是当年第一个具有联网功能的经典个人操作系统。当然,除了微软以外,像Oracle、Informix、IBM等公司也是软件方面的巨头,他们共同代表了那个时代的专有软件发展巅峰。

古典黑客文化的回归

但在以RMS(Richard Matthew Stallman)、ESR为首的古典黑客群体看来,软件就是免费的、自由的,他们倡导软件应该回归计算机诞生之初的理想世界。

在1984年,AT&T被取消了计算机业务的禁令(即商业化UNIX)的同一年,RMS决定要把UNIX商业化,所以发起了自由软件运动(Free software),先后推动了GNU运动及FSF(自由软件基金会),这是一个划时代的运动。

图:RMS在路边推广自由软件

随后,Linus Torvalds在1991年上大学时开发了Linux 内核,补上了GNU操作系统的最后一块也是最重要的拼图。

图:Linus Torvalds

1998年的开源界除了RMS,还有其他一些人,比如ESR、Linus,他们在开源上的理念和RMS的不太一样,认为RMS在开源软件方面的追求过于理想化,不利于推广和接受,所以他们决定推广开源软件(Open Source)这个理念。

图:第一届开源峰会

这是当时1998年举办的第一届开源峰会的与会人员,里面有很多熟悉的面孔,像我们平时都会买的O'Reilly的书,里面就有它的创始人奥莱利,正中间是Linus,还有其他人,却唯独没有邀请RMS,可见这里他们就已形成了理念分歧。

开源终将取得压倒性胜利

为什么开源终将取得胜利?主要有三方面原因:

第一,随着互联网的发展,开源软件取得了井喷式的繁荣。

互联网实际就是在一定程度上基于开源软件建立起来的,早期的互联网是基于Unix的,后期的很多互联网基础服务也基于Unix诞生出了很多服务,比如DNS服务,它最初是由伯克利大学开发的bind,以及 Apache Web服务器、邮件服务器等等,这些都是基于开源软件的模式制作出来的。

因此,随着互联网的发展,开源软件自然也蔓延到了很多方面,取得了不错的发展。

第二,专有软件模式在进入巅峰之后,已经显示出了颓态。

第三,随着计算机教育的普及,以及越来越多人对开源软件模式的探索/开发,开源软件已经形成了一种新的软件和互联网发展模式,甚至成为主流。

昔日的寇仇要么转换阵营,要么就迈入消亡,微软便是其中最典型的案例。鲍尔默在比尔盖茨后接手微软管理,曾有一个著名的观点——“开源是癌症”,成了最典型的反开源势力。而新的总裁萨提亚上台之后,却来了个180度的大转变,将微软变成了Microsoft Love Linux。

事实上这并不仅仅是萨提亚以一人之力扭转过来的,是因为当时微软内部已经逐渐有了开源的思潮和转换,而萨提亚恰逢其时起到了决定性的作用。

这就是我们所说的,开源软件终将取代专有软件取得压倒性的胜利。

二、开源软件的正确打开方式

提及开源软件,很多人觉得直接拿过来用就好了,哪里会存在什么问题。但这里面还是有很多讲究的,我今天就给大家介绍开源软件的正确打开方式。

什么是开源软件(OPEN SOURCE SOFTWARE)

开源软件推进联盟(OSI)对开源软件有完整的定义,它必须符合10条标准,其中最重要的是前三条标准:

1. 自由分发(Free Redistribution)

2. 源代码(Source Code)

3. 衍生作品(Derived Works)

4. ……

举个例子来说明:当拿到开源软件后,你可以将其随意赠送给他人或做其他处理,这是自由分发;若你拿到的开源软件是二进制的,一定不需要任何成本便能很容易地得到它的原件版,这也是开源这个词的来源;此外,你可以在源代码上做修改并把它进一步分发出去,这便是衍生,这个权利相当重要,是现在开源软件迅速发展起来的一个重要因素。

更多详情可查看OSI官网,https://opensource.org/osd-annotated

什么是自由软件(FREE SOFTWARE

自由软件的概念出现得很早,它是有着概念上更严格、范围更紧密的定义的软件。这个定义很有RMS风格,也是我们常说的自由软件的四大自由:

(1)自由度0:无论用户处于何种目的,必须可以按照用户意愿,自由地运行该软件。

(2)自由度1:用户可以自由地学习并修改该软件,以此来帮助用户完成自己的计算。作为前提,用户必须可以访问到该软件的源代码。

(3)自由度2:用户可以自由地分发该软件的拷贝,这一规定与早期Unix的分发制度颇为类似。

(4)自由度3:用户可以自由地分发该软件修改后的拷贝。

图:GNU非洲角马,自由软件的吉祥物

更多详情可登录GNU网站查看:https://www.gnu.org/philosophy/free-sw.html

开源软件与自由软件的异同

开源软件与自由软件有所不同,但又紧密联系。开源软件是一种更普通、更通俗的说法,而自由软件则是开源软件的一部分。

这主要是为了避免出现像RMS那些过于追求理想和纯净的理念,这里我们不去评价RMS的追求正确与否,从现实角度而言,开源软件显然是更容易被人接受的。

而在有些场景下,我们会选择更中立的说法:FOSS或FLOSS,将它们统一称为自由软件或开源软件。其中,F即FREE,L是Liberty,也是自由的意思。因为FREE本身在英文中有两个含义:免费or自由,不便于区分,所以有些场合会用Liberty来进行表示。

开源软件赋予你什么?

这是不言自明的,开源(Open Source)的本质是将构建、衍生、使用、分发的权利进行公开。事实上,这里面的开放(Open)不仅仅指开源软件,像大家经常听到的开源硬件、开源文档、开放组织,这些广泛地用于软件之外的概念,也是属于OPEN的范畴。

提及开源软件必然绕不开的一点就是开源许可证。它不仅仅是对开源软件的一种限制,而且是维持开源软件自身生存的根本,是开源生态自治的基础。

开源软件将赋予我们什么?简单来说,最常见的认识有以下三种:

  • 得到软件的源代码,修改以满足你的需要

  • 根据许可证分发开源软件

  • 得到来自开源软件的反馈

开源软件不赋予你什么?

开源软件并不等同于公共领域软件。所谓公共领域软件,就是它是完全放弃任何权利的,可以任意修改,比如公共领域的文章、文档、软件。

但开源软件有严格的限制,需要遵循80多种的软件定义许可证要求。正是因为这些限制,开源生态才有生生不息的发展。

目前这些许可证分为两大类:

(1)宽松许可证:随便使用,即便是改换许可证、闭源均可。典型的有BSD/MIT/Apache许可证,以及伯克利的2G/3G版许可证。一般来说,他们会要求你保留原始的许可证。 

(2)左版许可证:这是中文的翻译,英文里叫CopyLeft,是RMS相对于版权(Copyright)的英文造出来的。这类许可证相对严格,即无论你是否修改,都必须与原许可证保持一致,这也意味着不能改换许可证、必须开源。

  • GPL:其中最著名就是GPL许可证,它最初叫GNU许可证,现在被称作GNU通用许可证。它本身带有GPL感染的特性,即用户使用GPL软件并将其入其它软件,成为软件系统的一部分,那么整个软件系统将被其感染。关于GPL的感染与规避,有很多方式,限于篇幅原因这里不展开。

  • LGPL:还有一种情况,就是感染不会扩散到该库之外。这是因为我们往往把一个软件嵌入到另一个软件中,是通过类库的方式做,这种情况下GPL感染显然会有很大的麻烦,会导致类库没有人去用。

  • AGPL:这类情况意味着如果云服务里遇到AGPL,必须开源。

开源许可证的使用法则

开源软件的使用有一定的规则,需要遵从以下几点:

  • 不使用没有许可证的软件

  • 不违反开源许可证

  • 跟踪你所使用的软件的许可证

  • 注意许可证的适用场景(GPL、LGPL、AGPL)

  • 发布和贡献开源软件之前请先咨询律师

  • 确保员工和第三方遵循许可证

开源软件的好处

遵循了上述规则,开源软件将让我们受益匪浅:

  • 降低软件总拥有成本(TCO)

  • 摆脱供应商锁定

  • 更快的技术迭代

  • 安全性更好

  • 更大的生态支持

  • 更多雇员选择

  ...

“打开”开源软件的几个阶段

一般来说,“打开”开源软件有几个阶段,按照深入程度分别为:

1. 使用开源软件

在技术体系,公司业务中采用开源软件。

2.回馈开源软件

  • 就开源技术的不足,反哺自己的贡献

  • 贡献自己的开源软件,建设(影响)开源生态

  • 赞助支持开源社区和开源软件

3.融合开源软件

  • 使自己的技术体系、战略方向,与开源生态融为一体

  • 主导开源软件生态和标准

“打开”开源软件的风险

在这个过程中,开源软件并非仅仅只带来收益,也会存在一些“打开不当”的风险:

1.技术风险

  • 不成熟的开源软件或许会导致公司的技术方向走偏(比如MongoDB)

  • 没有商业性服务保障

2.法律风险

  • 违反许可证使用开源软件导致公司软件面临被迫开源或法律赔偿(GPL牟利)

  • 违反许可证使用开源软件导致公司处于法律的不利地位(react专利)

3.业务风险

  • 开源核心代码面临竞争对手的追赶

“正确打开”开源软件的姿势

我们只有以“正确打开”的方式来使用开源软件,才能真正受益于它,而不是在拥抱开源的时候遇到风险和困难。

1.认识到开源的价值所在,要和企业战略方向相关

  • 内在的动力和利益捆绑。没有切实的企业利益相关,必然处于可有可无、虎头虎尾的状况。

  • 回报难以衡量,需与战略捆绑。没有自上向下、切实理解、长期支持的前提,难以持久

2.有计划的拥抱开源

  • 规划:时间表、范围、人力投入、资金投入

  • 流程:采纳开源软件、贡献开源软件

  • 人员:技术、法律、公关、委员会/办公室

三、企业开源战略五步曲

我自己在主持运营 Linux开源社区时曾遇到一些公司向我征求做开源的方法,接下来我抛砖引玉,从企业的视角出发,与大家分享企业在开源上的实践操作。

1.规划企业开源计划

首先,确定企业开源的目的,一般来说,主要是以下三种:

  • 促进商品产品/业务的发展

  • 促进人员招聘

  • 建立企业品牌/美誉

此外,要把开源作为一种战略,而非战术。因为开源是一件恒久的事情,不是仅靠技术部门就能自主实现,它需要得到公司领导层的支持和耐心,得到各个部门的支持和参与,才能一直执行下去。

2.落实人员和部门

如果想真正把开源当成一回重要的工作来完成,就需要落实人员部门,让专职人员或专职部门来计划或协调工作。

根据公司的规模和阶段,可以分设不同的职位和部门,选择兼职或专职的人员,如下:

  • 布道师:主要负责对外传播开源信息

  • 首席开源官:负责协调开源事务

  • 开源计划办公室:负责开源事务的运营

  • 开源委员会:更大层面的负责开源事务的协调,包括技术、人力、法律、公关和行政。

3.先从内部开源做起

开源不仅仅是代码公开,需要若干步骤和环节。审慎的公司应先从内部开源实践起来。若公司规模比较大,也不妨从内部开源做起,这不仅有利于打通公司内部的割裂与流程,等内部开始做起来后,再往外走。

典型来说,开源需要做这么几步:

  • 代码存放和开放,需要剥离敏感信息。

  • 代码整理和文档化

  • 许可证梳理(对外部代码的许可证的依赖)

  • 对大型软件的组件做开源前审核,让专人做专业咨询指导

  • 发布开源宣告(公告、变更日志、亮点推荐)

  • 接受反馈和建立沟通渠道

4.走向外部开源社区

当内部开源实践有了一定成效后,就可以逐渐走向外部开源社区:

(1)建立外部社区

未必需要建立独立社区,在GitHub、GitLab等国际化社区建立阵地更好,用好它们所提供的工具和功能。

(2)建立线下沙龙

  • 不定期/定期举办小规模线下沙龙,沟通骨干贡献者;

  • 奖励贡献者,包括精神和物质(开源并不代表免费,它是一种精神或经济模式,需要被给予奖励)

  • 鼓励员工参与,邀请外部专家参与

(3)路演开源项目

参与相关会议,宣讲和赞助会议,由布道师或开源官等人去把开源项目真正推向成功。

5.形成开发平台和开源生态

在完成上述步骤后,我们还要形成一个开放平台和开源生态,比如:

  • 除了代码开源之外,还更进一步提高开放能力(OpenAPI),促进上下游生态的发展。

  • 从单一的项目发展成伴生项目簇。

  • 除了开源项目外,也能支持商业性伴生项目/产品

  • 最后,企业要对开源产品进行生命周期管理。也就是说,开源用户也是用户,当开源项目开源出去后,我们要不断给它浇水、维护,而非置之不理。开源后管吃不管养,这一点在国内外都屡见不鲜,但目前国内已有很多企业在逐渐重视这方面情况,行业整体状况在逐渐改善。

近期热文

从Elasticsearch集群及数据层架构,看分布式系统设计

DBA+工具:SQL自审自上线,摆脱人肉审核就在当下

类比NBA队伍建设,趣谈如何打造一支运维明星团队

关联与下钻:快速定位MySQL性能瓶颈的制胜手段

Linux运维工程师的大数据安全修炼手册

最新活动

2018 Gdevops全球敏捷运维峰会(成都站)

↓↓点这里下载干货PPT