Hacker News Digest

05 сентября 2025 г. в 23:07 • hsu.cy • ⭐ 146 • 💬 143

OriginalHN

Is OOXML Artifically Complex?

OOXML: не злонамерен, а просто ленив

LibreOffice обвинил Microsoft в «искусственном усложнении» OOXML, чтобы никто не смог повторить формат. На деле всё проще: спецификация громоздка не из-за злого умысла, а потому что Microsoft писала её под себя, не думая о других.


Что внутри .docx

Фраза «To be, or not to be…» превращается в:

<w:p>
  <w:r>
    <w:rPr><w:b/></w:rPr>
    <w:t>To be</w:t>
  </w:r>
  <w:r>
    <w:t>, or not to be…</w:t>
  </w:r>
</w:p>

Плюс десяток служебных атрибутов (rsid, paraId и т. д.), нужных только Word для совместного редактирования и отката изменений. Они не несут смысла, но обязательны, иначе файл считается битым.


Почему так вышло

  1. Наследие. OOXML — прямой XML-перепис старых бинарников. Все костыли перекочевали.
  2. Своя реализация прежде всего. Упрощать спецификацию никто не стал: главное, чтобы Word сам себя читал.
  3. Стандартизация «на скорую руку». 6 000+ страниц, куча неоднозначностей, «реализация Microsoft» считается эталоном.

Итог

OOXML — открытый формат де-юре, но закрытый де-факто. Писать совместимый парсер приходится подстраиваться под поведение Word, а не под текст спецификации. Это не саботаж, а обычная инерция монополиста: упростить никому не выгодно, а усложнять — дешево.