Cygnus成立于1989年,根据Forbes杂志1998年8月的调查,它是第一家而且是当时最大的一家开源商业公司。Cygnus已经完成了它的主要产品——GNUPro Developers Kit,这既是一流的编译器产品,也是嵌入式软件工具市场上一流的调试器产品。Cygnus的客户有世界上最大的微处理器公司,也有一流的消费类电器公司、Internet公司、电信公司、办公自动化公司、联网公司、航空公司和汽车公司。公司的总部设在加州的Sunnyvale,在佐治亚州的亚特兰大、麻省的波士顿、英国的剑桥、日本的东京、加拿大的多伦多设有办公室,从澳大利亚到俄勒冈都有远程工作的雇员。Cygnus是在嵌入式软件工业领域最大的私人公司,它比两家相应的上市公司都大,占领了市场的三分之一的份额。自从1992年以来,CAGR超过了65%,Cygnus已经连续三年被San Jose Business Journal列为前十家成长最快的公司。现在公司已经进入软件业前500强(按照公司全球的软件业务营业额排名)。

在这篇文章中,我将描述开源模式,这一模式为我们的业务提供了蓝图。我还要说明我们将怎样修订和加强这一模式。

在1989年11月13日前,我们的公司没有业务,但是在那一天,我们终于收到了来自加州工商管理局的信件,通知说我们的应用程序得到了批准。我们可以存入6000美元作为启动资本,并且以“Cygnus Support”的名义开展公司的业务。这是我们期盼了两年的最终结果,而且它启动了后来发展到今天的航程,一晃就是近十年。

这一观点开始时是够无辜的。我的爸爸曾经告诉我:“如果你要读一本书,一定要从头读到尾。”与大多数父亲般的忠告一样,我只是到了事情落到我身上后才开始听进去。在1987年,我对原来的工作开始感到厌烦,并且对GNU软件发生了兴趣。我决定从头到尾地阅读由Richard Stallman自己出版的著作GNU Emacs Manual。(这一本书之所以由他自己出版,原因在于当时没有一家自认为体面的出版商愿意出版一本书,来鼓励人们自由地合法拷贝这本著作的内容。实际上,即使在今天,仍然很难让一些出版商接受这-观点。)

Emacs是一个奇妙的程序。它不仅仅是一个文本编辑器,它已经被很多人定制用来阅读和回复电子邮件,阅读和发送新闻组的信件,启动UNIX的外壳,运行编译过程,排除结果程序中的错误,它甚至还容许你与驱动它工作的LISP解释器进行交互。具有创造精神的用户(或者具有类似精神而没有耐心的黑客)已经为它增加了数量众多的特性,例如“doctor”模式(一种Rogerian心理分析程序,是受到John McCarthy创作的ELIZA程序的启发而编写的);“dissociated-press”,它能将难以阅读的东西拼凑出你想要的文字来;还有一个程序可以在文本屏幕上模仿“河内塔”的方案。这一切太博大精深了,它驱使我想阅读GNU Emacs Manual和GNU Emacs的源代码,以便学到更多的东西。

这本书的最后一章是“GNU宣言”,作者的观念在我阅读整本书后一直浮现在我的脑海中,而且我不断对自己唠叨的问题:为什么这样优秀的程序成了自由可重发行的软件(也就是,开源软件)?Stallman回答了这一大家都关心的问题:

为什么我必须编写GNU?

我认为金科玉律应该是:如果我喜欢一个程序,我必须与其他喜欢它的人一起共享它。软件销售商想分割用户并统治他们,让每一个用户同意不与其他人共享软件。我拒绝以这样的方式破坏与其他用户的团结。

Stallman的宣言中还有多得多的内容,它的篇幅较长,我在这里就不引述了。你可以对此持有异议,说这份宣言像是社会主义者的战斗檄文,但是我看到了一些与众不同的东西。我在它的字里行间看出一种事业的计划。这一想法的出发点很简单:开源软件将联合全世界程序员的努力,而且根据这些软件提供商业服务的公司(定制、增强、清除bug、支持)可以根据大的经营规模,使这一种新的软件形成名牌来聚积资本。

自由软件基金会的令人耳目一新的软件不只Emacs一种。当时有名的软件还有GDB。Stallman之所以要编写这种软件,是因为DEC(Digital Equipment Corporation,现在已经成了Compaq的一部分)和Sun Microsystems的调试器的功能还达不到Emacs所要求的除错功能的复杂度。GDB不仅能处理大的任务,而且处理方式优美,程序员可以利用命令和扩展的包恰到好处地完成他们想做的事情。由于GDB是开源软件,程序员开始给它增加了更多的扩展包,使得GDB功能更加强大。这是在商业的软件产品中不存在的一种可扩充性。

真正的突破出现在1987年6月,Stallman当时推出了GNU C编译器(1.0版本)。我立即从网络上下载了它,并且利用我从Emacs和GDB中学到的所有技巧迅速地学会了它的110000行代码。在第一版中,Stallman的编译器支持两个平台:VAX和新的Sun3工作站。在这两个平台上,GCC生成的代码比相应平台供货商提供的编译器产生的代码更好。两个星期后,我将GCC移植到了一个新的微处理器上,也就是国家半导体公司(National Semiconductor)的32032芯片,结果是编译效率比National Semiconductor提供的专有编译器要快20%。又花了两个星期的时间,将这一差距扩大到了40%。

以前经常有人说,National Semiconductor的芯片在市场上站不住脚而败出的原因是,它将生产战略定位在1MIPS的芯片上,并且拿它与Motorola的68020竞争。但是当它推出时,它的处理速度在应用程序测试时速度标定在0.75MIPS,所以对于National Semiconductor芯片的运算速度可以通过软件进行大幅度提高:140%*0.75MIPS=1.05MIPS。真不知道National Semiconductor蹩脚的编译器价值体现在何处?

