NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

关于小米在开源上的五大原则,一位 20 年开源老兵的思辩

  • 2016-04-07
  • 本文字数:3835 字

    阅读完需:约 13 分钟

从 1995 年至今,从美国到中国,从自由软件到开源软件,小米首席架构师崔宝秋一直在参与开源软件的开发等工作,亲历中美两国开源的变迁与发展。如今,开源是互联网的大势所趋,个人与企业都纷纷拥抱开源。

回顾过去,开源这些年,有哪些值得铭记的瞬间、有哪些影响深远的事件、有哪些极具代表的人物?放眼未来,开源到底该怎么玩,怎样的思路与打法是值得国内互联网公司借鉴的?在 3 月 27 日举行的技术社群大会上,崔宝秋与大家分享了这些年的一点感触。本文根据崔宝秋在大会上的演讲整理而成,关注『聊聊架构』微信号(搜索 archtime),回复关键字『开源』,获取演讲 PPT。

大家好,我是小米首席架构师、小米云平台负责人崔宝秋,今天我分享的主题是《我看开源这些年》。本次分享中,我会介绍下过去二十多年我对开源的一些看法和理解,重点是在国内我们应该怎么玩开源。

我和开源

首先,我先简单介绍下我和开源的缘分,我是什么时候、怎么和开源结缘的。我是 1995 年出国的,那会儿国内还停留在 DOS 和 Windows 编程。1995 年去美国读书,在那里我可以说是大开眼界。我看到了 GNU、Linux、FreeBSD,还有 Emacs,被 GNU 和 Linux 庞大的功能、后面所有的软件、能力、水平所震撼,当时真有惊艳的感觉。我所在学校的几个教授也在开源上对我有很大的启发作用。之后我的四年博士研究项目,五年博士中的四年,都在做 XSB。XSB 简单来讲就是增强版的 Prolog 语言,当时我们基于 GPL 把它开源,到后来很多学术界和工业界机构也在用这个系统。从 1995 年开始到 2010 年,这中间我参与了很多 Emacs 社区讨论,也直接贡献了一些代码。在 LinkedIn 我们也开源了一个分布式实时搜索系统 SenseiDB,后来小米也把它用到了搜索技术里。

2012 年回到中国加入小米,我就开始推进小米的开源战略,比如在有限的人力的情况下,如何站在开源巨人肩膀上快速推出一些云存储、云计算和大数据处理能力。

在这个过程中大家可以看到,我是从早期的一个自由软件的信仰者,慢慢地转化到了一个开源的倡导者,中间也经历过学校、公司,从个人的爱好到公司的推动,从项目贡献者到项目管理者。

开源关键人物、关键事件和基金会

说到开源,讲开源过去的这些年,我觉得应该讲一下重要的开源人物。在我看来,在开源史上、在开源界这三个人是至关重要的:第一个是 Richard Stallman,他创建了 GNU,创建了自由软件基金会,为后来的 Linux 萌芽等等奠定了扎实的基础。第二个,Linus Torvalds,Linux 的创造者,这个不用多讲,大家都很了解了。最后一个是 Eric Raymond,他创造了 Open Source 这个词,并发起了开源运动。我觉得如果没有 Eric,只凭着自由软件,开源做不到今天。这三个人在开源史上未来都很难有人取代的。

下面是开源历史上一些重要的里程碑事件和重要基金会,以及重要的开源软件时间表。

版本控制系统(VCS)和代码管理平台的演进

讲开源,就离不开源代码,离不开版本控制系统。三十多年来,版本控制从早期的 RCS,到 CVS、SVN,一步步发展到了今天最流行的 Git。一个好的版本控制对提升团队的开发效率至关重要。

对于开源来说,代码管理平台也非常重要。我记得在我读博士的时候,我们的系统刚开始都是在系里自己维护的,整体来看,并不安全,版本管理也不方便,不利于与外界的合作。开源软件,势必要有很多人参与,所以最重要的代码一定要放在易于合作、安全可靠的地方,所以后来我们就决定把 XSB 放到 SourceForge 上面。SourceForge 是当时最流行的代码管理平台,在 GitHub 出现之前,它管理了很多开源软件的源代码,项目数基本上是随着时间线性增长的。相对来讲,2008 年有了 GitHub 出现后,Git 所管理的开源项目数量就不是线性增长,早期可能有点线性,但是后来的曲线非常陡峭,有点指数级的味道。

开源软件 VS 自由软件

