Synth Daily

微软在用 Office 文件格式蓄意破坏竞争吗?

微软的 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 在当时只是一个由单一厂商实现的新规范,其数千页的文档根本无法在短时间内得到充分审阅。