编译器、调试器和编辑器这三样东西是程序员每天在编程工作中都必须打交道的。在这种级别上,GCC、GDB和Emacs比专有版权的竞争者好出这样一大截,我简直不能想象,如果用这三种东西去替代相应的专有版权软件,不知能节省多少钱,这三样东西不仅仅是货真价实,而且的确是性能超群。

现在,再从GNU宣言中摘录部分内容:

想为工作付钱并没有什么错,有人想寻求最大限度地增加自己的收入,这本身也无可指责。但是如果这些行为是具有破坏性的话,那就是错的。但是今天软件市场上的通行做法却就是建立在这些破坏性的行为上。

通过限制一个程序的使用,并从用户身上来敛财富就是破坏性的,因为这些限制降低了程序自身的价值。降低了程序的用途。当对选择的自由实施限制时,其有害的结果就是破坏性的。

一个好的公民不需要利用这样的破坏而变得交加富有,如果按照这一道理,人人都这样做的话,那么我们每一个人都会因为相互之间搞破坏而变得更加贫穷。

虽然表面上好像是危言耸听,但是GNU宣言是一份极具理性的文件。它解剖了软件的本质、编程的本质、学术研究的伟大传统,并且总结了无论金钱的影响力如何大,但是在让你自由地共享信息时,伦理观念和道德价值仍然可以凌驾于其上。我得到了一个不同的结论,Stallman和我经常就此争论,即使用、发行、修改软件的自由将任伺试图限制该自由的模式。它将不会因为伦理的原因而盛行,而是因为竞争、市场驱动的原因。

首先,我试图让我的争论使Stallman接受并改变他的观点:从好的方面说,我将解释共享自由会以更低的成本、通过更加开放的标准等达到更大的经营规模,以诱发更加伟大的革新。而人们异口同声地说:“这是一个伟大的主意,但是它实现不了,因为没有人愿意为自由软件付钱。”在两年的时间里,我润色了我的修辞,提炼了我的争论要点,并且将我的观点散播给愿意付钱给我全球满天飞的人,我并没有听到有人说“这是一个伟大的主意,但是......”因此我得出了我的第二个:如果每一个人都认为这是一个好的主意,那它可能真的是一个好的主意,而且如果没有人认为它能可行的话,那么我将没有任何竞争对手!

-F=-MA

——艾撒克·牛顿

你永远不可能在物理学教材中看到这样一来解释牛顿的力学定律,但是单从数学的角度看,它与“F=ma"是等价的。这一观察告诉我,如果你从上面向下观察假设的话,即使你的结果是令人吃惊的,你仍然可以保持等价关系的存在。我相信为开源软件提供商业支持就是一种看起来不可能的事业,因为人们看到了负号时感到很吃惊,但是他们忘记了平衡左右两边并且消除它们。

机不可失,时不我待。

——维克多·雨果

在我放弃在斯坦福大学攻读博士学位开始经商之前,我要回答最后一个(而且非常之富于假设性的)问题。假设我突然间成了暴发户,有足够的钱去购买任何专有版权的技术并且围绕那种技术创建自己的事业。我考虑了Sun的技术、Digital的技术,还有其他一些我所知道的技术。在有其他人想围绕GNU建立他们的事业将我排除在外之前,我需要花多长时间才能让我的技术获得成功呢?我能否收回我的初始投资呢?当我意识到那些专有版权的技术与开源软件相比处在一个非常不利的位置时,我感到实现这一创意的机会成熟了。

理论与实践的区别在理论上很小,但是实际上,实践离理论的确非常远。

——无名氏

在这一节中,我将详细地描述在开源软件生意模式之后的理论,和我们怎样使这一理论可行,并转化为实践。

让我们从一些著名的观察结果开始吧:

自由市场是自组织的,它容许最有效率地使用资源而最大限度地创造价值。

——亚当·斯密

信息,无论创造它多么昂贵,都可以被复制和共享,而且成本极低,或者根本不用花钱。

——托马斯·杰弗逊

自由市场经济的概念是非常广泛的,每年颁发诺贝尔经济学奖时,我总是开玩笑说,得奖的经济学家是最会解释亚当·史密斯的理论的。但是这一玩笑的背后隐藏着真理的实质:市场上存在着人们没有接触的无限经济潜力,等待着人们利用一个更加真正的自由市场系统去开发软件。

在亚当·史密斯的年代,自由市场经济非常盛行,你可以将它应用到旅行中,或者与人的交往中,但是更大尺度上的买卖,特别同家与国家之间的贸易还是受到严格管制的。当大量的商人不再迷于流行的基于版税的系统时,他们会起来反抗并创造出一个新的政府,这种新的政府比以往的任何政府对他们的事务干涉更少。事实上,美国政府的宪法就是建立在基于这种观点和体系所提供的自由之上的,而自由似乎再一次在今天的全球经济化和政治领域中成为一切重要事务和行动的出发点。什么东西使自由具有如此强大的力量呢?是什么使自由对经济发展起这样大的作用呢?我们将简要地回答这些问题。

当你利用一个数字理解一件事情时错得越多,那么那个数字的价值就越大。

——开尔文勋爵

显然,当我们讨论1999年程序员用到的工具时,专有版权的软件就是处在这样一种凄凉的状态中。首先,那些工具的特性出厂时是怎样就是怎样,你没有办法改变它。其次,每当一种特性出现时,经常伴随着内置的种种限制,一旦你想从事的工作开始变得复杂时,这一些限制就开始暴露出来了。第三,专有软件供货商的技术支持简直糟糕透顶,除非你向他们购买了大量的软件,或者更新成为一个非常大的站点软件使用许可证,你根本享受不到技术支持的权利。在遇到这些内在的限制时,你是很不幸的。最后,每一个专有软件供货商都开发了他们自己的专有软件的扩充软件包,所以,你在使用他们的某个平台时,需要购买数不清的特性。这一点你在刚开始时是觉察不到的,但是到后来却非常明显,你被牢牢地绑在了他们的平台上,根无法解脱。总而言之,有一点是明白无误的,无论自由市场经济有多么多的优点,但是这些优点却在软件市场上根本体现不出来。你对专有软件模式形成的市场研究越多,你就会发现你对自由市场的研究越有价值。

