之前写过 一篇感言,就是由于读了这篇《创新在别处》而发。这部译作之后一直在持续的更新,而我每篇都有大致阅读过。可是,在2009年的最后一个月开始之际,我却无法再按照以前那样正常的继续阅读它了——因为 诞生这个译文系列的平台,已经不幸陷入被维护的状态。
 
借此转载,悼念译言君之蒙难。也希望看客们能从下面这篇文章中,提炼出自己的一些感悟——开源的精神,其实也正是我们所需要的。方方面面都是如此。
 
《创新在别处》(不完全译文,译文中部分笔误有修改)
原文作者:Ron Goldman,Richard P. Gabriel
原文标题: Innovation Happens Elsewhere
译者: 张增波
 
1. 介绍
 
在经历了上世纪90年代的广泛的思考,以及2000年早期的学到的经验之后,人们意识到商业在变化:每个公司制造和拥有其业务的每一个方面,不再有意义了。很多公司——也许是所有的公司——需要软件,很多公司创造了软件,作为运营其业务的集成部分;有一些甚至生产出软件作为其出售产品的一部分。每一个这样的公司都深深的知道生产软件不是简单的事情,创造最终可用的软件的速度很慢。对开放源码的无知的想法是某种程度的免费,而开放源码的真正机会来自于多个方向。
事实上,有如此多的理由让一个在创造软件方面有巨大投入的的公司去引入开放源码的活动,以至于可以认为那些不引入此活动的公司并不关心自己的命运。即使一个公司认为公共的(或者纯粹的,全是志愿者的)开放源码并不适合自己,在其公司内部引入开放源码也是一个聪明的决定,这仅仅因为软件开发方法论的原因。
 
开放源代码:做生意的不同方法
 
当商人第一次遇到开放源码软件的思想时,他们首先会被开源软件的免费所吸引,因为免费,人们可以获取底层源代码(开源软件),就像走在充满肥大成熟的蓝莓灌木丛一样。但是,他们很快遭到打击,因为开放源码的软件原样提供,没有保证,没有保障,也没有支持。没人正式对它负责,不知道该联系谁,不知道向谁问责。
 
同样令人困惑的,是开放源码的开发过程。谁为它付费?决定是怎么做出的?开发时间表是什么?并且,把自己开发人员做出的工作成果分享给任何人--很可能包括自己的竞争对手--的想法看起来违反了常识。
 
这些都不是他们以前做生意的方式。然而开放源码的确有意义。
 
创新在别处
 
想要创造财富的公司总是对生产力感兴趣。生产力包括高效率的创新。高效的创新不仅仅是能够发明和改进,更是能够决定发明什么和怎么改进。高生产力需要少做、多产出——一个公司需要自己的员工努力、长时间的工作来创造产品或者提供服务,一般来说,没有能够利用外部资源优势的公司赚钱。在多数情况下,这意味着一个公司想要有效的创新必须理解公司范围外的有价值的工作和天才,并且找到方法来利用这些外部资源和专家,还需要在维护自己的竞争优势的情况下。
 
直到现在,最有效的达到上述目的的方法还是收购拥有买方感兴趣的技术和产品的公司,并且把有能力维护原有产品和技术的人一并买过来,为其工作。最著名的例子是 Turbo Pascal, Borland国际的最成功产品之一,让Borland名声鹊起。
 
Turbo Pascal始于Blue Label Software (BLS) Pascal,由丹麦哥本哈根的一个叫PolyData的公司开发和销售,主要由Anders Hejlsberg编写。它是完整Pascal语言的一个子集,外加编辑器、编译器和一个运行时库。BLS Pascal后来演变成为一个完整的Pascal实现,更名为COMPAS,然后当它移植到其他平台并改进之后又改名为PolyPascal。1983年PolyData和Borland达成了一个版权协议。Borland写了一个新的编辑器和菜单系统,结果是新的产品Turbo Pascal。PolyPascal和Turbo Pascal同时在市场上销售了几年,而后来PolyPascal不再继续销售了。当Anders Hejlsberg在1987年移居美国时,他成了Borland的全职员工。
 
Borland在PolyPascal上最重要的创新之一是把之前售价为500美元的产品卖49.95美元。在当时,包含一个语言编译器的完全专业级别的开发环境要卖到3000美元左右,而Turbo Pascal的质量也能够逼近。因此,这个价格创新在市场上导致了戏剧性的结果。更重要的是,Borland不仅能够得到顶级的开发工具,也能够雇用顶级的程序语言设计者和实现者。因为没有花大价钱开发出产品,Borland能够低价卖出这些软件包,因此它卖得异乎寻常的好。在那个时候——80年代早期——几乎没有人能够想到开发出来卖钱的软件能够以合理的消费品价格出售。即使在Borland做出这个事情之后,其经验还是非常缓慢的被学习。
 
然而,Turbo Pascal故事的重要组成部分是,对PolyData和Boland来说,知识产权都被很好的定义和保护了。如果这个协议没有排他性,Borland不会签署。决定是否作为商业策略来参与开源软件,需要去找出对公司来说重要的产权和控制力。
 
短语“创新在别处”抓住了这种思想的重点:仅仅为竞争力的优点做最小的创新。在技术公司工作的人常常,或者至少有一点点,为他们相信真正有创意的人都在他们那而栽跟头。这样会导致这种公司的人太过努力的工作,对每一个相关的技术都自力更生,这通常不是最有竞争力的做法。当一个公司有这样的想法之后就具备很多优势,那就是,最多的创新是在别处发生的,他们需要把自己的精力集中起来选择外部世界的最佳创新,并找出正确的差异化特性,让自己的产品具有竞争力。
 
传统的开源软件是最接近此道的例子。互联网起源于APRAnet和很多让它跑起来的底层技术——域名解析服务(使用BIND来实现DNS),邮件传送(sendmail),以及多种TCP/IP实现——它们被置于公共领域开发,即使成为商业软件后还保持开放源代码实现。在上世纪70年代末和80年代初,在大学开放研究的环境下,为公共领域工作是很平常的事情,这样导致了互联网的产生。尽管有软件公司和出售的软件,人们通常认为软件相对于硬件是第二位的,硬件占了计算机系统的采购成本大部分。甚至到了80年代后期,软件比硬件要贵都是可笑的——不管怎么说,硬件都是真实的。今天软件占了桌面系统的绝大部分支出已经稀松平常了(译者著:这在知识产权保护得比较好的西方确实平常),这种趋势和软件市场的繁荣是一同发生的。开源保持了其早期软件生产的一贯风格,开源项目的活跃同样复制了商业软件部分的扩张,大量的开源工程是对后者的反应。
 
不管其明显的政治和哲学的倾向,开放源码和自由软件的活动为许多公司指明了一条如何利用外部创新的道路。我们这里所指的,不仅仅包括开源项目生产的软件对公司提高生产力是有用的,也包含开源活动本身以及公司参与和开启开源工程的思想。
 
利用外部社区,一个公司能够学习创新什么和如何创新。公司需要的就是按照某种规则来参与:放弃产品中日用品的部分,有技巧的保持高端价值部分。作为交换,社区一般能够获得公司产品的合作作者的身份,并且以不预期的方式创新。
 
开源不仅仅是资源那么简单,而是能够维持的商业策略。
 
进入
 
一批公司已经进入了开放源码领域,其中一些把整个商业基础放在开源,比如Redhat、VA软件和CollabNet,更多的则是在公司内部和外部同时开启了开源项目。这些把开源作为商业策略的著名大企业包括GE、SUN、IBM、苹果、惠普、SGI、Oracle、思科、Intel,以及塞班(译者注:原文在2005年发表,当时塞班还是一个独立公司)。
 
苹果是一个有意思的例子,一般认为苹果并没有拥抱开放源代码而是自从其早期以来都是高度私有化的,苹果的 OS X基于Darwin,后者是一个开源项目。正如苹果的开发者网页所说:
 
苹果的开源项目能够让开发者自定义和增强苹果的关键软件。基于开放源码模式,苹果的工程师和开源社区合作,为用户创造了更好,更快,以及更加可靠的产品。
在用户需求之下,MAC OS X的易用接口是坚若磐石的基础,在这个基础上才能做出稳定性、可靠性和性能。这个基础是操作系统的核心,人们都知道那就是Darwin。Darwin集成了若干技术,最重要的是March 3.0、基于4.4BSD(Berkeley Software Distribution 伯克利软件分发)的操作系统服务、高性能网络工具,以及多个文件系统的支持。
 
然而,这个策略中的重要部分被隐藏了。因为Darwin是Unix操作系统家族成员,很多其他的开放源码软件包正好可以在它上面工作,这样就神奇的帮助了苹果,因为我们知道Macintosh平台相对来说应用要少。即使在Unix上的开放源码应用上的收获不是每一个都可用于商业目的,它们对科学和工程的社区也是非常有吸引力的,后者很好的代表了他们的商业群体,正如linux***服务器和客户端市场一样,OS X的应用基础只能让它变得更好。
 
例如,有一个开源项目叫Fink,该项目专注于将一些开源的unix程序拿到Darwin:
Fink项目想要把Unix开源软件的整个世界带到Darwin和Mac OS X。我们修改Unix的软件让它能够在Mac OS X上编译和运行(移植它),然后让它作为联合发行版本来下载。
 
Fink项目中现在大约有3500个软件包,这些并没有完全被集成到Aqua用户界面中去,但是他们为平台提供了重要的功能。
 
理解开放源码
 
开放源码成了一种常态,那就是公开的做特定类型的开发,人们因为其通用性而能够获得其成品。软件相关的公司在21世纪初面临的最主要的问题是如何更有效的创新。创新是相对大众和容易的,但是有能力选择什么创新能带来最大的商业意义然后将其货币化是不简单的。一般来说,人们需要权衡,是在公共领域做事情,还是关起门来做事情。前者创新相对容易,因为有大量不同的人有不一样的想法;后者容易利用保密和产权法律来获得竞争优势。第一步是理解创新和创造力,以及怎么让公共场所成为好的创新场所。
 
开放源码本身看起来比较新,并以多种形式表现出神秘。为什么有人工作不计报酬?这些想法是从哪里来的?什么类型的软件是由开放源码的方法创造出来的?开放源码看起来像一群人搞起来的,但实际上是一组社区。这些社区紧密联系在一起,共享文化,词汇,习俗,实践,价值观,伦理学和道德。与开源社区一起工作的能力需要很好的理解所有这些东西,不要上来就被人看成傻瓜然后才去学习如何在选定的社区里有效的工作。从作为新手进入社区,到成长为公民,然后可能是领导者甚至受人尊敬的老者是有一个成熟的曲线的。开放源码是基于礼品经济中同样的原理,这些原里一般来说,相对于自由市场经济(倾向于过度理性的理解价值和薪酬)是更基本的或者说更原子的东西。也许把礼品经济叫做“前资本主义”更合适。
然而,人们有很多理由去拥抱开放源码,通过多种途径,从使用Linux或者Apache这样的开放源码软件,启动和运用开源项目开始。从事开放源码的理由如下:
 
获得高质量的、自由的软件,以及软件设计和开发帮助。
通过低成本的参与,让你的软件无处不在
让最终用户从事设计和测试
减少上市时间
开拓市场和做市场研究
与喜欢松散关系的伙伴一起工作
公司定位
收获创意
创造标准
相对于开源社区来说,通过普适性和定位建立品牌
引入公开的开发过程
不断改变客户和市场的看法
总能够做到先见之明
改变游戏规则
在开发过程中引入规范
改善集成
取悦更多客户
移植到一些其他人认为不重要的平台
避免习惯性锁定
改变价格实践k
与同行一起成立联合会
创建新市场
创建伦理、道德和政治宣言
 
全部是志愿者的开放源码是最纯粹的形式。像Linux和Apache这样的项目,在被大公司注意和拥抱之前,是全部志愿者形式开放源码项目的例子;大多数在SoureForge上的项目也是这样的例子。当一个公司加入开放源码项目尤其是当它启动一个开放源码项目,他们把通常不属于开放源码的专家和过程放到了桌面上。这里面有可用性专家,文档编写者,也有发布管理,质量保证,规格编写,和项目管理这些过程。这些不属于开源的过程能够在不同程度上被开源社区所执行,这必然改变了纯志愿者参与的开源项目的本质,因此这些公司需要知道开放源码是怎样工作的以便更好的将这些外来的角色和实践有效的加入进来。这是本书的中心主题。
 
对开放源码来说,一个重要的法律关键词是授权协议。这里面有一个普遍的神话,那就是开放源码的软件不被任何人拥有,因此公司参与开放源码项目必须放弃所有权和财产控制权。事实上,开放源码承认所有权并且一般是把所有权和其伴生权利放在第一位。软件授权是可以有很多级别的,因为在没有任何权利和拥有所有权利之间,存在着巨大的空隙。授权协议不仅可以让人有分发和改变源代码的权利,而且可以限制何种类型的分发和改变是允许的。作为一个扩充,授权协议建立起了开放源码项目和社区的法律基础。有很多种授权协议,包括允许封闭的社区查看源代码,包括开放源码,包括自由软件,包括放到公有领域。
 
从事开放源码项目需要理解社区,包括其文化,其风俗,其工具,以及其工作的方式。开放源码项目是分布式开发的,人们通过电子邮件、网站、以及其他书面文档来工作。有标准的版本工具,编译器,缺陷跟踪工具,以及使用它们的习惯。构建、测试、支持和发布遵循特定的方式。有一种以模块作者为中心的等级制度和精英概念,只有能力得到证明之后,权利才会扩展。
 
一般来说,启动开放源码项目的公司需要花精力和资源去创建一个足够大的和成熟的社区,让社区贡献项目,不管贡献是什么。有些开始参与开放源码的经理或者执行总裁非常奇怪,觉得开源更像是一个社会活动而不是开发活动,但这就是事实。参与开源项目尤其是启动开源项目需要按照开源的方式去理解其文化和风俗。
 
在找出开放源码的商业理由之外,公司或者项目需要评估不同的主题,以便决定以开放源码的形式是否有意义。这些主题包括你或者你的管理者是否认可开放源码的价值观,源代码是否适合并且准备好开放了,你是否拥有资源,以及你的资源预期是否合理。然后你必须准备好源代码,也让公司准备好,选择一个授权协议,创建开发计划和路线图,准备预算然后获得资金,培训开发人员,创建一个网站。除此之外,创建和维持开源社区需要一些日常工作。
 
当你开启了一个开放源码项目之后,有很多工作需要做,以便让其动力运转起来。不是把源代码扔出去然后看一群人在一起就完了。你必须设计和演进这个项目的远景,让资源为社区所用,积极主动的拉来贡献者和使用者,更新网站,让事情活跃起来,并让人们看到这个项目是活跃的,让社区成员成长,成熟,并且公开的交流。
 
