| 发表于:2007-03-07 13:08:03 楼主 |
人们经常说开源没有创新,而是模仿。这肯定是专有软件行业希望你相信的。看一看目前企业中使用的一些最著名的开源项目中的活动,让你不由得不同意。 例如,尽管开源数据库令人难以置信地广泛用于各类关键任务应用,但不管是mysql还是postgresql,实际上没有做任何ibm、microsoft、oracle和sybase多年来没做过的事情。同样,openoffice.org生产力套件是一个给人留下深刻印象的社区驱动的开发的例子,但它惟一的真正目的是创建免费的、基于标准的microsoft office的克隆。甚至linux自己也是作为免费软件改写unix的尝试。 但是,所有这些都不能否定开源开辟了一条属于自己的新路而非只是跟在别人后面的事实。apache web服务器就是最好的例子。apache自1995年诞生国家超级计算应用中心的httpd后,就一直是用户的首选web服务器。据网站与服务器监测机构netcraft说,目前62%的internet网站使用apache,而使用microsoft iis(internet信息服务器)的网站只有31%。 然而正如microsoft的internet explorer所证明的,流行程度并不是惟一衡量性能的指标。apache常常是安装在大多数linux服务器上的缺省web服务器,而它的成功并不只是由于人们熟悉它或缺少竞争对手。更确切地说,它具有稳定性、高性能、一流的安全纪录以及使它具有比商用竞争对手更多功能的各种特性与扩展程序。apache实际上开辟了web服务器软件市场并处于领先地位。5年后,iis无疑将以这种或那种形式存在于市场上,但apache仍将是领先产品,进一步拓展web服务器的功能。 这类协作创新的例子在it领域中比比皆是。在软件业中,无数的开发商、个人和公司在试验开源方式。理由之一是因为社区驱动的开发使软件产品能够有机地发展。正如eric s. raymond在其开创性的著作《大教堂与集市》中所说的:“每一个软件杰作都开始于满足某个开发人员的个人需要。”当一群开发员以开源方式协作时,每一位开发员都有着独特的个人需要,其结果是软件不断扩展,填补专有产品没有涉及的这些功能领域。 开源赋予java生命 开源社区开发的工具巩固了java在开发人员市场中的领先地位。 毫无疑问,开源使java得到了巨大的实惠。java语言和平台赖以发展的jcp(java社区进程)似乎在以蜗牛的速度前进。委员会的审查和批准是个缓慢且需深思熟虑的过程,java毕竟是领先企业应用平台,因此它应当缓慢演进,哪怕需求十分紧迫。为解决一些问题而造成另一些问题从来不是一种好的解决办法。 然而,与其相对的开源社区却一直在飞速前进,推出大量的重要创新。目前,企业java基本工具全部是开源产品:ant(用于开发应用程序)、hibernate(用于将数据保存在硬盘上)、junit(用于设备测试)和maven(用于继续的集成),更不用说得到高度重视的eclipse和netbeans开发环境和pmd源代码验证程序了。 java开发人员还从几种开源框架中受益,如jsf(javaserver faces)、spring和struts。再有就是众多的容器(container):apache tomcat、geronimo、jetty、jonas和resin,更不要说很多用于嵌入式应用的小容器了。开源是java世界想像力和生产力的巨大源泉。 在这两股河流——jcp与开源——之间站着3大企业java技术提供商:bea、ibm和sun microsystems。他们都是一只脚站在开源工具河流中,另一只脚站在非开源工具河流中。虽然很多ibm工具是专有的,但它一直是java和开源社区的主要贡献者。bea最近非常积极地实施其“混合”战略,积极支持开源产品。此外,bea还向多个开源项目捐献代码和程序。 sun有点特立独行。狂热的开源支持者一直逼迫sun开放java源代码,希望加速这种平台中的创新,但sun却行动缓慢。这样做是有一定道理的:开放java代码可能会将java分裂为不同的版本,从而减少java引以为荣的可移植性。但开源社区一直尖锐地攻击sun的这种立场。 鉴于sun对开源的长期贡献,这就将它置于一种奇怪的境地。sun仍是惟一一家开放其操作系统和全部生产力套件源代码的公司。实际上,它开放了很多java技术的源代码。因此,sun在8月份举行的linuxworld上透露——也许有点勉强——除推出一个供开发人员跟踪其进展的社区网站外,它打算开放java库和java虚拟机。 从长期看,向开源发展的这股强大的力量能使java受益吗?除了其缓慢的开发进展外,java的一部分成功归功于sun所起到的管家作用。通过开放java源代码剥夺sun的这一角色可能导致java平台的大大加强,也可能最终伤害它。 linux让设备受益 嵌入式系统开发商从开源操作系统中受益。 linux的传统根据地在于服务器和工作站,而它正在这之外的非常小的设备上取得成功。对于嵌入式系统开发人员来说,linux优于专有操作系统的优势除了低成本外,还在于其灵活性和开放性。 消费电子产品市场对新技术有着永不满足的需求,但是使用来自microsoft和symbian等公司的专有嵌入式平台的开发人员,必须受限于某一厂商提供的设备驱动程序和对最新硬件的支持。然而,他们的开源社区同行常常在技术刚一推出时就开始修补它们。他们开发的代码也许很糙,但开发过程很快,这反过来可以使他们更快地制造出原型产品,更早地上市以取得市场先机。 linux还使开发复杂的嵌入式应用变得更容易。用于嵌入式设备的传统rtos(实时操作系统)是在单处理器线程中运行单个任务的单用途平台。嵌入式linux类似于它的重量级表兄,是设计用于运行多个应用的通用操作系统。这种通用性帮助开发人员满足客户日益复杂的基础需求。此外,没有复杂的专有许可条款为开发人员提供了定制各个层次应用的自由,他们可以选择他们需要的部件而忽视另一些。 厂商之间的竞争对于顾客肯定是件好事。在嵌入式linux市场上,montavista和wind river等顶级厂商不仅与专有操作系统厂商竞争,而且还相互竞争。此外,一些设备制造商还选择“单干”,独立于操作系统厂商生产自己风格的嵌入式linux。然而linux是开源操作系统,每一种变种都成为由开发人员、客户和合作伙伴构成的大生态系统的一部分,都在为这个更大的整体做贡献。 这种“竞争式协作”仍给其他公司留出了利用额外的工具扩大linux基础的空间。例如,trolltech提供的qtopia:一种迅速开发嵌入式linux应用和用户界面的全面的环境。核心qtopia技术可依据gnu gpl(通用公共许可证)使用,从而为开发人员在qtopia代码上带来了在linux内核上所享受到的同样的可见性。同样,nokia发布了自己的开源应用平台maemo。该平台可以在nokia 770 internet tablet等嵌入式设备上找到。 这些工具为开发人员带来了额外的优势:熟悉性。qtopia是基于trolltech历史悠久的桌面linux系统qt工具包的;maemo基于来自gnome项目的类似技术。其结果不同于专有操作系统,应用开发人员可以利用自己已有的技能为嵌入式操作系统开发软件。 这些优势意味着阵营越来越庞大的linux驱动的设备。从sharp pda到tivo机顶盒,从linksys无线路由器到motorola手机,越来越多的公司将宝押在linux上,把它作为在快速发展的、高度竞争的设备市场中取得成功的跳板。 开源社区推动脚本采用 现代脚本语言在开放上取得成功。 脚本语言,有时叫做“动态”语言,变得非常流行,其中一个原因是它们能让开发人员利用比较小的代码完成很多工作。这种“高相对价值”源于将更多的工作交给编译器和运行时间环境(如按变量值得到变量类型)去做的新方法——除了完成经常执行活动的特殊捷径外。 包括perl、php和python在内的脚本语言还有另一个共同点:它们几乎统统都是开源语言。在很多地方,开源与非开源之间的不同之处可能并不重要,但开源似乎在脚本语言中至关重要。奇怪的是,这点并不是由于开源在修补漏洞中的灵活性的原因,而是由于其创建社区的能力。 比较两种几乎同时问世的脚本语言ruby和netrexx的命运,是看到开源重要性的生动例子。netrexx是由ibm设计、部分基于其成功的大型机脚本工具rexx的。它以解释方式运行,也可以编译为java字节代码。作为一种语言,netrexx具有很高的生产力并易于学习掌握,提供大量的优雅的结构。由于它可编译为java字节代码,从netrexx中可以访问所有的java库,此外,它享受着java虚拟机的优秀性能。 另一方面,ruby是纯解释语言,它没有虚拟机,因此运行速度慢。这种语言有它自己的优点,但主要优势来自采用部分起源于perl缩略语法不直观的句法成分。netrexx与ruby还有另一个重要的共同之处:它们都是免费提供的。 那么,这两种语言中哪一个更成功呢?是快速、典雅的netrexx,还是不直观、速度慢的ruby呢?事实可能与你所料的正相反,今天的ruby踌躇满志而netrexx却濒临死亡。 关键原因在于ruby是开源而netrexx不是。结果是ruby能够建立一个活跃的开发员社区——特别在它的诞生地日本,它已经流行了10年。ruby在david heinemeier hansson编写web应用框架ruby on rails之前一直在积累发展动力。rails是ruby的杀手应用,它是设计典雅的典范,保证了ruby发挥持久的作用。同时,尽管netrexx有着巨大的价值,却蹒跚而行,无人理睬。如果ibm开放了netrexx源代码,脚本技术今天可能是一番完全不同的景象。 仅凭开源本身肯定不能保证一种语言取得成功。实际上,现在有很多没有成功希望的开源语言。尽管开源并不是成功的充分条件,但却是必要条件。缺少它就是缺少microsoft创建社区的资源。 |
|
|
|
|