今天与以前一样,自由市场经济生活在专有软件公司砌成的高墙内(这些公司利用了高水平的工程师和生产小组高效率地码起了这一层层的高墙)。在他们的专有高墙之外,使用和发行这些软件受到了许可证合同、专利和商业机密的严格约束。人们甚至只能这样想,在微观的水平上(更不用说在宏观的水平上),实施自由可能会丢失效率。如果你想创建一个公司准备在源代码水平上为用户提供技术支持,那简直是异想天开。

发明是1%的灵感加上99%的勤奋。

——托马斯·爱迪生

某家软件公司的过分简单的观点是:一旦你创造一种人们想购买的软件,那么印制这些软件的拷贝而且把它当作商品发行销售的行为就与印制钞票毫无二致。货物本身的成本是可以忽略不计的,而利润之高是几乎是令人无限满意的。我想,在八十年代软件业之所以落到如此山穷水尽的地步,一个原因是由于当时的人们太专注去完善印制钞票的抽象模式了,而根本没有关心一旦人们开始使用这些钞票时会发生什么后果。对软件提供技术支持被看作是在软件产品制造过程中,产品本身出现了-些缺陷。当时流行的观点是,对软件技术支持投资额度减低得越小,那么就可以使利润最大化。

这不仅仅让用户感到沮丧,而且对于软件本身也是很坏的一件事。一些很容易开发的特性,经常由于“不符合我们的战略部署”而被忘却。有些特性本来是可以由用户自己动手开发完成的,但是由于用户没有源代码,所以无从下手,往往只能将自己的希望束之高阁而愤愤不平。最后,只是由供货商(和他们的市场营销部门)——而不是用户——来定义竞争领域,并塞给用户种种无用但是“容易表现”(easy-to-express)的特性。自由市场经济已经被从上到下被翻了个儿,给颠覆了。

没有人能够垄断真理。

——无名氏

普通法是合法的代码,是对所有人都是平等地公开的。

——Michael Tiemann

有了好的理论去解释怎样将世界改造得更好当然是很好的。但是将这些理论付诸实践,并且在实践中证明这些理论能够自圆其说则完全是另一回事情。虽然在软件产品的世界里,基于服务的公司很少见,但是我们可以考察其他领域的许多情形。

首先让我们来看美国法律(或者是英国的法律)的实际情况。普通能对于所有想使用它的人都是公开得到的。某个人在争论中不需要什么许可证就可以利用普通法对Roe与Wade之间的是非进行裁定。实际情况也的确如此,一旦作出了某个裁定,无论裁定的开销多大,所有的人都可以沿用这一裁定。正是因为有了所有这种自由,律师这个高度昂贵的职业才得以建立起来。有没有一部实践法在没有最初的专有代码的前提下,具有这样(大)的价值呢?

人们不只是认为检查法的价值那么高。人们还认为那种检查积累的价值也是非常高的。如果你雇佣了一位好的律师,而且在检查的过程中,他作出了一个对你有利的裁定,那么这一判例将成为新的法律的一部分。正义不是瞎子,它是历史的全部。

当我们再来考虑用开源软件来创建和维护标准时,我们可以找到某种程度的可比性。创建一种标准并且让它正常工作是非常昂贵的。但是没有标准时,或者一个标准是假的并且要去维护它时,那个花费将会高昂得多。如果能让优秀的人才设计的软件,而且这种软件能成为明天的标准的先例,那将是一项具有巨大价值的事业。我们一开始就相信人们会理解这一价值命题,而且他们会衡量这一机会的价值,并且付钱给我们去创造高质量的、开源的程序,而且这些程序将会成为软件世界里“实际上”的标准。

Cygnus的起步期

找到了理论之后,接下来就是将理论转化为现实了。如果你了解生意的所有细节的话,那么创造一种基于服务的生意是相当容易的。遗憾的是,在我们Cygnus的三个创始人当中,没有任何一个人以前有过经商的经验。

敢于犯新的错误。

——EstherDyson

我们找来了一本Nolo Press出版的书,-边参考它,一边拟定了公司发起书、制定了公司章程、确定了我们的宗旨,并填写了其他各种申请表格。

Cygnus——我们让你能负担得起自由软件。

——John Gilmore

为了与混乱作斗争,我们努力使基本的生意假设尽可能地简单:我们将提供为接受过检验的软件提供接受过检验的技术支持,我们将适度经营以便赢利。按照我们的估计,如果我们公司内部的员工能够提供2到4倍的支持质量和开发能力,那么我们就可以向市场在现有价格的1/2到1/4向市场提供这些服务。我们没有重视其他开源软件,因为那些东西的市场销售前景还很模糊。我们集中精力向市场以更低的价格提供更好的工具,随着合同一个接着一个而来,我们学会了怎样做好这件事。

我们在1990年2月与客户签署了第一份合同,到当年4月底时,我们已经得到了价值150000美元的合同。在当年5月时,我们向50家我们认为会对我们的技术支持感兴趣的客户发去了说明书。6月份,又向其他100家客户寄去了说明书。突然间,生意来了。第一年底,我们得到了价值725000美元的技术支持合同和开发合同,而且无论我们朝哪里看,到处都是机会。

