3

开源 (open source) 是什么?为什么要开源?

 2 years ago
source link: https://my.oschina.net/aceyclee/blog/5296361
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

开源 (open source) 是什么?为什么要开源?

从「开源」的早期讲起,其实和大多数人想象的不同,软件一开始并不是闭源的。

在上世纪 60 年代,IBM 等公司开发的软件都是自由分发的,同时也提供源代码。那个时候的商业模式更多是以硬件为主,软件作为硬件的附属品,属于支撑硬件工作的东西。这才是开源历史上的早期阶段。

后来随着硬件销售的利润下跌,制造商只能另辟营收,才开始单独销售软件,并且不再提供源代码。从这里也可以看到商业模式在某种程度上,其实也是一种轮回 —— Apple 在硬件销售利润上达到了瓶颈,于是开拓了软件服务的收入。

直到 1983 年,一位曾在 MIT AI 实验室工作的程序员 Richard Matthew Stallman 对企业在源代码上的垄断非常不满,发起了 GNU 项目,这个项目标志了自由软件运动的开始。

v2-86543eb9a3baa57b09fb29554c553a27_1440w.jpg?source=1940ef5c

当然,自由软件运动更像是社会运动,而开源则更偏向于软件开发方法。但这并不妨碍我们理解:开源历史的过程其实是 —— 开源 → 闭源 → 再开源。


回到正题,聊聊「开源的行为」,为什么要开源?

v2-3e7e7f9f703cc03b616ea753007edef7_1440w.jpg?source=1940ef5c

其实在开源史上,我们也可以看到 —— 开源一直和商业是「相爱相杀」的,崇尚自由精神的程序员看不惯大公司对源代码的垄断,发起了自由软件运动;而今天,大公司却纷纷开始拥抱开源。

一个很重要的问题来了 —— 软件开源背后的商业模式是什么?

一言概之:开源就是用事实标准去建立生态。换言之,开源是培养用户、确定行业标准和赚钱的重要手段。

比如说云计算行业,像虚拟机、数据库都是商业化比较好的。因为这些技术相对成熟、也有标准的接口,实现也更可靠。很多开发者会将其作为自己的基础技能,因此云厂商可以用标准化来进行规模化,从而实现盈利。

但是另外一些组件,像消息中间件、离线计算等,并没有很统一的标准,开发者使用这些组件的学习的成本比较高,云厂商提供的服务自然也高。所以云厂商就希望通过开源来推广自己的产品,把这些工具发展成为开发者的基础工具套件,才能提高 enterprise 版本的销量。

举个例子,Google 就希望使用 K8S 来确定集群管理的标准。

所以不难看出,开源行为在当前阶段,已经变成了商业的一部分,或者是商业的一种手段。

当然开源本身还是能给开发者带来很多利处的 —— 比如白嫖。但我们也并不需要排斥它有商业的诉求,如果能接受开源就是商业模式的一种,后边我们就可以讨论开源是如何赚到钱的。

v2-7f7abc3e0051fd9faef57ca955b55930_1440w.jpg?source=1940ef5c

开源对商业的帮助

还是从事实标准讲起,开源所建立的事实标准带来最明显的好处是 —— 隐形绑定。这个很好理解,某项技术已经是业界标准了,那你推基于这项技术的产品还很难吗?

与此同时,开源对商业的帮助还在于:开源所形成的社区生态,可以对商业市场产生支撑。

从产品角度而言,社区生态关乎开源产品的可持续迭代,良好的产品迭代是商业化的基础,在此不做冗述。

而从商业的角度来看,对公司来说开不开源其实是一种价格策略 —— 开源与否解决的是价格的问题,开源相当于对该版本进行免费(在该产品采用的协议范围内)。

同样举个例子,软件研发管理平台 CODING 在全面免费之后,收入反而提高了。虽然开源面向的是开发者,但是技术产品的商业行为就是一种 ToB 的生意,该付费的还是会付费。

所以我们就不难理解,为什么现在大公司开始扎堆开源,当然有 KPI 的因素,但我们今天只讲理论模型。

有些开源项目开着开着就死了,有些开源却能得到公司的长期支持,注意了 —— 长期支持一定是要对公司的商业有帮助才行。因此公司在讲开源的时候,背后必然设计了一种商业模型来承载这个项目。

再举个例子吧 —— 阿里的云原生战略:

基本上大厂的开源方法论,都可以从标准、产品和生态三部曲,来推出厂商的真正商业目的(or 野心)。


聊了那么多商业的事儿,铜臭味太大,谈谈开发者理想。

开源绝不代表把代码往 GitHub 一扔,公关稿一发,大喇叭一喊 —— 我开源啦!

开源最重要的是社区环境,是一个为 PR (Pull Request) 战斗的游戏,这样的开源项目才能有勃勃生机。

那么,开源社区应该如何运作?

一个成功的开源项目,必然有大量的开发者参与。对比于一般的项目管理,它的协作复杂度会空前的高,这个时候如果靠人治、靠热情,显然是不可持续的。

这里推荐一本书《大教堂与集市》,这本书讲了传统软件开发和开源软件开发在项目管理上的不同之处。

从书名上我们也可以一窥全豹 —— 传统软件开发的项目管理,更强调明确的目标、工期资源以及质量的之间平衡;而开源项目一般都会依托于开源社区的管理和运营,包括开源基金会的运作,也是遵循开源社区的治理模式。

v2-71c47eba830e25df36296d4953b44aa1_1440w.jpg?source=1940ef5c

从开源社区治理原则的维度来看,有三点我觉得很重要:

1、公开与透明

如果你提交过代码,你就知道,每次提交都会有 commit 记录。

同理,对于开源项目的任何讨论与决策,也都应该有记录,并且任何人在任何时间都可查询可追溯。

这样才能让第三方开发者(或者其他利益群体)能够聚集到这个开源项目中来。通过公开、透明的讨论、决策来推进项目管理。

2、共识原则

共识意味着彼此尊重,当然某些时候可能会有效率的损失,但这是值得的。因为开源项目的发展一定会涉及不同的开发者、不同的利益群体,达成共识才能推进下一步的前进。

3、精英治理

如果不是开发者,第三个原则可能和大多数人的常识相悖。

是这样的,开源社区的话语权,是由你对项目/社区的贡献大小决定的。你做了贡献,才能得到他人的 respect,才能获得社区给予的职责。

精英可以理解为「有威望」,这样才能够吸引更多的人积极参与到开源项目和社区活动,使之保持活力。

v2-922e07cdfeb752faab7a74f760e75aed_1440w.jpg?source=1940ef5c

总的来说,在现实意义上,对公司而言,开源是商业手段的一种。但这并不影响开发者在开源过程中受益,它也是开发者技术交流和技术理想的实现过程之一,不必因为「开源行为」刚好也能挣到钱而说它忘了初心。

君不见尤大尤雨溪做开源都财富自由了 (bushi

最后还想说的是 —— 开源项目不只需要程序员,还需要其他各个领域的人才,艺术家、音乐家、设计师和文档撰写者也都可以一起做出完整的作品。

v2-132d8c6a61c97d98b328ecb41d8d84f6_1440w.jpg?source=1940ef5c


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK