前面的嘻话里我讲了一些关于开源软件的思考。有一个问题总是萦绕在脑海,也总是有人问起,好像我还没有回答好。那就是,如果开源不以赚钱为目的,为什么公司还趋之若鹜?如果赚了钱,是否还会回馈到社区助其继续成长?
以前我经常举的一个经典例子是”Visual Studio“和”Eclipse“在集成开发环境(IDE)的牛耳之争。
当年,在这个领域领先的软件公司是不愿意免费贡献源代码的。可是2001年11月左右IBM大笔一挥,推出Eclipse社团, 整合了Borland,Together Soft,以及Rational Software等等软件工具开发商的同仁一起推广。
当时大众,包括我在内,得到的印象是,IBM资助了价值4000万美元的源代码,免费提供给软件开发人员使用,以便打破微软在Visual Studio IDE方面事实上的垄断。
当时,Eclipse的名字叫得十分响亮,让人联想到日月食,以至于之后的产品系列有很多命名为太阳系的星球(Europa,Jupiter等等) (参见前面关于程序命名之烦恼的嘻话,咱们学着点!)
由于Eclipse SDK开源,衍生出来的产品也纷纷开源,而且一致地接受Eclipse Public License(EPL)而不是GNU自由软件的GPL,这是因为从商业的角度考虑,IBM的律师把软件授权书字斟句酌,保证不让相关开发商的利益受损。(关于EPL我以后还有一些故事可以讲,但在这里因为不是重点就先略过了)。
在2007年前后,响应Tao Xie(谢涛)和Ahmed Hassan等同事的号召,我们也开始研究软件资料挖掘。
因为对Eclipse相对比较了解,我专门搜集了它6年来演化的源代码,对它的体系结构和模块关系等方面的变化做了一些有益的探索(Wermelinger et al., 2008), 从技术上发现一些有意思的现象。
比如Eclipse体系结构演化从1.0开始就存在一个恒古不变的核心,以不变应万变,利用插件的可扩展性应对了不少需求的可变性,等等(Wermelinger et al., 2009; 2011)。
这里你可以清楚地看到,尽管时时增加和减少插件,Eclipse SDK原始1.0版本的30来个插件中有26个自始至终贯穿所有后续版本的SDK。
进一步分析其错误报告人之间的社交网络及其抽象概念关系,我们发现Eclipse的开发团队也分散在全球各地。
其中多伦多和苏黎世的两个IBM团队为主力,分别维护不同的核心插件(比如加拿大团队@ca.ibm.com专注于PLATFORM界面,瑞士团队@ch.ibm.com专注于Java Development Tool (JDT)界面)。
而个别有影响的成员,比如Erich Gamma@ch.ibm.com(Design Pattern一书的作者)则横跨多个插件项目,作为协调人为他们穿针引线,等等有趣的现象,参见(Wermelinger et al, 2009)。
回到前面的话题,驱动IBM干这么一件大事背后的商业动机究竟是什么呢?Rational Software的Cernosek在回顾Eclipse简短历史的文字里透露了实话(Cernosek,2005)。
原来,当年IBM意识到自己的开发工具已经落伍于竞争对手微软的Visual Studio了。与其逐渐丧失竞争优势,被对手把市场蚕食干净,不如壮士断腕,割血止损。而开源的目的,用一句话,In fact the name “Eclipse” actually means “to eclipse Visual Studio.” 翻译过来就是,Eclipse取名的来由是为了“跳过”Visual Studio,弯道超车。这里的名词Eclipse又可以作为动词用,一语双关!
IBM不愧是商业的老手!在向竞争对手进攻的时候,不忘了笼络一个社团,组织友军,借刀杀人!说句难听的话,开源社区有点被当枪使了。
还好经过多年的发展,Eclipse已经茁壮成长,脱离了纯粹的商业目的。
而微软在这个过程中也表现得很好,处变不惊。事实上,微软还专门为Eclipse开发了不少插件,来引导软件开发人员更方便地进入其阵营。Eclipse的C#语言开发工具也用不少来自于微软的贡献。
时过境迁,今天倒过来看,最后做到你中有我,我中有你,化敌为友了。
对于要不要支持开源软件开发,尤其是在公司的朋友们千万不要过于纠结于一时的利益,看问题要从长计议!
参看文献
Gary Cernosek (2005). A brief history of Eclipse. http://www.ibm.com/developerworks/rational/library/nov05/cernosek/
Michel Wermelinger, Yijun Yu, Angela Lozano, Andrea Capiluppi: Assessing architectural evolution: a case study. Empirical Software Engineering 16(5): 623-666 (2011)
Michel Wermelinger, Yijun Yu, Markus Strohmaier: Using formal concept analysis to construct and visualise hierarchies of socio-technical relations. ICSE Companion 2009: 327-330。
Michel Wermelinger, Yijun Yu: Some Issues in the 'Archaeology' of Software Evolution. GTTSE 2009: 426-445
Wermelinger, Michel; Yu, Yijun and Lozano Rodriguez, Angela (2008). Design Principles in Architectural Evolution: a Case Study. In: Proceedings of the 24th IEEE International Conference on Software Maintenance, 28 Sept - 4 Oct 2008, Beijing, China, IEEE, pp. 396–405.
Michel Wermelinger and Yijun Yu. 2008. Analyzing the evolution of eclipse plugins. In Proceedings of the 2008 international working conference on Mining software repositories (MSR '08). ACM, New York, NY, USA, 133-136.
最后忘了说,这篇小文也是我的“软件行业三十六计”系列嘻话之三:
“借刀杀人是兵法三十六計的第三計,比喻不是透過自己,而是假借別人的手去害人。
原文為:「敌已明,友未定。引友杀敌,不自出力,以《损》推演。」此计的含义是借用一方的力量来消灭另一方的力量。这个计谋經常被使用与演义,历史上有很多与这个成语相关的故事和典故。即使在今天,很多非常吸引人的,高潮迭起的电影也是贯穿着这样的情节。”