第三只眼:Vagrant诞生的故事

2013-10-09 杨赛  InfoQ

最近忽然从很多渠道听说到Vagrant这个项目。搞运维的同学可能早就听过甚至用过Vagrant了,这个DevOps工具能够很方便的配置开发/测试环境。按照 @麦可思哲 的话来说,“用起来很简单,作者是在virtualbox的基础上做了封装,你可以把自己的开发环境分享给任何人,他们直接`vagrant up`就能跑起来,使用Vagrantfile可以配置启动选项,例如端口转发、宿主和环境之间的共享等”。


在查阅有关这个项目的资料时,我翻到了Vagrant作者Mitchell Hashimoto在自己的Tumblr上写的一篇回顾,介绍Vagrant项目的早期开发和发展历程。这篇回顾写于2012年3月6日,Vagrant 1.0正式发布之际。当时的Hashimoto刚从大学毕业一年,而这个项目刚刚进入两周年。


今天就基于Hashimoto的这篇回顾,跟大家简单介绍一下Vagrant诞生的故事。


The Hardest, Most Rewarding Job I’ve Ever Had.


这是这篇回顾的标题。Hashimoto将Vagrant项目视为自己做过的最困难的工作,同时也是回报最高的工作。


Hashimoto在开篇说道,希望在Vagrant 1.0发布之际,深入的介绍有关自己开发这个项目过程中更加具体的故事,以及自己学习到了什么,希望能够让更多人了解到一个成功的开源项目是如何诞生的,并获得从另一个角度看开源的视角。


今天是我最自豪的日子。我发布了Vagrant的第一个稳定版本。两年前,我跟John Bender一起在学校启动了这个项目。现在,Mozilla、RackSpace、LivingSocial、Shopify、OpenStack、EventBrite和很多其他的企业都在使用Vagrant。这个项目和其背后理念能获得如此巨大的成功,我在以前根本想象不到。这中间的道路十分有趣,有高峰有低谷,我想将这个过程分享给大家。


Vagrant最初的想法起于2009年。当时,我与John Bender受雇于一家Ruby开发公司,在那里,每6到8周出一个新项目是很常见的周期。对每个新项目,我们都要重新设置一份开发环境,每一次都跟之前的环境有一点点不同。日积月累,我们对这个步骤厌烦不堪。更糟糕的是,当我们回去维护老项目的时候,我们又要把环境还原回当时的状态,这简直是噩梦。2009年的冬天,我实在受够了这一切,决心为这个问题寻找一个解决方案。


当时的我(包括现在的我)一直觉得开源是一件很浪漫的事情。Yehuda Katz和John Resig是我的偶像,他们在开源界有很高的热情和荣誉。我梦寐以求的事莫过于找到一个属于自己的“jQuery”或“Ruby on Rails”。简单来说,我迫切的希望能够创立一个东西,彻底的改变某一个领域,正如同jQuery和Rails所做到的那样。虽然我觉得Vagrant还没有达到jQuery或Ruby on Rails那样的影响力,不过当时我的确是抱着这样的想法去做它的。


2010年1月,我去找到了John Bender,讨论了一些想法,这些想法最终变成了Vagrant项目。John一眼就看到了这个想法的价值,并决定参与这个项目,我对此感到很高兴。2010年1月21日,我们俩正式开工。


我们疯狂的工作,在一周内完成了一个原型,这个原型可以启动一个允许SSH访问的虚拟机。Vagrant在初期的名称叫做“hobo”。


根据Hashimoto的描述,最初的开发进展的很顺利,现在的Vagrant大部分的核心功能在早期的几周内就已经确定。这在某种角度证明了他们一开始的想法是正确的。


有关box系统:box系统是第一个公开版本的Vagrant发布前一周才由John引入的,之前Hashimoto对0.1版本的设想只是简单地支持Ubuntu镜像。事后证明,box系统是Vagrant成功的关键要素之一。


下面的描述很有意思,描述Hashimoto对于开源项目发展潜力的思考:


2月中旬,Vagrant做好了发布准备,但我却担心这样一个来自两个无名氏的开源项目会不利于项目的传播。我决定,为了项目的成功,我们需要有超级棒的文档,以及一个吉祥物。吉祥物很重要。我也不知道是为什么,但是就我看到的项目来说,有吉祥物的项目总是更加可靠。就这样,我们的吉祥物Vince诞生了,而我在文档上足足花费了一整周的时间。这周的工作成果是至关重要的。


就这样,Vagrant 0.1.0版本在2010年3月7日正式发布,Hashimoto他们收到了很多正面的反馈。很多人立刻开始在自己的项目中使用Vagrant,这些人当中有不少就这样一直使用了下去。但是,在早期这批用户加入之后,Vagrant的用户增长呈现凝滞状态,前几个月每一个新版本的发布仅仅带来100个左右的下载。Hashimoto表示当时有点小小的受打击,觉得Vagrant这个项目可能要失败了。不过,因为他们自己每天使用Vagrant,也有其他公司每天使用Vagrant,这让他们仍然肯定了这个项目的价值,所以一直坚持继续开发。


然后,曙光到来了:


Carl Lerche看到了Vagrant。当时,Carl Lerche任职于Engine Yard,同时是Ruby on Rails的核心开发者。他曾经跟Yehuda Katz结对编程。Carl在Vagrant的IRC里面进进出出了好几个星期,提出问题,提出建议,甚至做了一些提交。几个星期后,他给我发了一条私信。私信具体讲了什么我记不清楚了,但大意是,“如果Engine Yard来资助Vagrant,你觉得如何?”我兴奋的浑身发抖。


Ruby on Rails,JRuby,Rubinius这些Ruby界知名项目背后都有Engine Yard的身影。Engine Yard的资助对于Vagrant项目而言,是极好的品牌传播。


2010年10月14日,Engine Yard宣布Vagrant成为了其OSS grant program的一份子。


这是我人生中难以忘怀的一天。我终于可以对父母说:“老爸老妈你们看!我早就说过我在电脑上不仅仅是玩而已的。”


Engine Yard的资助改变了所有的一切。这坚定了Hashimoto继续开发Vagrant的决心,也将Vagrant推入了一个引人注目的时间窗口。Hashimoto将其称之为Engine Yard效应。


Engine Yard效应直接导致的结果是,Hashimoto开始每天在Vagrant上投入8小时以上的时间,而且开始活跃的参与各种他可能宣传Vagrant的演讲场合,做了大量分享。截止到2011年3月,即Vagrant发布一周年之际,vagrantup.com网站的日均PV从200上升到了500左右。


但是在这段时间过后,Hashimoto意识到,自己太过于疲劳了。从2011年3月开始,Hashimoto在项目上投入的精力显著减少,Vagrant 0.6.0到0.7.0之间花了6个月的时间,而且这段时间内Hashimoto本人的代码贡献量达到了一个低谷期。不过,Hashimoto的个人贡献状态已经不再影响到Vagrant的继续流行。Vagrant有了一个健康的社区,开发了一系列插件,Hashimoto自己还有了个粉丝群。他从社区不断地收到tweet和邮件,向他描述他们是怎样用Vagrant解决自己的问题的。


在社区消息的鼓励下,Hashimoto又在年底逐渐回归到Vagrant的代码开发当中。2011年秋季,Hashimoto已经从学校毕业,在Kiip任全职的运维工程师,所以投入到Vagrant上的时间不再像以前那么多了。但是没有过多久,Hashimoto又经历了一次精神上的洗礼。


2011年10月,我飞越了大半个地球,到瑞典参加DevOpsDays的活动,做一个有关DevOps的演讲。这次演讲意义重大:在我开始演讲后的15秒左右,我做了一句话的自我介绍,表示我是Vagrant的创始人。我想,可能会有一些人通过这个介绍知道我是谁,可能五个或者十个吧。可是我没想到,整个会场的200多个观众仿佛被引爆了,掌声持久不息……


这就是Vagrant的故事。两个年轻人,用两年的时间,每天投入8个小时以上,双休日无休,将它打造成了一个改变了一个领域的产品。


如果时光可以倒退,我仍然会走上这条路。正如人们所说,“旅行的过程才是一切!”


我将继续前行,见证这个旅行将会把我带至何方。


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


今日专栏作者:

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


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

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

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

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

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

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

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

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

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

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

阅读原文举报