为了成功,有些事你必须得做。你必须真正的理解和认可开放源码的方式。你必须开启一个恰当的和有用的项目,而不是重复已有的努力。你必须把你的代码组织好,并且选择一个好的授权协议——不管是对开放源码社区还是对你的公司。如果你看起来无法赚钱或者达到其他的商业目的,开源社区也许会觉得你不会花大力气放在这个项目上。还有你必须避免一些事情。最大的错误是你去精心的控制。公司喜欢过度控制的特点最为开放源码开放人员所不齿。想控制一个项目是很自然的,但对于开发经理或者执行官来说,开放源码的有效控制力度看起来太轻了。很多情况下,开放源码的开发过程看起来不是那么高效,因为他们基于文档交流,会导致显然的坏处,例如,局部面对面的交流来做重要决定要好得多,这样会导致公司中项目内和项目外的人紧张起来。
 
另外,社区是不会自动的发展起来的。需要培育。这个概念是很容易理解的,甚至在不理解或者欣赏每天的工作意味着什么的情况下。大多数开放源码的社区需要一个电子邮件(或者基于“拉”的)文化,以便看上去是活跃的和可以维持的。“拉”式的网站需要有吸引人的内容让人们每天去看,而一个开放源码工程未必有这种网站。
 
尽管如此,很多公司拥抱开放源码。在2002年,一项Berlecon研究院提交给欧盟委员会的研究报告(FLOSS-自由、开放源码软件的调查和研究)发现在25个世界上最大的软件公司中,包括IBM,惠普/康柏,SAP,日立,太阳微系统,有8个与开放源码有很大的关系,并且另外有3个公司从事少量的开放源码活动。这仅仅是基于这些公司发布的相关的公开声明来做的研究,因此使用开放源码的实际数量毫无疑问会更大。
 
社区
 
以开方源码的形式工作,最难学的课程之一是涉及到社区建设、政治、公民权、原则和管理的工作。一个开放源码项目包含一些共享的组件——源代码、文档等等——和邮件列表、新闻组,可能还有一些其他的社会性软件。也就是说,这里面一边是一些东西,另一边是一些人。人组成了社区,社区互相交往,形成风俗和传统,这就发展了友谊,吸引人加入,最终,简而言之,创造了一种文化。很多软件开发人员忽略了开放源码的社会属性,甚至在多种情况下对人们谈论开放源码是社会活动而感到惊讶。在第一次Jini社区大会上,一个开发人员评论说,Jini到底是技术还是社会学实践呢?
 
一个公司——而不仅仅是为了个人或者建立起来的开放源码项目——要在开放源码上成功,那么就需要认真的对待社区,并且详细的了解它。因为外面常常有人怀疑公司有一些地下的、令人讨厌的待办事项。
 
社区建设工作包含这样的活动:当它们完成时,能够培育文化,让社区成员感到舒服和有价值。必须要有些方法,让个人能够到达社区,学习它,作为新成员加入,变成高产的成员,发展成为专家,最后成为让人尊敬的长者。
 
当一些公司和一些敌意的兴趣交织在一起的时候,就出现了政治。怎样达成妥协呢?已有的位置和专家观点怎样得到尊重?这些都是政治问题。
 
公民权不仅仅包含个体的成熟过程曲线,也包括个体是否有机会感觉自己在一个与其他社区不同的社区,并且这种不同是让人感到自豪。也许这个社区有个响亮的名字(Linux),一个图标或者其他唯一性标志(一个企鹅),或者建立了风俗(每年一次社区大会)。也许社区是因为其技术专业程度或者对社会重要的贡献而闻名。
 
原则构成了任何开放源码项目的中枢。软件设计人员和开发人员绝对讲原则和伦理,因此一个公司启动的开放源码项目需要拥抱原则,并且需要明白无误的指出原则。个人启动的开源项目通常不需要显式的指出原则,因为这样的原则在开发者社区是非常普遍的。但是公司可没那么奢侈。
 
管理与如何做出社区工作的决定有关。对Linux项目来说,林纳斯.托瓦兹做很多决策,决定哪些代码进入源码树,授权另外哪些人可以做类似的决策,所以他是这个项目管理的组成部分;他自己选择他需要做这些决策。对于公司来说,管理通常需要更加明确、显然、平等和公平。当非基于公司的开源项目越来越成熟时,他们发现管理需要明确。
 
社区重要性的一个很好的例子是发明了Common Lisp的项目,该项目是首批大型网络协作设计项目之一,始于1981年。我们(RPG)中有一个人是Common Lisp项目的发起人。该项目始于1981年夏天,最初的努力是想把更古老的Lisp方言——MacLisp——的几个后裔分支统一起来。在一系列短的面对面的会议之后,大量的工作切换到了APRAnet(Internet的前身)上的电子邮件讨论这种形式。最后的感谢名单包含62个个体,他们在两年内交换了超过2000封电子邮件,有过两到三次的线下会议,起草了4份规格说明(主要是Guy L. Steele Jr. 倾其毕生精力而作)。这个小组总共交换了超过10000份电子邮件。
 
这个社区的文化是它如何工作的核心。这个社区创造了一种交互方式和一种特别的在线文化,在这种文化中,一个人的参与度和其影响力由他或者她的专长所决定。不要忘记在那个年代(1981)还几乎没有或者很少有在线社区。网络电子邮件还局限于一些大学和一些国防相关的公司。它最后证明了——我们今天已经熟知——人们在Email中,比面对现实的人,更容易傲慢和直率。很多基于网络的讨论非常活跃,它们非常好,需要被记录下。无需依赖模糊的记忆或者发白的墨水,因为所有的电子邮件都自动的存放在了一个中心服务器,因此不会丢失或者放错地方。
 
这些讨论经常是关于Common Lisp的设计的提议、讨论、反对提议。人们经常交换当前软件的或预期新语法的代码示例。所有的主题都会被社区成员快速的查看。社区新成员想要快点跟上节奏,就去归档点(查看老的邮件)。
 
这种在线的形式有缺点。最重要的是,人们无法知道其他人的面部或者肢体反应,因此无从知晓是否某些观点激怒了他们,哪些对他们是重要的。不能立即知道争吵是否偏离主题太多或者有少许的帮助。这就意味着时间被浪费了,因而需要写下精心设计的论据去做任何事情。
 
这个小组的领导者是Scott Fahlman,来自卡耐基梅隆大学。有一个内部决策小团队——Scott Fallman,Guy Steele,David Moon, Daniel Weinreb, 以及Ricard P.  Gabriel——称为五人组Quinquevirate。在这个团队周围是半官方的Common Lisp组,包括33个人,这是它的组织形式。
 
总的来说,这种文化特质中喜欢争吵的交互风格带来的好处要比起其问题多。更重要的是,专家领导团队,做决策的核心小组,优秀的规格书写天赋,无需安排会议时间的工作自由意味着结果是非常的不一般。尽管每个人各不相同甚至秉性古怪,一个拥有强大契约、私有语言、紧急处理规则和明确传统的文化形成了。
 
Common Lisp社区基于开放的原则,最初起源于一群具有MIT人工智能实验室特质的技术专家的庆祝活动。这就形成了一种文化,这种文化形成了并且还在支持着理查德.斯托曼的观点。后者是自由软件基金会——开放源码运动先驱——的创始人和Common Lisp社区的活跃分子。
 
政治位于社区的中心。社区的一个目标是把开发了新的、不同的、互相区分的Lsip语言特性的Lisp机器公司以及其他的Lisp厂商(包括硬件和软件厂商)集合起来,让他们同意一个共有的标准。如果这个目标达成了,这个标准将减小他们实现的差异。此外,在通用目的计算机上实现Lisp的软件Lisp厂商、大学教授和用户被邀请到社区,带来了他们的冲突的、不同的愿景和需求——有商业的,有科学的,有工程背景的,有仅仅是奇怪的。要指望他们所有这些人来达成一个公共的协议。这是标准的卓越政治。由于ARPA的注意和首要人物的声望,社区获得了最佳公民奖。
 
最后一点,奇怪的事情是,Common Lisp的成就和其成形的产品是书本形式的Common Lisp详细规格,但社区成员从没有为写这本书工作过。没有作品构成了社区的中心;人们一般来说并不贡献代码,文字和专业意见。所有的书面工作几乎全由Guy Steele和其他Quinquevirate成员完成。社区在那里做些决定,更像立法或者做组织协定。Common Lisp社区的新成员需要倾听和阅读电子邮件归档——在Steel的第一份草案完成之前没有作品可以用来学习和修改;并且在此后,只有Steel可以修改这份草案。每天的活动就是政治和技术的讨论,然后是特定的决策,这就意味着Common Lisp项目本质上是社区形式的。
 
2. 创新在别处
 
在21世纪的开始,高科技公司面临的最大挑战是如何高效的创新。高效的创新就是找到并投资于正确的创新,创造高利润。对很多公司来说,开放源代码就是Linux、其他一些软件系统以及如何如何把他们做成便宜的后院。然而开放源码也是鼓励和收获创新的实践和工具。开放源码是公司参与高效市场活动的一种方式,这里的高效市场活动有两个层面的意思:一是公司、软件、商标市场,一是去找做什么样的产品和产品特征。
 
像所有引擎一样,开放源代码引擎需要设计,工程化,调优以及维护。但是做这些事情需要理解机器背后的科学。这就叫“创新在别处"。
 
开放源码是公共场所
 
开放源码基本上与此相关:人们志愿的在我们称为公共场所的项目——也就是那些能带来公共利益的事情——上工作。我们所说的这种类型的公共场所由这样一些东西组成,它们的价值不会因为制造一个复制品而减少——事实上,大多数情况下制造一个复制品会增加它的价值。比如,一个小软件如果不是拿来卖钱的,那么有人复制并使用它并不会减少它的价值。假如一个软件实现了一个协作工具,那么更多的拷贝会让它变得更有价值,因为更多的人利用这个软件去协作。书面成果和知识也是这个公共场所的一部分。利用公共场所的优势是简单的,只要用公共场所中的东西——这是允许的——就可以了,但是,学习和运用对公共场所中的社区承诺的规则,能够增强这种交互,并为以下两点铺平道路:1. 把对你来说重要的工作放在公共场所中, 2. 带来志愿者多种形式的努力。
 
开放源码可不是小小的或者后院的运动。有数以万计的开放源码项目——最大但不是唯一的开放源码主机站点,Souceforge,  在2004年中期,持有80000个项目,并且拥有超过810000个注册用户。很多公司有非常强烈的兴趣去使用公共场所中的开放源码,其中一些公司甚至调整了他们内部的产品生命周期和开发方法,以适用于开放源码的天生特性。在当前技术经济低迷期,开发者和设计者不仅仅能利用开放源码项目磨练真实世界的项目技能,也在很多有用的方向上拓展专业技能。工作于开放源码项目,学习那些工具和过程,在不同的开源项目和系统中获得专业技能,很可能是有价值的:如果没什么比看别人的代码、风格更能提高你的水平,让你成为一个较佳的开发者和设计者的话。
 
公共场所能创造差异吗?
 
尽管我们所说的公共场所可以指很多其他东西,唯独这样的公共场所是比较多的,它包含了以某种版权发布的源代码,这种版权能够让很多人同时在其上工作。这种公共场所里的最著名的软件是Linux,它是一种Unix操作系统。Linux可以被看成是一种小众的技术现象——Linux在其技术领域对于某些公司很重要,却没有走进普通人的家庭,影响他们的生活。为了理解这种公共场所如何让普通人受益,我们容易研究公共场所中的其他东西,比如万维网。Web是有趣的,因为它不仅仅在公共场所——由群体的努力而创建——之中,而且它是构成公共场所基础结构的一部分。我们值得稍微研究一下Web的增长,做为理解开放源码的商业动力的开头。
 
对很多人来说,Web就是第一权威——不仅仅是普通人,就连专家都转向Web获取信息。本文作者阅读的几乎所有的科学和技术杂志都有在线版本。很多人,大多数公司和其他组织都建立了网站,并且保持更新。有些就像人们自己讲述自己的爱好和宠物那样普通和散文化,其他是精心制作的短文、艺术作品的集合,或者观点、软件的集合。当前大约有300万个不同的公共站点1 ,并且平均来说每个站点有大约450个页面,这就意味着总共有将近 15亿个网页。并且这个统计并不包含web 中的“黑色物质”,它们是存储在数据库中的信息,利用动态网页提供服务。
 
Web是基于志愿者的努力创建的——没有中央的计划,只有一组简单的协议和工具,想法是人们自己涌现出来的。Web的核心是一个叫http(超文本传输协议)的协议,这个协议可以让一个计算机通过互联网请求另一个计算机上的特定资源——通常是一个网页。这个协议(http)在若干基本的互联网协议之上工作,可以看做是其他的层次协议——例如电子邮件(smtp,简单邮件传输协议)以及ftp(文件传输协议)——的同类。在这个基础结构中,我们需要知道另外三件事情。首先,描述网页的方法不是基于某种所有权的格式。这里的选择是超文本标记语言(HTML)。起初这是一种异常简单的语言——它天生就不能够精确显示排版材料,但它是一种非常容易学习的语言。其次,定位要显示页面的方法不基于特定的计算机或者操作系统,而是统一资源定位符(URL)。第三件事情是浏览器。
 
想要找到这种社区努力的显著成绩,要点更多的在于浏览器而不是其他的组件。第一个要点是,早期的浏览器会尽其所能去显示页面,而不管它请求的页面的html描述有多么不完整。第二点,Web浏览器可以显示出他正在显示的页面的源代码。利用这个特点,业余网页设计师可以找到一个有他们所喜欢的布局的页面,然后模仿它,自己做一个。也许模仿的不够仔细,但能够容忍错误的浏览器很可能足够展示他们所要的东西。
 
有了对不完美描述页面的容忍和类似早期作者提供的早期页面的这样的(源代码)礼物,Web以人们不可预见的方式发展壮大。人们使用已经存在的站点和公开可见的源代码,(有差别的)复制网页设计并且放上自己的内容。人们分享爱好和专业技能。有特殊兴趣的组织教育了公众,俱乐部也通过他们的活动传播了兴趣。科学家和工程师开始使用Web来宣传他们的研究成果。学期论文,专题论文和极度狂热的共同兴趣出现在了Web上,以至于到2003年,可以毫不夸张的说,人类所拥有的知识在Web上没有死角——至少都是被提到过。随着搜索引擎的到来,现在很容易的找到这些信息。过去,人们需要费力劳神去找仅仅在某本书上模糊的一行记忆中存在的诗的名字和作者然后告诉你,但是现在任何人都可以在5分中内回答此类问题,只要给他一个浏览器和互联网连接。
 
因为个体志愿者的志愿服务,这种增长成了主导。今天,很多情况下人们付费让他们的网站上线——换句话说,他们付费给出东西。Web已经被用做独立的新闻源,并且有无数的例子表明,基于Web的活动已经改变了历史的路线。几乎没有人怀疑Web改变了人们工作和交流的方式。博客(简单的日志机制)很繁荣,聚集了足够的力量去影响政治;维基(用户可扩展的网站)正在被用于构建基础字典和百科全书。
 