虽然这一切都不错,但是也给我们带来了一些严重的问题。如果我们利用公司内部的资源,以1/2到1/4的价格销售我们的服务,那么我们将要签定总额为一百五十万到三百万美元的合同,并且提供我们的服务。但是我们整个公司当时只有五位成员:一位销售人员、一个兼职的研究生,以及我们三个公司发起人,我们这几个人当时什么都做,连接以太网线、打印公司信函擡头、为信封贴标签......在公司的规模没有达到一定的程度时,我们还哪里有精力去干别的?按照当时的增长速度,我们还能找到多少可以夜以继日的工作狂呢?天晓得,因为我们没有任何财务模式和操作模式。

GNUPro

我们决定,在我们精疲力尽这一事实成为真正的问题之前,我们需要达到一定的经营规模。并且我们按照工程师的思考习惯决定,最快达到这些经营规模的办法是不留情面地将精力集中在最小的开源技术上,以便我们能够合理地将它们作为一个有用的方案销售出去。我们断定,焦点越小,形成一些概念上的规模就越容易。

首先建立坚固的根据地。

——《孙子兵法》

我们忍痛割爱抛弃了许多计划,包括支持外壳工具、文件工具、拥代码控制软件的计划,甚至为Intel386编写一个自由的内核的计划。我们最终决定销售GNU编译器和调试器,将它们精简后作为一个整体打包成一个产品。当时已经有成打的公司销售第三方的32位编译器,而且在一些公司内部(例如Sun,HP,IBM等)还有成打的编译器开发小组。当我们统计这些竞争对手之后,我们感到,如果我们要在32位的编译器市场上有所作为的话,我们必须足够地大,以便我们一开始就能做出其他预想的漂亮工具,一个无所不能的开源软件选手,类似于那种可以为IBM系统Outsourcing(外包)EDS的模式。

GNU编译器已经支持成打的主机环境和成打的目标体系(我自己也写了其中的六种移植版本),当时GNU编译器是具有最好移植性的编译器。GNU调试器可以运行在五种原始平台上,有些人还利用它来支持嵌入式系统。当时,我们天真地认为,将它们精简后作为一个整体打包成一个产品的工作非常简单,只要将代码放到一个发行版本中,编写自述文件,增添一个安装脚本,提供一些附加的产品,做一些测试,然后发运出去即可。但是现实情况比这个远具挑战性。

首先,GCC当时正在从1.42版升级到2.0版。在像m68k和VAX这样的CISC机器上,GCC Version 1的性能已经相当地好,可以与大多数编译器相抗衡。但在RISC平台上,它要与其他编译器相抗衡则需要进行一些优化工作。1988年,当我第一次将GCC移植到SPARC上时,GCC的编译速度比Sun的编译器要“慢”20%。I989年,我编写了一个指令调度器(instruction scheduler),将速度差距减少了10%。同年,我对分支调度器(branch scheduler)进行了改造,有了指令调度器,GCC与Sun的编译器差别的速度降到了5%。由于世界的发展趋势是从CISC过渡到RISC,我们从开始时追求在每一个平台上都成为最好的编译器,转变到一种更加复杂以客户认可为代价的集合,具体如何要看顾客怎样来看待它。销售已经不再是一个简单、直接的行为。

第二,GNU C++的开发进度比较滞后。我在1987年秋天编写GNU C++,使它成为世界上第一个原始代码的C++编译器。C++是一种比C要复杂得多的语言,当我们成立Cygnus时,它还在不断的进化过程中。1990年,几个复杂得多的新特性变成了“标准”,由于Cygnus的事情让我的精神根本无法集中起来,我无法使GNU C++得到升级。

第三,GDB。GCC和G++是相当连贯的,几个规则的版本都是从一个中央的地方发布的,但是GDB却饱受分裂之苦。开源软件的对手们将争论说,专有软件的好处是软件只有一种“真正”的版本,但是开源软件却可以分裂成为成千上万的不同步的版本,而其中的任何一种版本都不能成为合法“标准”。由于当时GDB没有强有力的维护人员,所以它分裂了,世界上有几百位人员根据他们自己的需要搞出了他们自己的版本。

第四,我们实际上没有一条完整的工具链:我们有一个汇编器,连结器和其他用于二进制代码的工具(也就是binutils),这些可以在一些(但是不是大多数)GCC和GDB支持的平台工作。当时,如果你选择了GCC支持的平台,GAS、GLD等等,那么在这些工具都可以支持的平台上找出通用代码基的交集将是不可能的。

第五,我们没有C Library,这对于像Sun和HP这样的原来平台将不是一个问题,但是对于嵌入式系统开发人员来说则是一个大问题,因为他们在他们单独的应用程序中需要C Library提供的功能。

第六,尽管我们的竞争对手不具备我们在任何时候都能即使向用户提供工程支持的技能,但是他们每家都已经具备完整的产品,而且在他们各自的狭小市场上销售得都不错。而我们如果要销售打包产品,那么我们实际上就要改变我们的进攻计划。进攻的路线将从侧面进攻改成正面对抗那些销售额是我们的10倍到100倍的公司。

最后一点是关于我们自己的信心。对于许多快速演变工具的投资者来说,如果你的服务在市场上的确存在明显的需要则是一件非常好的事情。一旦我们生产的产品质量一般,市场上不需要我们的服务,那么本来对打包的开源软件产品就将信将疑的投资者将改变他们的观点,那么我们在市场上半年后就会被淘汰出局。这一直是我在后面的四年中听到的声音,而且对我们的业务一直是一种挑战。

世界上充满了不可逾越的机会。

——Yogi Berra

对于这一点,我们无能为力,只有听之任之。在刚开始预计的六个月内。我们都加班加点地干“双份”的工作,全力以赴以求实现目标。我的任务是在白天领导全局,在晚上则是帮助完成GCC 2.0和G++。David Henkel-Wallace(也叫Gumby)是Cygnus的第二个创始人,他的工作除了扮演财务总管(CFO)和技术支持部的领导之外,还负责改进binutils工具和库(Library)。John Gilmore是Cygnus的第三位创始人,负责GDB。我们还聘用了一些新人负责:

1. 将所有的东西放进CVS(一种开源的源代码控制系统);

2. 编写可以在几百种可能的平台上安装和配置我们的打包产品的脚本;

3. 使我们的测试流程自动化;

4. 在我们加速度工作,不能再超负荷运转时接替我们完成新的开发合同。

六个月后,工作难以解释地增加了,我们其中有些人对我们的严厉(有些人说是限制性地)产品焦点变得厌烦起来。尽管GNU产品是我的销售和工程努力的大部分东西,但是我们还是为其他的技术卖掉了一些合同,例如Kerkeros(一种网络安全性软件),Emacs,甚至我们的bug跟踪和测试框架的软件(当时还在开发中)。

John向网上发了一份邮件,大意是说“我将成为新的GDB维护者。如果你想在GDB未来的版本中要我来维护含有你完成的特性,那么请将你的所有的GDB源代码发给我,我将试图将它们集成到新的版本中。”六个星期后,他收集了137个GDB版本(绝大多数是在Version 3.5上搞出来的),所有这些版本都有一种或者几种特性需要集成到新的版本中去。John开始设计GDB4.0的结构来支持所有这些特性。我能和谁争论这完成不了呢?

Gumby决定所有的二进制文件工具都要使用一种普通的Library,这种Library描述了所有已知的对象文件,并且可以对格式进行除错。这样做的理由是,当你考察了编译器后面各种不同类型的工具的功能之后,情况就变得非常清楚了:

工具

读出

写入

编译器

ASCII

ASCII

汇编器

ASCII

Binary

归档器

Binary

Binary

连接器

Binary

Binary

Size

Binary

Binary

Strip

Binary

Binary

Binary

Binary

Binary

Nm

Binary

Binary

调试器

Binary

每一个工具在读或者写、读和写二进制文件格式时都有自己的实现方式,而且这些实现方式中的每一种对于每一种二进制格式都有不同的支持级别:a.out,b.out,coff,ecoff,elf,ieee695,等等。而且,当每一个工具配置好之后,它就只能支持一种二进制文仲格式。对于m68k-a.out汇编器的改进,还需要对所有其他的特定a.out工具的改进,而且动一发系全身!

如果建立单一的Library支持单一源代码基的所有功能,那么更快地达到经营的规模效益就是可能的,因为任何事情都可以以一种连续的方式转化成为因子,并且得到维护。另外,可以呈现出一种整洁性,将a.out目标代码连接成为coff库,并生成可执行的ieee695代码。

于是,Gumby开始设计这一library,并且开始与Stallman讨论设计方案。Stallman说这一工作太难了——因为这需要完全改写所有的工具,而且维护起来也很困难。Gumby告诉他这不是一个“Big F*cking Deal”,并且将这一新的创造命名为BFD Library。(我们对客户说,BFD代表“二进制文件描述符库”,binary file descriptor library。)

但是当John和Gumby工作时,我还得卖出一些东西以得到一些收入。每一个季度我都有一个新的最重要的目标需要更多的资源来完成更多的合同,而所有的最好的工程师都已经栓在现有的工作上,我不能指望他们能腾出时间来帮助我。在销售和工程之间的张力在开源软件模式中似乎是以一种相反的方式上升:我们在GNU软件上开发工作做得越多,那么在我们完成了所有GNU工具链开发的50%以上时,我们从网络得到的回报越小。

这两方面的问题都不是临时性的。当第一个“进步版本”(Progressive Release)最终完成之前要花一年半的时间!在那重要的一天内,我第一次确信开发完整的C和C++开发工具包可以从一个单一的代码基上进行构造,而我们将支持两个平台:Sun3和Sun4。我愣了。我已经编写了6种GCC的移植版本,一个原始代码C++编译器和调试器,而我花的时间比一组黑客在同一源代码基上搞出两个基本点工具链(tool chains)的时间还要少!?

这里有两个原因降低了开发速度:

1. 我们的黑客搞出的这些工具比它们原来工作得要好,并且增加了许多新的有用特性;

2. 我们的工作中含有对所有基础结果的改进工作(不仅是改写工具,还有完成配置脚本和使测试框架自动化等工作),我们原来期望将来支持更多的主机/目标机的组合形态,包括一组虚拟的无限制的嵌入系统平台。

我们对这一框架进行测试,通过的时间表如下:

日期

版本名称

原始平台

嵌入系统

平台总数

1992.3

p1

2

0

2

1992.6

p2

5

0

5

1992.9

p3

5

10

15

1992.12

p4

5

20

25

1993.3

q1

5

30

35

1993.6

q2

5

45

50

1993.9

q3

7

53

60

1993.12

q4

8

67

75

1994.3

r1

10

75

85

1994.9

r2

10

80

90

1994.12

r4

10

90

100

当我们的工程师在进行创造GNUPro产品的伟大工作时,我的销售小组开始了他们的销售行动。1991年,我们雇佣了一个年轻的学生,当时她刚刚被Applied Materials解雇,她想学习怎样销售软件。虽然她的母语不是英语,但是她进步很快。无论从哪个角度看,她都不是一个黑客(虽然她在Cygnus时花了几个周末的时间自学过C语言编程),但是她成了一位真正的强有力的开源软件哲学鼓吹者。在她进行了六个月的非常成功的销售之后,她邀请我观看她的一份为顾客制作的演示片。我惊呆了!我以前一直以黑客销售软件的方式销售开源软件:主要集中强调我们开源软件的技术优点。而她的解释既有我们工作的内在复杂性,又有我们交付使用的软件的商业价值,这为客户解释清楚了为什么他们应该购买我们的产品和服务,而不是试图靠他们自己的工程师来完成这些工作。我以前的卖点是强调我们的工程师比客户的工程师强一些(这根本引不起公司老板的兴趣),而她则解释如果有我们的帮助进行基础性的移植、支持和维护的话,客户公司的工程师会得到什么好处。最后,我们的技术威力和商业上的利益结合起来就等于巨大的销售成绩:

订购量(千美元)

利润(%)

积累的CAGR

1990:725

epsilon

1991:1500

1

106%

1992:2800

2

96%

1993:4800

3

87%

1994:5700

4

67%

华生!过来!

——亚历山大·格拉汉姆·贝尔(电话发明人)

这一努力产生了一些重要的技术,回报了网络界,而且变成了他们自己版权的标准:GNU配置(一种普通的配置脚本,可能根据三个独立的变量来配置软件:一个构建平台、一个主机平台和一个目标平台),autoconf(一种高级的用于创建配置脚本的脚本),automake(一种为autoconf驱动环境的makefile生成器),DejaGNU(一种回归测试框架),GNAT(一种问题报告管理系统)等等。

今天,GNUPro工具包支持175种以上的的主机/目标机的组合,这一数量现在只会受到市场上实际的多样性限制,而不是受我们的版本或者配置技术的限制。

实际上,GNUPro开始在市场上占据了如此领导性的地位,我们的几个竞争对手宣布他们打算为GNU软件销售商业性的支持,来与我们竞争。幸运的是,开源模式再一次来帮我们的忙。除非(或者直到)某家竞争对手有100位能够与我们竞争的工程师(注意我们的工程师人员大多数是我们支持的软件的原创人或者维护人员),他们是不能替代我们作为“真正的GNU”源代码来源的位置的。(我们提供了GCC、GDB和相关工具的80%以上的改进代码)。他们的最高期望只不过是在客户愿意为他们付钱的情况下,为他们增加一些特性。但是由于软件是开源的,所以无论他们增加了什么代码,这些代码会回到Cygnus而成为开源软件,如果这些增加的代码好的话,我们会将它们集成到我们的产品中,如果增加的代码不怎么样的话,我们会忽略掉它。专有软件的竞争者不得不在赢利和亏损这两端的竞赛之间挣扎,开源软件与此不同,开源软件厂家更像是在莫比乌斯圈上竞争,而且每一样东西都是朝原创者或者维护人员期待的方向发展。所以,尽管我们的竞争对手会在“我们也提供GNU服务”的空间里得到了一些战术上的长处,但是Cygnus将从战略上长远地收益。我们的公司成立于1989年,我们的先手优势领先于其他的竞争者十年的时间。

挑战

在前面的章节中,我们已经看到,尽管我们的增长率保持着令入印象深刻的上升,但是随着我们的成长,增长的势头在减缓。尽管我们尝试了销售开源软件的优点和价值,但是持怀疑态度的人和我们的潜在的客户会在下面的几个方面向我们提出挑战:

健全性:为什么客户会为竞争对手的优势付钱?

伸缩性:基于服务的生意怎样伸缩其规模?

持续性:当客户需要时,Cygnus能出现在客户的身旁吗?

赢利性:开源软件怎样赢利?

可管理性:怎样管理开源软件,以保持质量的一致性?

可投资性:没有软件IP的公司怎样才能吸引投资者的注意?

在基于它的商业模式的基础上,无论Cygnus是否上市,你能想象向一位具有五位嵌入系统程序员的经理销售一万美元的技术支持合同吗?对于所有那些将开源软件当作是打开通向最好和最具有生机的软件之门的开发小组而言,向主流的商业市场销售开源软件的确是一个主要的绊脚石。我们应该首先读一读Geoffrey Moore的著作Crossing the Chasm(《跨越深渊》),看看他的观点是什么。

当我访问一组开发无线通信系统的开发小组时,这一点变得再清楚不过了。作为他们的质量控制的一部分,他们不仅要评估他们自己的产品质量,而且还有按照一组标准衡量他们的供货商的产品质量。所有经商的公司,无论他们提供什么东西,口头上都会“王婆卖瓜,自卖自夸”,说他们的产品无论从主要的标准(或者从所有的标准)来看都“非常好”、“极其优秀”。但是他们的嵌入工具的供货商可能在每三年的质量控制过程中每一个年头按照所有的标准来衡量却是“差”的,或者“不可接收”的。然而他们还是不会购买我们的产品,因为尽管我们有证明书(至少是从我们的客户那里发出的!)、超级技术特性、较低的价格,但是管理人员不愿意采用一种未知的方案。我至今还是感到奇怪,为什么他们从来不用这些数据,却仍然要费神去收集数据呢?我想这是一个错误的问题。我不应该这样看待事情,而是应该把它视为一种典型的主流行为,将这些问题绞在一起不是客户的错误,我们应该改进我们的市场营销方式和宣传方式。

但是,我们的问题不只是存在于外部。许多客户不相信我们在现有状态的基础上,能聘用足够的人员适应我们的技术支持服务业务。他们可能是相当错误的,也可能是相当正确的。如果谈的是聘用工程师的话,他们的看法是相当错误的。Cygnus是由工程师创建的,我们的企业文化、开源软件商业模式,以及将全球卓越的开源软件工程队集中到一起的机会,使得Cygnus在聘用开发人员时,总是对开发人员具有非常的吸引力。我们的人员更新率,与全美的平均水平(特别是与硅谷的平均水平)相比,只有其他公司的1/4到1/10。

但是如果谈的是管理人员的话,那将完全可能是另一种情况。由于他们与我们的主流客户一样表现出同样的担心和偏见,我们联系过的大多数管理人员没有兴趣为Cygnus工作。有这些担心和偏见的人,Cygnus对他们没有任何吸引力;那些没有担心和偏见的人、而且Cygnus对他们有吸引力的人可能头脑里存有错误的理由。过去我们的工程部有两名管理人员时,我们有50多名工程师。沟通、流程处理、管理控制和雇员的满意程度都与管理人员努力的目标有差距,而且经常不成功。这些问题是管理一个开源软件公司必须正视的问题,而且是关键的必须解决的问题。