自由软件我觉得过于理想主义,过于强调人的自由。开源软件更加实用一些,较少涉及政治和道德,强调“使⽤和提供开源软件对你和你的⽣意有好处” 。确实,早期 GPL 推动了自由软件的萌芽或者早期发展,但是后期开源也一定程度上限制了自由软件的发展。所以我觉得开源软件属于工业界,我这两年参加了国内一些开源社区活动,大家对开源的热情都很高。虽然早期我对 Eric 有些有负面的认识,但是他对开源的贡献是不可替代的。

开源的三种力量

开源有三种力量,这是我总结的。第一种力量是个人爱好者。这些人是狂热的技术爱好者。我很早以前就有一个目标,就是等我财务自由或者退休以后,就去写自由软件,享受那个每天 commit 代码,为大家创造价值的成就感。这第一类力量就代表了一大帮技术爱好者。其中我合作过的一个作者,他是一位天文学的教授,叫 Carsten Dominik,是一个非常好的文本管理器 Emacs Org Mode 的作者,可以帮你管理时间、记事、写作等。他编写 Org Mode 的工作几乎都是在上下班两个小时的地铁上或者轻轨上完成的。刚开始我看他的有些代码写的不太优雅,算法性能不够好,让我有些吃惊,因为我一直以为他是一个计算机编程高手,后来我发现他是学天文学的,也就理解了。虽然他的一些算法不是特别美妙,但是他对 Org Mode 这个项目的推进还是有非常大的贡献的。

第二种力量我叫无开源商业模式组织,这里包括公司和学校,这些组织是以互联网服务或者以某种产品来盈利的,它不是直接通过开源的软件或者搭建于开源软件之上的解决方案来赚钱的。

第三种力量是有开源商业模式组织,包括 IBM,也有中国的华为,它们有一种商业模式在后面,利用网络硬件,设备,开源,有一整套的解决方案,对大的企业,通过整套的服务来盈利。

这三种开源的力量,对开源看法不同,贡献不同,投入也不同。

国内开源的几个阶段

中国的 Linux 在过去的二十年发展的非常迅猛,但在座的可能很多人不知道这件事情:这是我在 1999 年 10 月份的一天早上在 LWN 网站上看到的 Eric 写的一篇文章,我当时看了觉得不对。他就是表达了对 Linux 进入中国的反对或者不相信的态度。

他说 Linux 被中国政府采购是不可能的,不应该,也不被欢迎。这表达了他的一些政治偏见。我后来跟 Eric 和 RMS 也进行了电子邮件交流。那次交流让我认识到 RMS 确实把自由软件当成了一个政治的东西来看待的,它不是资本主义或社会主义那方面的政治,而是另一个政治观点,也就是关于自由的。

国内开源我认为有这么几个阶段:第一,我认为 1995 年之前是与世隔绝的,这是加了引号的,我们确实落后了,因为国外已经玩了很久了,而国内还没有互联网。后来十年是初级阶段,2005-2010 年初步成熟了,现在有了 Git,开始了快速发展。

开源的玩法我简单介绍下,重点可以看演讲稿,个人的就是热爱,就像刚才讲的天文学家一样,个人玩开源的也有盈利的,成为暴发户的都有可能的,因为你可以接受赞助等等的。像大公司,有商业模式的公司的开源是另外一种玩儿法,我没有直接参与,就不讲了。我讲的是中间这个无开源商业模式的公司或组织的一些玩法,以小米为代表。大家可以看一下小米大数据做了都用了哪些开源软件,这是一个简单的全貌。为什么拥抱开源?我们首先要站在巨人肩膀上,快速推出产品,快速占领市场,快速为公司创造价值。

所以对很多创业公司,甚至对很多大公司而言,不拥抱开源就一下子输在了起跑线上。当然吸引人才,吸引贡献,提升内部软件质量,我认为也是开源非常重要的几个好处,所以拥抱开源已经是大家公认的。

在小米我一直推行这几个原则:一,快。快速选型,快速定位,快速掌握,快速推出产品。二,绝不重造轮子。宁愿学习掌握,化为己有而不要自己重写,这个投入远远大与前者。三,不用则已,要用则精。四,永远抱着开放与共享的态度。如果讲自由、讲政治上的一些东西、讲道德层面,应该就是一块。五,与其他公司所不同的,小米在重要开源项目上会尽力推出自己的 Committer。

