第1页
小米的开源参与之道
冯宏华
云平台存储组
www.mi.com
第2页
www.mi.com
第3页
www.mi.com
第4页
大纲
l
小米的开源现状
l
小米对开源的态度 l
小米的开源参与方式 l
一点思考
www.mi.com
第5页
小米的开源软件使用列表
Linux MySQL Redis PHP Nginx Resin Rabbit-MQ
Discuss Storm MemCache Supervisord Tomcat Java
Lucene Tornado MongoDB Jetty Spring Thrift Python
…
www.mi.com
第6页
开源软件在小米的服务领域
u 所有业务部门:硬件,MIUI,电商,电视,路由器,云平台,智 能家居,互娱…
u 几乎所有业务:云服务(Mi Cloud),小米推送,主体市场,小米账 号,应用市场,消息系统,阅读,支付,米聊,米币,浏览器,黄 页,广告,搜索…
www.mi.com
第7页
小米的开源软件贡献列表
HBase
Spark
HDFS Impala
Zookeeper YARN MapReduce SenseiDB
Hive Kudu Storm Kafka Scribe Thrift
…
www.mi.com
第8页
小米的开源重要贡献数字
ü HBase : 提交了347个patch,被社区接受了195个
ü Hadoop : 提交了85个patch,被社区接受了42个
ü Spark : 提交了63个patch,被社区接受了58个
u 3个HBase Committer,2个SenseiDB Committer
www.mi.com
第9页
小米的开源现状小结
u 与公司业务成长息息相关,相辅相成
u 开源社区贡献:
Ø 2012年下半年开始发力
Ø 渐入正轨,初见成效,大有可为
www.mi.com
第10页
大纲
l
小米的开源现状 l
小米对开源的态度 l
小米的开源参与方式 l
一点思考
www.mi.com
第11页
取自社区,回馈社区
u 对社区已有较成熟实现的系统,不另起炉灶,不重造轮子
u 对基于社区版本开发的新功能新改进,饮水思源,及时回馈
www.mi.com
第12页
积极参与,保持同步
u 对社区重要改进的讨论/实现积极参与,多发声,增强影响力
u 线上/线下保持与社区重要参与者的联络与沟通
www.mi.com
第13页
业务第一,开源次之
u 业务的需求优先级高于开源社区(即使不能merge进社区导致 合并版本时很辛苦)
u 不以提交/被接受的patch数目为目标(不助⻓长“墙内开花墙外 香”)
u 不凭空想象和开发“可能会有用”的新功能
www.mi.com
第14页
保证质量,诚信负责
u 不把自己未在实际业务验证或不满足实际业务需求的产品/ 改进放出去
u 对所有开源的产品/改进提供详尽描述(对不足不隐瞒不回避)
u 对开源出去的产品/改进的问题/反馈第一时间响应
www.mi.com
第15页
大纲
l
小米的开源现状 l
小米对开源的态度 l
小米的开源参与方式 l
一点思考
www.mi.com
第16页
“先斩后奏”(先做后说)
u 很多业务提出的新需求,不能期望社区有人帮你做,也不能 承担先和社区讨论清楚的时间成本
u 做好并在实际业务场景得到验证后的patch提交时更有说服 力(场景/背景/测试/效果…)
www.mi.com
第17页
认理不认人,并保持礼貌
u 社区参与者来自世界各地五湖四海,文化/习惯迥异,但在代 码面前人人平等,这是一个基准
u 要能忍受你认为是“愚蠢”的声音,就事论事,保持克制和礼 貌(社区就是一个人群,和现实中的人群一样有无奈有妥协)
www.mi.com
第18页
投桃报李,互帮互助
u 有些功能/代码可能当前业务用不到,被人请求时仍然要尽力 提供帮助:review代码、问题分析等
u 自己提的patch,没有人回应时,可以直接给对这块代码熟悉 的committer发信请求review
www.mi.com
第19页
保持中立,谋定后动
u 对任何针对设计/实现上的“争吵”,不存私心,不站队
u 对任何分歧或讨论,先想清楚再发声,尽量周全/清晰
www.mi.com
第20页
保持耐心,贵在坚持
u 重大的patch几乎都是需要⻓长时间反复的讨论、review和修改
u 对正确的事情要有耐心和坚持(即使刚开始不被理解和尊重)
www.mi.com
第21页
大纲
l
小米的开源现状 l
小米对开源的态度 l
小米的开源参与方式 l
一点思考
www.mi.com
第22页
“溯洄从之,道阻且⻓长”
u 开源软件开发速度(甚至质量)常常不能令人满意
Ø 开发者不是一个真正的“团队”(同一段时间内有着同一目 标的一群人)
Ø 极难做到所有人在“同一⻚页”(same page)
Ø 常会走弯路(无论设计还是实现,甚至bug-fix)
www.mi.com
第23页
设计/概念的一致性问题(concept integrity)
u 开源软件相较闭源软件更难做到concept integrity
Ø 人员、空间、时间等情况使此问题恶化
Ø 超大型系统此问题导致“盲人摸象”情况严重
www.mi.com
第24页
千般不如意,但终归向好
u 开源不是最好的多人协作开发的模式,但从大时间尺度衡量 却足够好(good enough)
Ø 理论上所有的错误/不足终能(eventually)被纠正/改进(虽慢 但总是朝好的方向前进)
Ø “凡走过必留痕迹”(即使失败的项目,其有价值的地方/代 码仍可被借鉴和参考)
www.mi.com
第25页
Q & A