相当具有讽刺意味的是,我们还取消了一些管理人员的管理资格,因为他们不能接受为我们的公司创造一个“闭源的元件”(closed-source component)。开源软件是一种商业战略,不是一种哲学,而我们不想聘用那些为了公司的总体目标在管理开源的或者闭源的产品方面不太灵活的管理人员。

我们必须接受这样一个事实:你不能指望在聘用一个管理人员时,他会立即明白开源软件的所有含意。相反,你应该容许他们犯一些错误(这意味着你必须为这些错误引起的成本留下一笔预算开支),他们应该能够从这些错误中学会一些经验。大多数管理人员会将他们的经验带来并试图改变事情以适合他们的经验——这对Cygnus是一份失败的处方。要找到一些既能够很快从经验中管理,又能很快从经验中学习的管理人员是非常困难的、这样的人有多少,我们要多少。

开源模式和它面临的所有挑战证明它是相当有弹性的。虽然我们曾经偶然地因为我们糟糕地设置了期望值或者糟糕的运作失去过一些客户,但是我们的年度更新率以美元价值来衡量从1993年以来一直保持在大约90%左右,而且我们的失去顾客的头号原因是“退休”:客户的工程项目结束了。当其他公司相继跨掉的时候,有两个原因使我们括了下来:

1. 每一个人,无论他的职位高低、资历长短,都意识到满足客户委托的重要性。没有人在对客户支持之外做其他事情;

2. 当其他一切都失灵的时候,客户可以自己帮助自己解决问题,因为我们所有的客户都拥有程序的源代码。

所以。尽管在那段时间Cygnus的问题成堆,结果还是极少有客户因为我们不能交付软件而离开我们。据我们所知,这同使用与我们竞争的专有软件的用户的情况,以及和使用没有技术支持的开源软件的用户的情况形成了极好的对比.

在开源之外得资助——eCos

嵌入式系统世界的现实是,制造芯片的公司数量相对较少,而且在嵌入系统产品中购买几家主要芯片的外部设备制造商(OEM,Outside Equipment Manufacturer)的数量也相对较少。市场的其余部分有大量的小规模经营但是制造一些有趣产品的公司组成,不过他们的力量不足以形成气候,不足以要求生产新的芯片设计或者软件解决方案。

在这些半导体厂家和OEM之间有儿百家小的软件公司,他们都在销售各自的产品。例如,根据IDC的统计,在今天的市场上,有120多家具有商业性技术支持的实时操作系统(Real Time Operating Systems,RTOS),这些RTOS中没有一种的市场份额超过了6%。这一局面与UNIX界十年前的情况是很相似的,只是分裂的局面要严重20倍!这一分裂的局面会导致产生出所有自由市场经济条件下的典型退化状态:冗余职压、不兼容、价格混乱等。那些半导体厂家和OEM都希望能够搞出一些“标准”,以便加速TTM(time to money,从时间到金钱)的转化。而那些商业性的RTOS供货商要么是花费太多的时间,要么是花费太多的金钱,要么是又费时又费钱。

在嵌入式系统市场上我们是一颗升起的明星:在我们的市场上,作为领导者,我们的成长速度是自己的两倍,增长速度是其他四个主要的竞争对手的百分之十。但是我们并没有被当作是市场的真正领导者,我们也没有像真正的领导者那样行动。1995年,我们同许多关键的客户进行了谈话,讨论了我们在嵌入式市场上做了什么,还有什么没有做。我们开始明白一个道理:我们的GNUPro编译器和调试器到那个时候为止只能找出他们的问题。客户真正需要的是在硅片抽象层次上的一种东西——这一层次位于标准的C Library或者实时POSIX API下面。通过以一种非零碎(non-trivial)的方式,我们得到了一种新的机会来扩展我们的产品。

我们削尖了铅笔,记下了一组明显的事实:120多种商业性的RTOS和1000多种内部的RTOS意味着:在技术的水平上,没有任何一个人能够建立一个充分可配置的RTOS来达到“皆大欢喜”的目的,而从商业的角度来看,我们注意到运行时的版税正在使利润消失,所以RTOS必须是不付版税的。换句话说,为了将市场上的客户团结在我们的解决方案的周围,我们需要创造一种崭新的、世界级的技术,而且我们需要将它奉献给市场。公司的管理层在一年的时间内一直对这一观点嗤之以鼻,不过,最后还是同意了。

当我们决定了实施这一战略时,管理层的人员还是继续向我们争论这样一个问题:“怎样才能使这一战略产生利润?”即使我们能在市场上继续将客户成功地团结在GNUPro的周围,但是我们怎样在嵌入式操作系统市场上成功地重复这一模式却不是那么明显的。

面对这一完全矛盾的局面时,我们做了任何一个公司都要做的事情:我们作出了假设。我们假设能够赢利,我们需要做些什么才能解决客户的问题成为市场上的“大哥大”呢?我们自问了N个其他相关的问题。结论是:

1. 我们需要开发出这一极好的新的配置技术;

2. 我们需要创建系统的其余部分,以便让客户能够配置一些东西;

3. 我们需要在时常机遇成熟之前完成上面所有的工作。

开发软件当然花费巨大,而在以时间计算的成本基础上开发面向产品的软件花费会更大。

当我们创立Cygnus时,我们都假设VC永远不会明白我们做了些什么,即使他们明白过来,那也将是五年或者更后的事情了,而在这一段时间内。他们为我们什么也做不了。幸运的是,我们的这些假设都错了。

