微软的 Office Open XML (OOXML) 文件格式因其极度复杂而备受批评。LibreOffice 等竞争者认为,这种复杂性是微软蓄意设置的技术壁垒,旨在锁定用户、阻碍第三方软件的兼容。然而,更深层的分析表明,OOXML 的问题可能并非源于恶意破坏,而是微软在制定标准时的一种“不作为的自私”:优先考虑自身实现的便利,而忽视了通用标准应有的简洁与普适性。这种做法虽然客观上阻碍了竞争,但其动机与蓄意破坏存在区别。
锁定用户的工具?
开源办公软件 LibreOffice 曾发表文章,将矛头直指微软的 Office Open XML (OOXML) 文件格式。
文章指控,微软虽然表面上开放了 Office 文件格式标准,但通过将其设计得极为复杂,实际上阻碍了与第三方软件的互操作性。这种复杂性是刻意为之,与实际需求脱节。
这种观点认为,微软名义上开放了一条轨道,却设计了一套只有自己能运营的控制系统,从而形成事实垄断。
从二进制到 XML
在讨论这个问题之前,需要了解一些背景。
- 旧格式: Office 2003 及更早版本使用
.doc、.xls等二进制格式,内容无法被人类直接阅读。 - 新格式: 从 Office 2007 开始,微软转向了以
.docx、.xlsx为代表的新格式。文件名中的x代表 XML。这些文件本质上是一个 ZIP 压缩包,内部包含了一系列 XML 文件和资源。
这套新的文件结构遵循公开的 OOXML 标准。理论上,任何人都可以自由解析和创建符合该标准的文件,以实现与 Microsoft Office 的兼容。但 LibreOffice 的批评正是针对这种理论上的“开放”与现实中的困难之间的矛盾。
潦草的标准:一个实例
OOXML 格式确实复杂、繁琐且晦涩。但这很可能不是因为微软蓄意阻止第三方兼容,而是出于一种不作为的自私心态。
在制定标准时,只考虑自身实现的便利,而忽略了一个通用标准应有的质量、简洁和普适。当然,这种不作为客观上也造成了阻碍竞争的结果。
我们以一个简单的例子来说明。在一个新建的 Word 文档中输入一句话:“To be or not to be.”,其中前两个单词加粗。保存后,其核心的 XML 内容大致如下:
<w:p>
<w:r>
<w:rPr>
<w:b />
<w:bCs />
</w:rPr>
<w:t>To be</w:t>
</w:r>
<w:r>
<w:t>, or not to be, that is the question</w:t>
</w:r>
<w:r>
<w:t>.</w:t>
</w:r>
</w:p>
这段 XML 的结构可以这样理解:
<w:p>: 代表整个段落。<w:r>: 代表一个“文本块”(Run),即一段格式相同的连续文本。- 第一个
<w:r>: 包含了加粗的 “To be”。格式由<w:rPr>(Run Properties) 定义,其中<w:b />标签代表粗体。 - 后续的
<w:r>: 包含了剩余的文本。它们被分割成多个部分,有时仅仅是因为编辑操作的差异(例如粘贴文本后再手动输入标点)。
ODF:一个更简洁的对比
作为对比,如果使用 LibreOffice 的 OpenDocument 格式 (ODF) 存储相同内容,其 XML 会清晰得多:
<text:p>
<text:span text:style-name="T1">To be</text:span>
, or not to be, that is the question.
</text:p>
这个结构非常直观,几乎类似于 HTML。它没有用一个“粗体”标签,而是通过应用一个名为 T1 的样式来实现格式化,这体现了内容与样式分离的现代设计原则。相比之下,OOXML 中晦涩的标签名和复杂的结构,无疑增加了第三方软件的开发难度。
不只是复杂:OOXML 的其他缺陷
除了形式上的复杂,OOXML 作为一个标准的质量也备受诟病。在其制定阶段,技术专家就指出了诸多问题:
- 包含历史遗留错误: 例如,错误地将 1900 年视为闰年。
- 与现有标准冲突: 在语言代码、矢量图形等方面与成熟的国际标准不一致。
- 定义模糊: 使用定义不明确且前后矛盾的计量单位。
- 命名混乱: 元素和属性的命名规则不清晰、不一致。
此外,微软通过“快速通道”将 OOXML 提交为 ISO 国际标准的过程也引发了巨大争议。该通道本应用于技术成熟、业界广泛采纳的规范,而 OOXML 在当时只是一个由单一厂商实现的新规范,其数千页的文档根本无法在短时间内得到充分审阅。