微软和3D图形:关于遏止创新和竞争的个案研究作者:Alan Akin
翻译:Win Herry
日期:2005-5-2
译者按:Direct3D和OpenGL之争从开始到现在将近十年。微软依然是巍巍帝国,Silicon Graphics依然在产业界举足轻重。而OpenGL推出了2.0,DirectX已经推出了9.0,Direct3D和DirectDraw合二唯一,并为DirectGraphics。作为没有经历或者关注过那段历史的人,今天再去回顾一下,或多或少都会有些感触。这就是我翻译这篇文章的目的。英文原文见“收藏->Others”目录。前言
这篇文章的初始版本写于1997年7月。这次重写集中于紧跟前言的前几段,但也是非常小的改动,以提高连续性,并更新超联接。如果你对原版很熟悉,你完全可以直接跳到1998年8月的更新,否则请继续读下面的引言。
引言
在过去的五年中,三维计算机图形学成为PC世界中一项至关重要的技术。3D图形功能是两大市场的先决条件:计算机辅助工业/机械设计(当今大部分工作站和高档PC都销往这个市场)和娱乐(尤其是计算机游戏,促使消费者去购买重要的PC新软硬件)。研究微软在3D图形技术上的态度是非常有启发性的,因为微软在这一领域的许多动作都已暴露于众目之下。
技术背景
为了能够细致地理解问题,我们必须先定义两个概念。
应用程序接口(Application Programming Interface)
首先是API(Application Programming Interface)的概念。本质上讲,一个API就是一个存放小型程序的库,软件开发者将这些小型程序凑在一起,形成一个完整的计算机程序。例如,一个3D图形API可能包括:绘制对象的函数,模拟光效的函数,以及决定一定视角下哪个物体是可见的函数。一个软件开发者可以使用这些函数来建立一个个飞行模拟游戏:绘制出山和建筑物(通过飞机的坐仓天蓬可能会看到这些),然后调整亮度以达到太阳照射的效果。
3D图形API的设计决定了可以画什么,以多快的速度画,以及软件开发者达到某一效果的方便程度。因此,从技术和商业角度讲,对于软件开发者来说, API都具有非常重要的作用。
设备驱动程序(Device Driver)
第二个概念是设备驱动程序。设备驱动程序(简称驱动程序)是在给定硬件设备上实现一个API的软件。例如,在Compaq PC视频卡上实现的一个3D图形API可能会不同于在Dell PC上的实现。在这种情况下,两个硬件供应商(Compaq和Dell)将在他们各自的视频卡上为3D图形API书写驱动程序。注意:在两个机器上,API将以同样的方式使用,只是他们的实现细节(驱动程序)不同了。
API和所有使用这些API的应用程序能否生存关键在于驱动程序。驱动程序的存在与否决定了能否在特定机器上能否获得特定的API。驱动程序的质量(完整性,性能,可靠性)在很大程度上决定了使用了它的软件的质量。驱动程序的开发和测试需要大量的努力,因此,对于提供它的硬件供应商和使用的它的软件开发者和消费者来说,驱动程序都很重要。
历史
3D图形API:OpenGL
到1992年,很明显3D图形技术必将成为许多市场的关键技术。独立软件供应商的需求导致了一个由众多公司组成的联盟的成立。联盟同意支持一个通用的3D图形API。这一新的AIP被命名为OpenGL,它继承自由Silicon Graphics创建的一个流行的、古老的图形库。OpenGL是一个“达到最新技术发展水平”(state-of-the-art)的API,它可以在很多计算机上有效地实现。OpenGL的规范由有一个叫Architecture Review Board(ARB)的委员会控制,而不是有一个商业机构控制,同时它也是非赢利的。任何硬件供应商都可以非常容易地扩展OpenGL来包容富有创意的新特性,这使得新应用得以快速发展。ARB最初的成员有:数字设备公司(Digital Equipment Corporation),IBM,Intel,微软和Silicon Graphics。
也是在那个时候,微软正在开发它的新的高端操作系统Windows NT的第一个版本。由于Windows 3.1在技术上的缺陷,微软无法介入CAD的很大一部分市场。微软希望能够在Windows NT中扭转这一局面。确点之一是缺乏好的3D图形支持,而OpenGL提供了一个有利的解决方案。
OpenGL的驱动程序支持问题
作为一个联合工程项目的一部分,微软和Silicon Graphics生产了一个Windows NT的OpenGL实现。这个实现的特点之一是设备驱动程序的设计对于微软来讲是全新的,被称作可安装客户端驱动程序(Installable Client-side Driver, ICD)。ICD提供更高的图形性能,并且允许任何PC硬件供应商扩展OpenGL API来支持新的、富有创意的3D图形功能。这与微软一贯的驱动程序模型形成鲜明对比。微软一贯的驱动程序模型非常适合更普通的图形性能需求。并且在那种模型下,微软保留了对驱动程序以及它支持的API的设计的绝对控制。
针对PC(尤其是低价PC)的3D图形硬件市场的发展比微软和Silicon Graphics预计的要慢的多。少量的PC硬件供应商(特别是数字设备公司,Intergraph,和3D实验室)为运行Windows NT的机器提供了功能强大的OpenGL驱动程序。但是针对Windows3.1和Windows95用户的低价、高容量解决方案却迟迟没有推出。1996年,当3D图形硬件变的更普遍时,提供快速,稳定的OpenGL实现的压力增大。微软开发了一种新的OpenGL设备驱动程序设计,叫做瘦客户端驱动程序(Mini Client Driver,MCD)。对于一大类PC图形卡来讲,MCD在很大程度上减少了开发优质OpenGL实现所需要的时间。因此,MCD有大幅增加OpenGL实用性的潜力。
微软创建Direct3D API
1995年和1996年,微软设立了一个新的计划来支持在Windows95操作系统下运行游戏。目标是将PC市场扩展到一直由任天堂和世嘉等控制台游戏一统天下的领域。
微软没有选择已经在Windows NT上实现的OpenGL技术来为游戏处理3D图形。相反,它收购了Rendermorphics,Ltd.,并获得了它的3D图形API——RealityLab。微软在RealityLab的基础上重新设计设备驱动程序方案,并宣布完成一个新的3D图形API,叫做Direct3D直接模式(Direct3D)。
利用Windows95推动Direct3D并冻结OpenGL
微软拒绝发布Windows95环境下支持基于OpenGL游戏所需要的软件。实际上,在相当长的时间内,微软根本没有在Windows95上支持OpenGL,这使得WindowsNT的用户无法在Windows95上运行相应的OpenGL应用程序。同时微软也采取非同寻常的措施来限制对MCD驱动程序的支持,尽管它已经向硬件开发者发布了工具。结果,一些硬件开发商无奈地招回了已经处于beta测试阶段的OpenGL驱动程序。微软的行动分割了3D图形市场,注定了OpenGL在Windows95的目标市场——High-volume PC不会被广泛使用。同时,微软通过Windows95推进了Direct 3D的市场渗透。
微软的商业团队开始向游戏开发者,硬件开发者,和商业新闻界推广私有的Direct3D API,同时开始将OpenGL边缘化。当微软提及OpenGL时,都会说那是一种仅仅适合于WindowsNT上特定专业CAD应用的、低性能API;而Direct3D才是主流,并且能够在被大肆宣传过的Windows95上提供“实时”性能。(这并不影响OpenGL在与游戏相近的技术中的广泛应用,例如飞行模拟器)微软同时保证增加Direct3D的研发人员,而保持OpenGL的研发人员数量。这导致OpenGL的发展相对于Direct3D来说慢了下来。
API之战
Silicon Graphics和许多其他OpenGL的用户的业务依赖于提供创新的,高性能的图形技术的能力。因为微软打算利用Direct3D取代OpenGL的形势逐渐明朗,并且Direct3D有许多技术上的缺陷,而且它也不象OpenGL那样允许硬件供应商扩展(因为它完全被微软控制),所以Silicon Graphics决定在1996年在新奥尔良市(New Orleans)举行的SIGGRAPH(Special Interest Group on Computer Graphics)会议上作一个演示。这个演示最终证明OpenGL至少和Direct3D一样快,从而驳倒了微软最关键的市场口号。因为OpenGL早已被公认(微软除外)比Direct3D有更多的功能和潜在的更高的图象质量,这个演示在计算机图形学和游戏开发社群掀起了一场激烈的争论:为什么微软要推出一个新的,差劲的API?为什么微软要扼杀已经存在的、可以使用户使用升级产品的设备驱动程序技术?
大部分公开讨论发生在comp.graphics.api.opengl和rec.games.programmerUs USNET新闻组,并且可以通过http://www.dejanews.com访问。(如果你打算研究它们,应该做好大量阅读的准备!想象一下在comp.graphics.api.opengl始于1996年8月的新闻组里查找 “DirectX vs OpenGL”。)
游戏开发者呼吁OpenGL和Direct3D平等竞争
当技术和市场问题逐渐暴露的时候,一股强劲的支持OpenGL的反击开始了。id Software(流行游戏Doom的开发者)的John Carmack公开表示他将拒绝使用Direct3D而使用OpenGL。Chris Hecker在1997年4-5月份出版的《游戏开发者杂志》(Game Developer magazine)发表了对两个API的全面分析,总结道:微软应该无条件放弃Direct3D,并将精力投放到OpenGL上去。
事实开始证明微软的目的并不是为消费者提供一个在技术上很出色的产品,或者促进API之间的自由竞争,而是正在利用Direct3D来达到控制市场的目的,并在那些可能对微软产生挑战的领域限制创新。游戏开发者向微软提交了两个请愿书。第一个来自于56名顶级游戏开发者。他们要求微软发布已经完成,但由于可能会使OpenGL与Direct3D竞争而没有发布的OpenGL MCD设备驱动程序和其他产品。第二封公开信同样是关于这个话题。刚开始时,这封公开信征集到了254个签名,而到结束时,签名数已经超过了1400个。有些签名所附带的评论非常有趣。
微软的回应是重申它一早的市场定位:Direct3D面向通用(high-volume)、高性能应用,而OpenGL只面向高精度的CAD应用。尽管请愿者明确表示他们希望两个API能够处于平等地位,以使竞争刺激创新,并保证不会有任何一个独立的机构控制对图形硬件的访问。微软对此的回应是增加对Direct3D的投资,并继续削减对OpenGL的投资。据本文作者所知,微软从来没有发布任何新闻公告承认收到过这两个请愿书。
1998年8月的更新
差不多在我写本文的初始版本之时,Jon Peddie Associates发表了一篇令人信服的社论,总结了当时的情形。它关于微软实力、弱点和行为的评价,即使今天读起来也非常有价值。
微软继续升级Direct3D,并且每次升级都从OpenGL中吸取一些新的特性。但是它对OpenGL的覆盖仍然没有结束;例如,Direct3D仍然缺少处理曲线平面的能力,同时它也不支持具有几何加速硬件的图形卡。然而,Direct3D比一年以前强多了。并且它的演化开始与OpenGL的演化产生分歧。
Fahrenheit
在过去一年最重大的进步是Fahrenheit项目。Silicon Graphics选择了通过协商进行妥协。Silicon Graphics即将推出的虚拟机产品所需要的软件,以及那些与微软和惠普发布的直接模式图形API所存在的技术问题有关的软件都要依赖于微软(dependent on Microsoft for most of the software required by its upcoming Visual PC product and concerned about technical problems with the Direct Model graphics API announced by Microsoft and Hewlett-Packard)。Silicon Graphics,微软,Intel和惠普发起了一个叫做Fahrenheit的联合项目。此项目要创建三种新的API。其中的两种API和本文的主题无关,而第三种(Fahrenheit Low-Level,FLL)通常被吹捧为OpenGL和Direct3D冲突的解决方案。
什么是Fahrenheit Low-Level API?现在没有人知道FLL会是什么,因为不存在任何规范。但是关于FLL的公开声明在一些方面非常一致。Silicon Graphics' original press release:
FLL自Direct3D,DirectDraw和OpenGL演化而来。为基于微软Direct3D的应用程序和硬件驱动程序提供全面的向后兼容,同时为Silicon Graphics的OpenGL技术提供功能性兼容。
1998年8月 Microsoft Developer Network DirectX chat session:
Direct3D IM是当今与FLL兼容最好的API。
slides presented at Microsoft's 1998 Meltdown Conference:
与DirectX6(当前版本)Direct3D……API和DDI(Device-Driver Interface)向后兼容。
换句话说,新的FLL API只是简单地将Direct3D附加上一些OpenGL里的功能特性特性。来自OpenGL的威胁得以压制,微软可以继续它惯常的商业步伐。
可以把Fahrenheit看成是微软向消费者和合作伙伴发出的友好信号吗?毕竟现在将只有一个API,这会缓解硬件和软件开发者所承担的压力,并简化消费者的生活。我认为答案是否定的。新API完全归微软所有。在计算机图形产业界,微软现在成了所有重大革新的瓶颈。另外,必须要记住的是所有冲突都是微软挑起的:没有Direct3D,这个产业在几年前就应该发展到今天这个地步,同时将会有大量竞争的机会,而没有今天Fahrenheit所表现出的对革新的限制。
OpenGL的现状
OpenGL仍然是微软完全控制的3D图形之外唯一真正的选择。尽管Silicon Graphics不再使用任何微软无法接受的方式来推广OpenGL,但是OpenGL仍然能够生存。所以它现在的处境非常的危险。游戏开发者是具有独立思想的一个群体,一些举足轻重的游戏开发者仍然在使用OpenGL。结果,硬件供应商正努力提高对OpenGL的支持。Direct3D还无法处理高端图形硬件和大部分专业应用;OpenGL占据着那一小部分地盘。终于,开源组织(尤其是Mesa项目)开始为任何类型的计算机提供OpenGL支持,不管他们有没有使用微软的操作系统。
总结
对于研究微软的人来说,3D图形是一个有价值的案例。在这场控制新兴市场的战役中,微软一贯如此:
从其他机构学习或者修改技术,而不是自己创造它自己的技术。
利用它的市场地位散播明显错误的信息。
拒绝对它的独立软件开发伙伴的直接请求作出回应。
利用Windows的垄断地位推广它自己的产品,而遏止其他来源已经发布的优秀产品。
利用他核心软件供应商的地位排除异己。
不遗余力地扩展或者维护它对市场的控制,甚至不惜牺牲商业伙伴和消费者的利益。
在很大程度上讲,这些战术已经成功。
微软经常暗示它只为消费者提供好处;相对于它强制执行的标准,让微软完全控制消费者工作和娱乐所使用的计算机产品是值得的。在这个案例中,为了消费者的利益而推行标准化并不是微软的目标;一个优秀的标准已经存在,但微软却有步骤,有计划地压制它,以使它在一个以前从来没有涉及过的新兴市场里建立自己的产品并获得统治地位。微软这样做过,并且可以这么做,只是因为微软作为操作系统供应商具有绝对的垄断地位。结果,本应该两年前消费者就应该享受到的产品特性,直到现在才普及。期间,硬件供应商和软件供应商为了处理两个竞争的标准,其产品开发费用都大幅增加。3D图形应用软件开发被人为的市场分割所限制,形成了“消费品”(Windows95)和“专业产品”(WindowsNT)两个互不兼容的部分。
这不正是反托拉斯诉讼适用的情形吗?
Allen Akin是加利福尼亚Palo Alto的一个独立软件开发者。