分裂的代价

当 Microsoft 刚刚推出 Direct3D 的时候,PC 还是一个弱小的平台,接受 OpenGL 这样的工作站级别标准很遥远。所以『单独搞一套』似乎是天经地义的。当 NT 平台和 Windows 95/98 逐渐合并的时候,工作站级别的 OpenGL 和 Direct3D 功能重叠的问题开始被关注。最后,Microsoft 退出 OpenGL ARB 说明了它的决定 —— 用私有标准来 lock-in 开发者的 code base 和 knowledge base 。

经过了近十年之后,Direct3D 已经成为 3D 领域中一个功能上受人尊敬的竞争者,但是其分裂初衷实现得如何呢?去年年初,游戏大牛 David Rosen 写了 《 Why You Should Use OpenGL and not DirectX 》,说明在游戏开发界有众多严肃的开发者坚持开发基于 OpenGL 的产品,其中部分甚至是只在 Windows 上开发也不涉及 OpenGL 之外的接口。而在 Rosen 文章之下的评论里不乏反对的声音,其中一个理由是:只要软件的结构清晰,从 Direct3D 转向 OpenGL 代价并不高,可以说除了资源的确捉襟见肘的 just startup 都能应付。两种声音说明,无论是对于有强烈主观倾向的开发者,还是对于重视实用可操作的开发者,lock-in 都并不成功。

对 Microsoft 来说,进一步展示抛弃 OpenGL 的决心,也许会让开发者三思。所以出现了 Vista 剔除 OpenGL 的言论。但是事实是,Microsoft 不能在大量的现有 code base 的压力下冒天下之大不韪。它仍然必须提供与 Direct3D 同样完美的 OpenGL 支持。

Dirtect3D 让 Microsoft 拥有一个完全可控的标准。但是这种可控度并非在 OpenGL 上不可达到。OpenGL 和 Java,HTML 这类标准不同。作为一个对功能覆盖十分克制的专业标准,OpenGL 天然的必须和平台相关的代码混用。作为 native code 的源代码级别标准,OpenGL 天然的必须重编译才能跨平台。所以 OpenGL 的开发者对于私有扩展和细节差异的容忍度要远远高于 Java/HTML 之类开发者。为了平台可控性而创立 Direct3D 的必要性是值得质疑的(当然平台可控并非 Microsoft 的全部目的)。

应该说 Direct3D —— 尤其是 DirectX 11 的版本 —— 是一个优秀的开发平台。但是对微软来说,现状是这样的:无法抛弃 OpenGL,所以必须维护两套并行的接口,加大了维护成本。对于可控性的收益来说,投入大大高于必要。Lock-in 开发者 code base 的目标基本失败。对于平台的创立者来说,这是一个教训:应该对 JVM 这种基于 VM 的跨平台方案保持距离,但是对 OpenGL 和 POSIX 这样宽松的源代码级接口进行分裂是毫无必要的。(附带说一句,Windows 的 POSIX 子系统面临类似的程度稍轻的窘境。)

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s


%d 博主赞过: