微信号:infoqchina

介绍:有内容的技术社区媒体

第三只眼:聊聊开源

2014-04-07 17:09 杨赛

前几天陪着程序员攻略君采访老公大人,我在旁边一边听一边记录,忽然意识到一件事:我已经很长时间没有关心过“开源”这个话题了。


记得我2009年刚入行的时候,总觉得开源社区是一个理想而神秘之地。我会因为读到半篇《创新在别处》而兴奋不已,也会为了翻译Google老大的一篇有关开放的文章而奋斗数日。当时会觉得搞发行版的都是大牛,搞Linux内核开发的更是神仙,而所有的开源社区都是比公司更先进的组织。2010年我做了个专题,名字叫《揭秘开源社区的成功元素》,把Debian社区、Ubuntu社区、KDE社区和OpenOffice社区的组织结构、委员会什么的介绍了一遍(现在回头看看实在是汗颜);2011年我又做了一个专题,名字叫做《Linux 20周年庆祝会》,又是做字幕又是做信息图的,仅仅是为了想让页面看起来好玩点;2012年我想过做一个开源故事的专辑,还专门花了十几美刀注册了一个域名,不过现在已经完全想不起来当时自己打算干啥了。


不知从什么时候开始,自己对“开源”这个词的感觉已经不一样了。现在回头想想,也许是从2012年10月,何家胜老师邀请我去为中国Linux内核开发者大会做摄像的时候开始?自从那天开始,一切都不同了……


咳咳,具体的故事那也不用多说了,说说我现在对开源的一些想法吧:


1、“开放源代码”,的确就是开放源代码而已。源代码跟一个成功的项目、成功的社区或者成功的商业模式的关系,就好比砖头跟大教堂。同样是砖头盖出来的,未必便是教堂,也可能是小黑屋。不同的许可协议可以想象成是特点不同、形状不同的砖头,闭源的binary则可以想象成是预制板。


2、好的代码是写给人看的。这点跟开源还是不开源没有直接关系,但是有间接的关系:因为代码一旦开源,别人看到你的代码的几率会增加,如果别人看不懂或者觉得你代码写太烂,你会觉得不好意思见人。这是有关程序员个人荣誉的问题,就好像跆拳道修炼者身上的腰带一样。


3、好的程序员之间有一套“如何准确的交流代码”的方法和规则。无论是写邮件还是发git还是别的什么工具,只有尽可能准确而无遗漏的沟通,才能有效率的改进代码、提升代码质量。至于具体的交流方法和规则,可能因为交流本身就是一件很复杂的事情,而代码交流又涉及到使用什么工具交流、跟谁交流、如何定义“好代码”等多个方面的问题,所以基本每个团队都会有一套特有的交流方式,团队和团队、项目跟项目之间的差别可能会很大。


某些工具在某些团队能够促进交流的有效性,而同样的工具在另外的团队可能完全没用。在极端的情况下,对于那些并不是写给人类看的代码,谁都会无从下嘴,用啥工具都没用,代码交流机制纷纷失效。我个人的感觉是,优秀的大型项目都有一套非常好的交流机制,这跟开源还是闭源没有直接关系。


4、开源的用户已经无处不在。因为各个项目之间错综复杂的依赖关系,应该说现在世界上大部分人都是开源项目的直接用户或间接用户。


虽然对于开源项目来说,“使用者”随时可以转化成“贡献者”,但大部分项目的转化率都是极低的。部分直接用户虽然对项目进行过改造,但大部分改造都止于内部的特别需求,并不能被视为贡献者。“贡献者”仅用于定义那些进入上游的开发者——当然,本地化翻译的工作量也可以算是贡献的一种。


转化成贡献者的人群中,大部分情况是重度用户,为了让自己不从上游掉队同时又不用自己维护一个庞大的分支,才去努力的占领上游。另外一种情况是,开发者将已有的项目改造后另起炉灶(这种情况在原项目作者玩失踪了之后尤其常见),自己来做新分支的上游,努力拉新的下游来跟自己一起玩。一个贡献者在不同的项目中可能处于上下游的不同位置,所以不能简单的用一个“开源贡献者”或“开源用户”的标签来定义他的身份。


我们说开源的“用户”、“贡献者”和“受益者”(受益者一般是在商业层面,算是用户的下游),这是三个不同的群体,不可一概而论。这个区分在OpenStack这样以运维为直接用户的项目中有很明显的体现(Dev是贡献者,Ops是用户,User是受益者),而偏上层的项目如Bootstrap,贡献者和直接用户都是开发者,受益者则是网站主和消费层面的人群。


5、说到受益者当然会谈及商业模式。开源界最知名的商业模式说白了就是卖服务,但卖服务这件事儿其实跟开源还是闭源没半毛钱关系——这年头谁不说自己是卖服务的呀。红帽是最早把安装维护机器转化为服务的公司之一,AWS则是把安装维护机器的服务再往前做了几步。两家的商业模式其实本质上差不多,而AWS并没有因为不开源而走不下去了。反过来说,OpenStack也不一定会因为开源而在商业模式上占便宜。


6、开源社区有政治斗争。成功的开源社区也可能是独裁的体系。其实民主还是独裁不是重点,大家又不是为了互相取悦才搞到一起,重要的是规则要透明合理,大家对“怎样对项目更好”形成一个公开并可以开放讨论的“共识”,让每一个能够“让项目变得更好”的人都能发挥自己的贡献。


这世界上没有完美的体系,好比科举考试,人人都骂,但至少在当时的中国这是最公平的途径,让没有任何背景的人也可以凭借自身能力爬上去。各个体系都有自己的局限性,重要的是它能否满足本系统/本系统的用户/受益者们最关心的那个目标。


7、任何项目带来的好处如果不是通用的,那么开源也是没太大意思的。比如,如果你的软件没有几万台机器的规模就用不着,那么即使开源出去也只能供人瞻仰,几乎找不到人陪你一起玩儿的。开源能玩多大盘子,从根源上取决于它解决的问题有多通用。


8、从个人角度来看,开源最大的好处是快速学习、提升自己的能力;从项目的角度来看,开源最大的好处是可以在全世界范围内网罗人才和patch;从企业的角度来看,开源最大的好处是可以站在群体智慧的肩膀上而不必从零开始;从人类社会的角度来看,开源最大的好处是可以减少各个公司和个人重复造轮子的生产力浪费;从软件自己的角度来看,开源最大的好处是增加了软件们交互、变异、进化的可能性,大大增加了软件这个物种的丰富性和健壮性,为技术占领世界这一宏伟目标打下了基础……


“第三只眼”:

主要由InfoQ编辑专门为微信公众账号自编自写的一个栏目,旨在表明编辑态度及表述平日见闻和思考,期望成为和读者沟通的桥梁。亦接受投稿:spark@cn.infoq.com

今日专栏作者:

杨赛(@lazycai),InfoQ中文站编辑。到处串门的互联网信徒,相信规则的力量。

***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 拆轮子系列:拆 OkHttp MFC深入浅出之学习笔记(1) 前端自动化工具推荐 要嫁就嫁程序猿——钱多话少死的早(含着热泪看完了) 【干货】超级有用的9个PHP代码片段