Philippe Courtot是我们第-位董事会外的成员,1992年初,他不费吹灰之力就将我介绍给了一群头面VC。在他们所有人面前,我对我们的模式、技术和将来的目标的态度都是非常开放的,同时我对这一事实的态度也是同样地开放:我们是用自己的钱创建了Cygnus公司,我们自己能养活自己,因此我们不需要他们的资金支持。实际上,我们的利润每年增长两位数,而公司的规模增长80%的确是一个非常好的信号(我一直对这一非常关心),我们的生意成熟得非常好。Roger McNamee是为VC社团工作的一流的软件工业分析家,他对这一点是击节称赞的,他说:“我对你的商业模式既感到奇怪,又感到吃惊。我对这一模式工作得这样好感到奇怪,但是我考虑得越多,我越感到吃惊为什么我没有首先想到这一点!

一想到这一点就令人赏心悦目,因为我们能够解决自己的问题,而不需要外部的资金支持。但是到了1996年,现实情况是我们创造了太多的机会,这些机会在我们的GNUPro生意财力承受能力之外,我们需要一个新的计划和新的伙伴。

我们找到了两个投资者:Greylock Management和August Capital,他们明白我们过去所做的事情,我们是怎样做的,他们理解我们的行为处事具有准则和纪律,而且他们具有大量的资金在执行我们的计划。他们投资了六百二十五万美元,这对我们这家软件公司来说在1997年上半年是最大的私有注资,而且执行情况从一开始就很认真。

我不喜欢他们,我是山姆。我不喜欢绿蛋和火腿。

——Dr. Seuss

当技术小组拼命向前赶时,商人们继续推敲着怎样使这笔投资发挥作用,因为我们开始在eCos的体系和我们可以使用的商业化模式之间找到某种联系。从技术发展方向看,我们知道系统的可配置性是交付“皆大欢喜”体系的关键。从商业发展的方向看,我们知且“皆大欢喜”是为嵌入式系统开发创建一种统一和有益的标准的关键。但是我们仍然不清楚谁会为这一好处付钱。技术人员和商业人员为此分别独立地工作了一年半的时间。我们为此设立了R&D(研究和开发)费用。由于不能接受开源的悖论,许多经理们可没有这样干过。

当技术人员最终可以展示他们最初想象的东西时,商业方面的人员就开始明白了我们究竟在创造什么东西:世界上第一个开源体系。对我来说,这是第一次我看到GCC时感到振奋。

开源的一切都不错,而且对黑客也很好,开源能够创建标准对于最终用户是了不起的,但是在黑客可以对开源软件能够做的事情和普通用户可以做的事情之间有一个漏洞。我们希望eCos成为一个产品,而且主流的嵌入系统开发人员能够拥抱它,而不只是黑客社团对它欢呼雀跃。我们的理念是用高级的工具武装用户,这些高级的工具可以配置、定制,并且以一种自动化的方式完成eCos肯定能做的基本功能,这样可以替代今天那些公司内部的RTOS开发人员手工方式一步步完成的事情。通过在源代码的级别上使高级工具控制eCos,并且通过建造这些代码,使这些代码可以让这些工具来管理,我们使最终用户可以虚拟地在源代码级别上进行工作成为可能,这一工作甚至并不需要用户阅读或者编写一行C或者C++代码。我们的成功证明:eCos的规模可以从700字节(只含有最小的硅片抽象层)到50KB以上(含有Internet堆栈和文件系统的全功能RTOS)的范围内变化!

一旦我们意识到开源不仅仅是一个特性,而是在技术上使eCos成为现实的东西时,一旦我们向自己证明有了这一特性,我们的性能的竞争力是对手的十倍以上时(比目标级别的配置性节省了10倍的空间,在源代码级别上——但不是在源代码体系化的RTOS上——节省了程序员10倍到100倍的时间,或者说,提高效率10倍到100倍)。我们将这一方案打包,将这一性能超群的方案作为产品推向市场,而且市场对这一方案的初步反应是极其积极的。

过去那些认为我们以前基于GNU的生意不可能获得成功人,是不可能想象eCos能为Cygnus Solutions和世界创造出什么商业成功的可能性的。

反思和展望未来

开源软件叩开了获得技术自由市场内在效率的大门,但是这是以一种有组织和不可预言的方式进行的。开源商业扮演了那只亚当·史密斯的理论中所谓的“看不见的手”的角色,这只看不见的手既对市场总体起作用,又左右着微观经济市场上竞争者达到各自的目的。最成功的开源商业公司,将是那些能够运用技术促成网络界形成最伟大的合作、并且能够解决来自用户社团的最大技术和商业挑战的公司。

Internet本身产生于开源软件,Internet成了最不可思议的开发新的开源软件的动力。只要人们继续通过开源软件连接到Internet上,我们将会目睹开发和使用软件方式的变化。这种方式与文艺复兴运动改变了发展和使用学术知识的方式是非常相同的。有了开源软件提供的自由,我别无所求!


Cygnus Solution的未来:一个企业家的现身说法

i4CN(工业4.0中国-简称),是中国最系统化、最全面的工业4.0、工业互联网、智能制造、无人工厂领域的第三方咨询公司。公司整合华为、博世、腾讯、美的等专家,首家提供工业4.0整合方案,包括i4技术项目、i4四大管理体系、十大思想变革的三层金字塔式咨询架构;能够指导企业实施专业化的工业4.0变革和无人工厂规划建设与运营管理。助力国家实现中国制造2025的宏伟蓝图。

Cygnus Solution的未来:一个企业家的现身说法

梁卓业 i4CN首席咨询顾问中国工业4.0、智能制造、无人工厂、工业互联网专家,华为ISC、IPD体系专家华为ISC+项目组成员,智能制造标杆车间项目经理工业4.0十大思想变革、无人工厂建设体系首创人中山大学麻省理工学院双MBA,广东工业大学机电学院本科欢迎需要导入华为ISC、IPD体系,实施工业4.0无人工厂的企业与i4CN合作。

(请搜索i4CN梁卓业老师相关课程视频并进一步了解)

相关文章