微软和3D图形:关于遏止创新和竞争的个案研究

2021年11月20日 阅读数:3
这篇文章主要向大家介绍微软和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月的更新,不然请继续读下面的引言。 html

 

 

 

引言

 

在过去的五年中,三维计算机图形学成为PC世界中一项相当重要的技术。3D图形功能是两大市场的先决条件:计算机辅助工业/机械设计(当今大部分工做站和高档PC都销往这个市场)和娱乐(尤为是计算机游戏,促使消费者去购买重要的PC新软硬件)。研究微软在3D图形技术上的态度是很是有启发性的,由于微软在这一领域的许多动做都已暴露于众目之下。 git

 

 

 

技术背景

 

为了可以细致地理解问题,咱们必须先定义两个概念。 api

 

 

 

应用程序接口(Application Programming Interface)

 

首先是API(Application Programming Interface)的概念。本质上讲,一个API就是一个存放小型程序的库,软件开发者将这些小型程序凑在一块儿,造成一个完整的计算机程序。例如,一个3D图形API可能包括:绘制对象的函数,模拟光效的函数,以及决定必定视角下哪一个物体是可见的函数。一个软件开发者可使用这些函数来创建一个个飞行模拟游戏:绘制出山和建筑物(经过飞机的坐仓天蓬可能会看到这些),而后调整亮度以达到太阳照射的效果。session

 

 

 

3D图形API的设计决定了能够画什么,以多快的速度画,以及软件开发者达到某一效果的方便程度。所以,从技术和商业角度讲,对于软件开发者来讲, API都具备很是重要的做用。 ide

 

 

 

设备驱动程序(Device Driver)

 

第二个概念是设备驱动程序。设备驱动程序(简称驱动程序)是在给定硬件设备上实现一个API的软件。例如,在Compaq PC视频卡上实现的一个3D图形API可能会不一样于在Dell PC上的实现。在这种状况下,两个硬件供应商(Compaq和Dell)将在他们各自的视频卡上为3D图形API书写驱动程序。注意:在两个机器上,API将以一样的方式使用,只是他们的实现细节(驱动程序)不一样了。函数

 

 

 

API和全部使用这些API的应用程序可否生存关键在于驱动程序。驱动程序的存在与否决定了可否在特定机器上可否得到特定的API。驱动程序的质量(完整性,性能,可靠性)在很大程度上决定了使用了它的软件的质量。驱动程序的开发和测试须要大量的努力,所以,对于提供它的硬件供应商和使用的它的软件开发者和消费者来讲,驱动程序都很重要。 工具

 

 

 

历史

 

3D图形APIOpenGL

 

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”。)

 

 

 

游戏开发者呼吁OpenGLDirect3D平等竞争

 

当技术和市场问题逐渐暴露的时候,一股强劲的支持OpenGL的反击开始了。id Software(流行游戏Doom的开发者)的John Carmack公开表示他将拒绝使用Direct3D而使用OpenGL。Chris Hecker在1997年4-5月份出版的《游戏开发者杂志》(Game Developer magazine)发表了对两个API的全面分析,总结道:微软应该无条件放弃Direct3D,并将精力投放到OpenGL上去。

 

 

 

事实开始证实微软的目的并非为消费者提供一个在技术上很出色的产品,或者促进API之间的自由竞争,而是正在利用Direct3D来达到控制市场的目的,并在那些可能对微软产生挑战的领域限制创新。游戏开发者向微软提交了两个请愿书。第一个来自于56名顶级游戏开发者。他们要求微软发布已经完成,但因为可能会使OpenGLDirect3D竞争而没有发布的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)一般被吹捧为OpenGLDirect3D冲突的解决方案。

 

 

 

什么是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的一个独立软件开发者。