公共场所和软件
 
开放源码软件——以及与其紧密关联的自由软件——正越来越多的被主流的计算——在公司的IT部门以及消费者的站点——所使用。开放源码正因为Linux操作系统和Apache Web服务器而变得普通。另外,还有开放源码的数据库、编译器、窗口系统、编程语言、文本编辑器、软件开发环境、(提高)生产力(的)套件,以及你能想到的任何东西。Apache Web服务器是当前公共站点使用最多的Web服务器之一。在商业环境中使用Linux操作系统的现象正迅速蔓延,Linux已经准备好成为优势系统的那一天。
 
在早期先行者之外,很多公司正从事越来越多的开放源码以及类似开放源码的项目,尤其是那些构造平台、需要大量使用的公司。此外,很多公司为他们内部的项目引入了开放源码,尤其是那些在内部的实用工具上的工作——那些工具在公司内部共享是有意义的。
 
创新在别处
 
创新在每一个地方都会发生,只不过,别的地方比这里多得多。正如它听上去的一样傻,这是一个残酷的事实:不管你相信你的组织有多么的聪明、有创造力、有创新能力,在组织外面比内部有更多的聪明、有创造力、有创新能力的人。更重要的是,大多数别处的人并不关心在你的领域做产品。而已经在实际工作中使用了某一个产品的客户显然处于有利的位置,能够对那款产品该如何发展提供建议。如果这样的用户不能给出准确的建议,他们使用这款产品的方式能够给出如何改进它的暗示。请记住,创新来自于启发,而启发并不关心什么它启发了什么。就像日落时海边的棕榈树在显然没有任何思考的情况下能够启发一个诗人创造杰作一样,一个用户使用其产品或者说提到了他的使用环境,能够启发一个有准备的设计师定义主要的产品方向。
 
正如亨利.斯布洛指出的,研发开销的总体情况暗示,在某个特定的技术领域有着实际垄断地位的公司里,找到有创意的人变得越来越不寻常了。并不是所有的聪明人都为你工作,你不可能负担得起亲自做所有的创新,并且你不能在内部提供足够的启发,去找到雷人的新产品思路。
 
现在游戏越来越多的是关于连接起来而不是关于支配。你可能做的最糟糕的事情是让“创新在别处”变成了“岁入在别处”。
 
为了成功,公司要找出方法,利用外部的创新,并且通过许可协议和精心选择的礼物的结合,变成分布式创新网的一部分。尽管礼物的概念一开始对于自由市场的资本主义来说看起来并不合适,而当我们想到与他人协作区创建公共的类似共产主义的基础设施时,它就也许合适了。如果它在那种情况下有商业意义,那么也许它在其他情况下也有商业意义。
 
这就是开放源码的全部:在软件领域利用创新的引擎。
 
3. 什么是开放源码?
 
目前已存在很大的开放源码的社区,并且建立起了实践和文化。公司和其他实体想要开启或者加入已有的开放源码项目,就需要理解这个大社区的基本的规则和既定的实践,因为术语“开放源码”意味着必须达到某种预期,或至少需要作出解释。把这概念化的一个好方法是,把开放源码社区想象成拥有自己文化的外国,每一个开放源码项目都在那个国家。尽管也许有可能在某个项目中强加不同的文化规则,而更有可能的是引入现存的风俗要容易。因此,按照现在的样子去理解开放源码对于成功有决定性意义。
 
对于是什么促成的的开放源码,有很多说法。基本想法很简单:通过让一个软件的源码对所有人开放,任何程序员都可以修改它,以便更好的满足他或者她的需求,并重新分发改进的版本给其他用户。通过在一起工作,一个拥有用户和开发者的社区能够改进软件的功能和质量。
 
因此,成为开源软件的必须条件是,任何人都能获得并且修改源代码,并且他们能够自由的重新分发他们创造的衍生作品。不同的授权协议有些不同,有的规定衍生作品也必须开放源码,有的允许衍生作品私有。
 
在本书的后面部分,我们也会讨论某些情况,它们并不符合开放源码的全部定义,但是包含一些源码级别的协作开发,比如Java。
 
简述开放源码
 
实际上,一个典型的开放源码项目使用web或者其他互联网站点作为一个仓库,存储源代码、文件、讨论、设计文档,Bug和主题列表,以及其他与项目相关的人造物。一个特定的人或者组织是源代码的版权所有人(至少在开始的时候),并且这个所有人允许其他个体和其他组织修改在某个版本控制系统例如CVS(Concurent Version System)中的源代码。定期自动生产构建版本,通常有很多不同的稳定级别、编译阶段以及多个平台的预构建版本,任何人都可以下载试用。
 
尽管本质上,源代码的拥有者对项目有完全的控制力,他们通常会征集社区的关于其发展方向的建议。有时,贡献者会保留他们自己贡献部分的版权,通过使用与项目相同或者兼容的授权方式,另一些时候,贡献者会把版权交给项目的所有人。
拥有权和协议授权有着重要的区别。尽管通过协议授权的方式广泛的授予了相当自由的权利,让外部团体在源码方面可以做很多事情,源码还是被版权所有者拥有,对于源码他们可以做想做的任何事情,包括出售,授与其他的协议,改变其开发的方向。
 