这里,尽力推出自己的 committer 的目的就是想解决国内很多公司所犯的一个很粗浅的错误,造成这个错误的最根本的原因就是它们拿了开源社区中的一个版本,创建了自己的分支后就把这个分支和社区主干的联系给割断了,然后自己用起来很爽,围绕自己的业务进行改进,改动后又不回报到社区,不管是自己不愿回报也好,还是自己的改动不被社区接受也好,这个本地版本就被这个公司维护得越来越重,和社区主干分得越来越远,差别越来越大,最终这个版本实际上就没用了,成了无源之水,无本之木。开源社区是开源项目后面一个庞大的力量,相对而言甚至 BAT 的力量我认为都是小的,比不过社区后面力量的推动。如此下去公司最终会被本地分支的维护成本所拖垮,达不到持久享受开源的好处。

所以,开源 5 大原则的最后一点很重要,在座的各位如果在公司想推开源的话,这点一定要注意。

如何回报社区

怎么有效回报社区?参与交流,这个主要是针对国内开源爱好者或者参与者、贡献者。第一,要勇于参与;第二,清楚地描述想法和算法;第三,还有就是自信,坚定自己的观点,不要被社区中某些貌似大牛的人所吓到,没必要的;第四,一定要负责任,不要打一枪换一个地方,就是写了代码一定要维护,要做 QA,要做测试,要做自己的用户,要做客服,关于你的代码有人提问要及时回答。小米为什么这么快让社区接受了我们,就是我给他们展示了,小米为什么会在某些领域大力投入等等的,所以这个时候社区愿意跟你合作。

我想总结一点结束今天的分享,一句话,我认为开源是软件的未来。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-04-07 23:572924

评论

发布
暂无评论
发现更多内容

打通Jira与钉钉和企业微信不再难

跟YY哥学Jira

钉钉 Jira 企业微信 automation

初识Golang之调用方法

Kylin

3月日更 Go 语言

源码分析-Netty: 高性能之道

程序员架构进阶

Netty RPC 源码剖析 28天写作 3月日更

C++线程池ThreadPoolExecutor实现原理

Linux服务器开发

c++ 后端 线程池 Linux服务器开发 Linux后台开发

一些人的某些目标

sadhu

生涯规划 职业规划 个人提升

正则表达式的使用与匹配原理解析

Guanngxu

正则表达式

十步输出设计文档

鲁米

设计实践

远程协助软件向日葵分析

lenka

3月日更

uni-app跨端开发H5、小程序、IOS、Android(四):了解uni-app项目结构

黑马腾云

html5 微信小程序 uni-app android iOS Developer

蚂蚁二面:MQ消费端遇到瓶颈除了横向扩容外还有其他解决办法?

中间件兴趣圈

面试 RocketMQ 消息中间件

所谓生产力

ES_her0

3月日更

还有高仿项目吗

GitHub指北

【LeetCode】逆波兰表达式求值Java题解

Albert

算法 LeetCode 28天写作 3月日更

2021年Java春招高级面试指南(1到5年Java面试者必备)

比伯

Java 编程 架构 面试 程序人生

避免失控:谈谈人与人交往中的恶

boshi

职场 心理 七日更

《码农歌》

臧萌

加班

Python PyAutoGUI 库

HoneyMoose

我在阿里实习做开源

apache/dubbo-go

微服务 程序人生 云原生 dubbo dubbogo

数据库备份真的很重要!很重要!很重要!

xiezhr

oracle sql MySQL 运维 数据备份

GitOps | 一种云原生的持续交付模型

xcbeyond

CI/CD gitops 3月日更

分享18个常用的ECMAScript 6代码片段

devpoint

reduce URL参数解析 Form表单数据解析

Wireshark数据包分析学习笔记Day17

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

好想做个女孩子,编程第一步,女装身上穿

GitHub指北

这些面试题你会吗?6年菜鸟开发面试字节跳动安卓研发岗,复习指南

欢喜学安卓

android 程序员 面试 移动开发

这份1307页Android面试全套真题解析,源码+原理+手写框架

欢喜学安卓

android 程序员 面试 移动开发

配置引起事故复盘

风翱

3月日更

一口气面了腾讯两个部门!

我是程序员小贱

3月日更

寻找被遗忘的勇气(二十)

Changing Lin

3月日更

MySQL如何选择主键

架构精进之路

MySQL 3月日更

苹果笔记本充不进电的解决方案

石云升

电脑故障 28天写作 3月日更

《Redis 核心技术与实战》学习笔记 05

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

关于小米在开源上的五大原则,一位20年开源老兵的思辩_语言 & 开发_崔宝秋_InfoQ精选文章