一个项目常常会划分为多个模块,这些模块可以被看成是逻辑的或者概念的整体,并且为每一个模块分配了一个模块所有者。模块所有者负责检查提议的源代码修改,决定是否采纳它们。模块所有者也可以授予他或者她信任的开发者检入(译注:指的是向代码仓库提交修改)的权限,这样他们也能够修改官方的源代码。在很多开放源码项目中,整个项目所有者以及模块所有者是主要的贡献者,而其他人只是贡献了工作的一小部分。一般来说,在使用中调试是庞大社区的重要贡献来源。
 
有些开放源码项目,特别是那些公司拥有源代码的项目,建立了一种官方机制,保证社区在决策中拥有话语权,也就让这个游戏的范围比其他情况要大。
 
快速浏览一下开放源码的历史
 
1984年,理查德.斯托曼建立了自由软件基金会1并且开启了GNU工程(GNU是"GNU Not Unx"的缩写)。他这样做是对他看见的这个现象的反应:MIT的人工智能实验室的软件共享社区的瓦解,每个人都离开那里去公司创造私有软件。斯托曼创造了自由软件这个术语表达了他的哲学:程序员应该被允许访问源代码,因此能够修改它满足他们的需要。他开发了GNU一般公开协议(GPL),保证他总是可以查看和修改任何软件的源代码,那些源代码是他以前写的,并伴随着任何其他人做的修改。很多重要的Unix工具和实用程序作为GNU工程的一部分已经被开发出来了,包括GNU GCC编译器以及GNU Emacs。
 
1989年,加州大学伯克利分校发布了其组网代码以及其支持工具,称为网络版本1,第一个可自由重新发布的伯克利软件分发(BSD)。此后1991年网络版本2紧随其后,包含了几乎所有的BSD Unix的源代码(仅仅缺少6个文件)。
 
1991年林纳斯.托瓦兹在GNU GPL协议下开始了Linux内核的工作,并且在1992年左右与不是非常完整的GNU系统合在一起,产生了一个完全自由的操作系统。1995年红帽软件成立,开始出售CD-ROM,为红帽Linux的用户提供支持和服务。
 
1995年一些网站管理员创建了Apache项目,基于NCSA web服务器。Apache 1.0 在当年晚些时候发布。基于2004年Netcraft的关于web服务器的调查,Apache web服务器比所有其他的web服务器加起来的使用数量还要多,占有web服务器67%的市场。
 
1998年网景公司声称他们将发布其导航者浏览器的源代码,3个月之后他们履行了诺言。作为对网景公司声明的部分反应,一组自由软件社区的领袖人物,包括山姆.奥克曼,约翰."麦道格".霍尔,艾瑞克.雷蒙德,以及拉瑞.奥古斯丁,见面讨论了如何更好的推广自有软件的理念。他们决定使用术语开放源码,并且与其他人一起工作创建了开放源码定义2,基于布鲁斯.佩伦斯写的Debian自由软件指导。他们创建了一个组织,开放源码促进会,为开放源码的思想布道并认证授权协议是否是真正的开放源码。在那些支持自由软件和那些喜欢开放源码的人之间有一贯的不安,因为不同的哲学观点。
 
开放源码的更多细节,可以在线获得,并且在这些书里找到,比如由克瑞斯.狄博娜,山姆.奥克曼,马克.斯坦编辑的开放源码,来自开发源码革命的声音或者格里恩.莫迪写的叛逆代码:Linux和开发源码革命内幕。
 
混合型开放源码
 
在纯粹的开发源码项目中,所有的工作人员都是志愿者。很少有需要遵守的正式的过程或者正式编写的规格说明,如果有的话。这个小组可能有也可能没有可用性专家,文档编写者,测试者,或者任何意义上的项目管理人员。在某些环境下,这种形式的开放源码被称为“全志愿者开放源码”。基本上,看得见的就是小组。
 
当公司开启开放源码项目,这些项目常常是公司推动的战略目的和目标的一部分(或者全部)。因为很多公司使用一种更加传统或者习惯的开发过程,这样的公司开启开放源码项目的时候很容易想用他们传统的工具以及内部专家来参与开放源码项目。当这成为事实时,我们叫它“混合型开放源码项目”。
 
例如,GE开启了其可视化工具箱开放源码项目3,但是他们想要建立特别重视测试和质量的文化价值。以极限编程的一些思想为基础,他们创立了一个分布式的、自动化的测试系统,每晚对白天提交到项目中的修改自动测试。
 
另外一个例子是NetBeans,开始的时候Sun分配了人机交互(HCI)专家,文档编写者,产品经理,发布工程师,以及质量保证人员在其上工作。这些人接受了培训,培训内容是开放源码是什么样子的,他们必须引入什么样的方法,但尽管如此,Sun内部的其他职能和某些方法在这个项目中也被引入了。
 
这本书大量的篇幅是关于混合型开放源码的。