MOffice

Открытый код: текст, рендер, язык (Lingo), шрифты, Qt, формулы — исследование для MOffice

Статус: готов к обсуждению, 2026-10-04. Область: шейпинг и шрифты, Unicode, раскладка абзаца, переносы, diff, рендер, цвет, экспорт PDF, правописание и грамматика, словари и тезаурусы, шрифты в комплекте, Qt 6 и мост Rust↔︎Qt, лента и докинг, MOffice Math. Классы лицензий — по docs/12-license-policy.md.

1. Выводы (топ-10 с экономией в чел.-мес.)

Источники: oss-verified.tsv (области text, render, lingo, fonts, qt, math, shell), клоны в …/scratchpad/oss-src/, веб-проверки (≈ 40 запросов) — помечены «(проверено 2026-10-04)». Экономия — оценка против написания своими силами; дорожная карта (08-roadmap.md) не даёт оценок по эпикам, поэтому суммы указаны как «сколько не придётся писать» внутри эпиков E0.3, E1.2, E1.3, E1.7, E4.4, E4.x Math и E1.5 Shell.

# Вывод Стратегия Экономия, чел.-мес.
1 Экспорт PDF — krilla + pdf-writer + subsetter (MIT/Apache, класс 1): PDF/A-1a/1b/2a/2b/2u/3a/3b/3u/4/4f/4e и PDF/UA-1 с проверками, теги (H1–H6, L/LI, Table/TH с заголовками, Figure/Formula с Alt), подмножества TTF/CFF, цветные и вариативные шрифты, вложения AF, CMYK/ICC. Нет шифрования и подписей — это свой слой (см. 3.4) adopt 8–10
2 rustybuzz заархивирован (README клона: проект «unmaintained, and archived», рекомендован переход на HarfRust). Шейпинг — harfrust (MIT, соответствует HarfBuzz 14.3.1), шрифты — skrifa/read-fonts (Google Fonts, они же в Chrome), системные шрифты и резерв — fontique; строка библии «HarfBuzz (rustybuzz)» устарела adopt ≥ 30 против своего шейпера; 1–2 на миграции позже
3 Раскладка формул — порт typst-layout/src/math/* (Apache-2.0, ≈ 3,9 тыс. строк + IR 3,3 тыс.): дроби, радикалы, индексы, акценты, растяжимые скобки по таблице OpenType MATH. ReX — без файлов лицензии и мёртв с 2020 → только reference port 6–8
4 Озвучивание формул — MathCAT (MIT, Rust, 15 языков речи включая русский, шрифт Брайля, навигация по дереву) закрывает P1 Math «MathSpeak/ClearSpeak, ru» и PDF/UA /Alt adopt 8–12
5 Правописание: своего движка не избежать. Hunspell (MPL/GPL/LGPL), spellbook (MPL-2.0), nuspell (LGPL-3), hunspell-rs (линкует C-Hunspell) — класс 2. Пишем meridian-spell по формату .aff/.dic (стоимость 7,5–9,5 чел.-мес.); ru_RU использует только SFX/TRY/SET, поэтому первая версия для ru/en/uk/be дешёвая (3–4). Альтернатива по решению владельца — spellbook как есть (экономия ≈ 6) own (★) −7,5…−9,5 (затраты) / +6 при решении
6 Словари класса 1 в установщик: ru_RU (Lebedev, BSD-подобная), en_US/en_GB/en_CA/en_AU (SCOWL, брать из первоисточника, а не из пакета LibreOffice), pl (SJP.PL — Apache-2.0/CC BY 4.0 на выбор), nl (OpenTaal — BSD-3), tr (MIT); тезаурус en — Open English WordNet (CC-BY 4.0). Список «20 словарей в комплекте» из E1.7 политике не соответствует: de/it/cs — GPL, fr/uk/es/pt/da/el/kk/sv — MPL/LGPL adopt (данные) > 100 (лексикография)
7 Переносы — форк hypher (MIT/Apache, конечные автоматы, 0 мкс загрузки, ru 33 КиБ) вместо застывшего hyphenation (2021); шаблоны: ru — LPPL-1.2+, en-us — FSFAP, en-gb/de/fr/be/pl/nl — MIT, uk — MIT/LPPL, kk — Public Domain (новый, 2025), cs — GPL (исключить) fork 1–2
8 Кнут–Пласс — порт typst-layout/src/inline/linebreak.rs (1 070 строк: оптимальный перенос с оценочной границей и штрафами за переносы); основа «качественного выравнивания» Write, при этом совместимый с Word режим — жадный port 1–1,5
9 Грамматика английского — harper-core (Apache-2.0, миллисекунды, WASM); LanguageTool и nlprule (данные — LGPL-2.1 из LanguageTool 5.2) — класс 2; для русского — свой движок правил adopt + own 6–8
10 Qt 6.8: список GPL-only модулей подтверждён (Charts, CoAP, Data Visualization, Graphs, GRPC, HTTP Server, Lottie, MQTT, Network Authorization, Qml Compiler, Quick 3D (+Physics), Quick Timeline, Virtual Keyboard, Wayland Compositor) — всем есть замены; «Qt for Small Business» (546 €/год за место) нам недоступна (≤ 3 места, выручка+инвестиции ≤ 1 млн €); cxx-qt — adopt; SARibbon — только на Qt Widgets → перенос алгоритмов в QML-ленту; докинг — свой adopt / port / own 3–4 (cxx-qt) + 1,5–2 (лента)

Дополнительно: для Aptos найден открытый метрический клон Intos (OFL-1.1, без RFN, 2026) — кандидат вместо заказа клона (нужна юридическая проверка: в нём кернинг Aptos); Latin Modern Math распространяется под GUST Font License (на базе LPPL), а не OFL — политику шрифтов надо дополнить.

2. Таблицы по подобластям

Обозначения: ★ — звёзды GitHub; «загр.» — загрузки crates.io; дата — последний коммит (push) или выпуск; класс — по 12-license-policy.md. Данные из oss-verified.tsv, если не помечено «(проверено 2026-10-04)».

2.1 Шейпинг и шрифты

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся писать / риски Экон.
harfrust MIT (1) ★308; 0.13.3, 10,5 млн загр.; 2026-10-03 (проверено 2026-10-04) Rust шейпинг всех письменностей: text-layout, Math, PDF (krilla уже на нём) adopt нет graphite; на битом шрифте ошибка, а не запасной шейпер — нужен свой путь «пропустить шрифт»; до 25 % медленнее HarfBuzz ≥ 30
rustybuzz MIT (1) ★667; 0.20.1, 32,7 млн; архив (README клона) Rust — avoid typst ещё на нём; при порте кода typst заменить вызовы на harfrust —
HarfBuzz Old MIT (1) ★6110; 2026-10-02 C++ эталон; уже внутри Qt (текст интерфейса) reference его тест-набор шейпинга — в CI против harfrust —
fontations: skrifa / read-fonts MIT OR Apache-2.0 (1) ★833; skrifa 0.48.0, 31 млн; 2026-10-03 Rust разбор шрифтов, метрики, контуры, хинтинг, вариативные оси, таблица MATH adopt версии 0.x меняют API — закреплять; заменяет ttf-parser ≥ 12
ttf-parser MIT OR Apache-2.0 (1) ★793; 0.25.1, 113 млн; 2026-08-06 Rust — (дублирует read-fonts) avoid в новом коде в typst math используется ttf_parser::math — при порте заменить —
fontique Apache-2.0 OR MIT (1) 0.11.1, 3,6 млн; 2026-08-16 (проверено 2026-10-04) Rust перечисление системных шрифтов и резервирование через DirectWrite / CoreText / fontconfig adopt (сравнить с fontdb в спайке E0.2) таблица метрических замен (Arial→Liberation Sans, Calibri→Carlito…) — своя 2–3
fontdb MIT (1) ★180; 0.24.0, 36 млн; 2026-07-29 Rust база шрифтов из файлов: комплект, встроенные в docx/pptx adopt без системного резервирования 1
swash Apache-2.0 OR MIT (1) ★875; 0.2.10, 14 млн; 2026-07-17 Rust растеризация глифов на CPU (WASM, тесты) reference на экране и в печати растеризует Skia —
font-kit MIT OR Apache-2.0 (1) ★842; 0.14.3 (2025-05) Rust — avoid заменяется fontique —

2.2 Unicode: BiDi, разрывы, сегментация, нормализация

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
ICU4X: icu_segmenter, icu_collator, icu_properties, icu_normalizer Unicode-3.0 (1) ★1867; icu 2.3.1; segmenter 18,7 млн загр.; 2026-10-02 Rust разрывы строк UAX #14 (с LSTM/словарями для тайского, лаосского, кхмерского, бирманского и CJ), слова/предложения/графемы UAX #29, сортировка Sheets/Base, числа, даты, регистр adopt данные CLDR тоже Unicode-3.0; собирать только нужные локали (icu4x-datagen); typst и parley уже на нём ≥ 12
unicode-bidi MIT OR Apache-2.0 (1) ★87; 0.3.18, 522 млн; 2026-09-15 Rust BiDi UAX #9: арабский/иврит в Write, Slides, ячейках adopt альтернатива — parley_engine/src/bidi.rs на свойствах ICU 2
unicode-linebreak Apache-2.0 (1) ★41; 0.1.5; 2023-07-25 Rust — avoid застыл на старой версии Unicode; заменить на icu_segmenter (правка библии, раздел 7) —
unicode-segmentation MIT OR Apache-2.0 (1) ★678; 1.13.3, 584 млн; 2026-09-17 Rust быстрые графемы/слова без данных ICU: курсор, счётчик слов adopt — 0,5
unicode-normalization MIT OR Apache-2.0 (1) ★201; 0.1.25, 596 млн; 2026-09-18 Rust NFC/NFD для поиска, словарей и переносов adopt — 0,5
regex, fancy-regex, aho-corasick MIT/Apache (1); aho-corasick Unlicense OR MIT (0) 1,2 млрд загр.; 2026-08 Rust «Найти и заменить» с подстановочными знаками, автозамена, поиск по нескольким словам adopt перевод подстановочных знаков Word в regex — свой 1

2.3 Раскладка абзаца, переносы, сравнение, rope

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
parley Apache-2.0 OR MIT (1) ★744; 0.11.1, 3,5 млн; 2026-09-28 Rust итемизация, BiDi, резерв шрифтов, жадный перенос, выравнивание по пробелам, встроенные блоки, PlainEditor reference + port фрагментов (parley_engine/src/{analysis,itemize,bidi}.rs) нет словарных переносов и Кнута–Пласса, нет интервалов «точно/минимум/множитель» Word, табуляций, обтекания, сносок, вертикального текста 2–3
cosmic-text MIT OR Apache-2.0 (1) ★2154; 0.19.0, 9,6 млн; 2026-08-08 Rust многострочный текст для простых полей reference рассчитан на UI и терминалы, для документов не годится —
typst inline/linebreak.rs Apache-2.0 (1) ★56 366; 0.15.1; 2026-10-01 Rust Кнут–Пласс с приближённой оценкой и отсечением, штрафы за переносы у края слова и два дефиса подряд port (раздел 3.3) код завязан на Engine/Preparation typst — переносим алгоритм, а не модуль 1–1,5
bramstein/typeset BSD-2-Clause (1) ★1034; 2026-06-20 JS классическая модель box/glue/penalty reference — —
hypher код MIT OR Apache-2.0 (1); шаблоны — по языкам ★142; 0.1.8, 3,3 млн; 2026-09-17 (проверено 2026-10-04) Rust переносы 48 языков; автоматы встраиваются при сборке; ru — 33 КиБ fork → meridian-hyph добавить en-gb (MIT) и kk (PD), пользовательские исключения; не включать hu (MPL) и проверить hyph-cs-sojka.tex 1–2
hyphenation Apache-2.0/MIT (1) ★58; 0.8.4 (2021), репо 2024-01-24 Rust — avoid в patterns/*.pat.txt заголовки лицензий вырезаны (README отсылает к hyph-utf8) — атрибуцию пришлось бы восстанавливать; вдвое медленнее hypher —
tex-hyphen (hyph-utf8) по языкам: MIT, LPPL, FSFAP, PD, BSD-3, GPL ★67; 2026-02-24 TeX первоисточник шаблонов (раздел 3.2) adopt (данные) — —
similar Apache-2.0 (1) ★1329; 3.2.0, 210 млн; 2026-09-16 Rust «Рецензирование → Сравнить»: абзацы, затем слова (Myers/Patience) adopt перемещения фрагментов (как в Word) — своё 1
imara-diff Apache-2.0 (1) ★225; 0.2.0, 34 млн; 2026-06-21 Rust быстрый diff больших документов и версий adopt — 0,5
diffy MIT OR Apache-2.0 (1) 0.5.2, 16,7 млн; 2026-08-31 Rust трёхстороннее слияние для «Объединить исправления» adopt — 0,5
ropey / crop MIT (1) ★1670 / ★320; 2026-09 Rust rope для редактора скриптов и плоского текста (модель Write — своя piece table) adopt (Script) — 0,5

2.4 Рендер и геометрия

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
Skia + skia-safe BSD-3-Clause + MIT (1) ★10 956 / ★1816; skia-safe 0.153.3, 4,2 млн; 2026-09-30 C++ / Rust холст всех приложений, GPU-бэкенды, печать, PathOps (булевы операции над кривыми для «Объединить фигуры») adopt в third_party Skia: FreeType (двойная FTL/GPL-2 — выбрать FTL и указать в NOTICE), libpng, zlib, libjpeg-turbo, libwebp, expat; функцию textlayout не включать (шейпинг наш); предсобранные бинарники rust-skia закрепить по хэшу или собирать сами ≥ 24
tiny-skia BSD-3-Clause (1) ★1647; 0.12.0, 52 млн; 2026-08-20 Rust CPU-рендер миниатюр, снимочных тестов, веб-просмотрщика без Skia adopt (вспом.) — 1
vello Apache-2.0 OR MIT (1) ★4379; 0.11.0; 2026-10-02 Rust экспериментальный GPU-бэкенд (по библии) reference / spike API нестабилен —
kurbo Apache-2.0 OR MIT (1) ★1010; 0.13.1, 49 млн; 2026-09-24 Rust геометрия Безье для scene: длины, пересечения, смещение контура, упрощение adopt — 2
lyon MIT OR Apache-2.0 (1) ★2602; 1.0.19; 2026-09-22 Rust тесселяция путей (нужна только при своём GPU-рендере) reference при Skia не нужна —
i_overlay MIT OR Apache-2.0 (1) ★211; 9.0.0, 9,1 млн; 2026-09-24 Rust булевы операции над многоугольниками: контур обтекания «по контуру», области adopt кривые не сохраняет — для фигур Draw брать Skia PathOps 1
resvg / usvg Apache-2.0 OR MIT (1) ★4107; 0.48.1, 28 млн; 2026-10-03 Rust импорт SVG (значки, рисунки) в список отображения; krilla-svg — SVG в PDF векторно adopt — 3

2.5 Управление цветом

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
Little-CMS 2 + rust-lcms2 MIT (1) ★748 / ★52; lcms2 6.2.0, 7,1 млн; 2026-09-29 C / Rust meridian-color: ICC v2/v4, CMYK, намерения рендеринга, компенсация точки чёрного, цветопроба — Paint, PDF, печать, PDF/X adopt C-код разбирает профили из чужих документов → фаззинг и песочный процесс 4–6
palette MIT OR Apache-2.0 (1) ★838; 0.7.7, 24,7 млн; 2026-09-05 Rust OKLab/LCh для тем MDS, градиентов, палитр Chart adopt — 0,5

2.6 Экспорт PDF

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
krilla MIT OR Apache-2.0 (1) ★445; 0.8.2, 2,4 млн; 2026-10-02 Rust meridian-pdf-write: экспорт из списка отображения Write/Sheets/Slides/Draw/Paint/Base; PDF/A, PDF/UA-1, теги, подмножества шрифтов adopt нет шифрования, подписей, PDF/X, линеаризации (README: «out-of-scope») — свой слой (3.4) 8–10
pdf-writer MIT OR Apache-2.0 (1) ★741; 0.15.0, 4,8 млн; 2026-08-17 Rust низкоуровневая запись объектов для своих расширений: словарь /Encrypt, поля форм, PDF/X adopt — 2
subsetter MIT OR Apache-2.0 (1) ★56; 0.2.6, 6,5 млн; 2026-07-23 Rust подмножества TrueType/CFF/CFF2 (через krilla) adopt — 2
typst-pdf Apache-2.0 (1) в составе typst Rust образец сборки дерева тегов: tags/tree/build.rs, таблицы с заголовками tags/context/table.rs, группы tags/groups.rs (≈ 8,8 тыс. строк всего) port фрагментов завязано на модель typst 1

2.7 Правописание, грамматика, тезаурус

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
Hunspell MPL-1.1 / GPL-2 / LGPL-2.1 (2) ★2595; 2026-09-27 C++ эталон формата .aff/.dic; тест-набор (≈ 460 файлов, копия в spellbook/tests/legacy) reference; тесты — вне продукта — —
spellbook MPL-2.0 (2) ★147; 0.4.2, 159 тыс.; 2026-07-11 Rust проверка и подсказки «как Nuspell», no_std, ≈ 11 тыс. строк reference; adopt — только решением владельца alpha; нет морфологии и PHONE; принимает только UTF-8 (6)
nuspell LGPL-3.0 (2) ★274; 2026-09-11 C++ алгоритмы проверки и подсказок reference — —
zspell Apache-2.0 по файлу LICENSE (1); в TSV ошибочно «GPL-3.0» (проверено 2026-10-04) ★63; 0.5.5; 2024-09-03 Rust разбор .aff/.dic, проверка, морфология, стемминг reference; выборочный port разбора нет компаундов, подсказки не готовы; раскрывает все словоформы в память (для ru — сотни МБ) 1
hunspell-rs Apache-2.0 обёртка, но линкует C-Hunspell (2) 0.4.0 (2022) Rust — avoid (убрать из библии) — —
harper-core Apache-2.0 (1) ★16 093; 2.11.0, 119 тыс.; 2026-10-01 Rust грамматика и стиль английского, миллисекунды на документ, WASM adopt (P1) только английский (README, проверено 2026-10-04); происхождение встроенного словаря не проверено 6–8
LanguageTool LGPL-2.1 (2); правила — тоже LGPL ★15 097; 2026-10-01 Java грамматика 30+ языков только отдельный сервер по решению владельца Java-рантайм; набор n-грамм ≈ 16 ГБ —
nlprule код MIT/Apache; бинарные правила LGPL-2.1 из LT 5.2 (2) (проверено 2026-10-04) ★674; 0.6.4 (2021) Rust en/de по правилам LanguageTool avoid заброшен; данные класса 2 —
SymSpell / symspell MIT (1) ★3473 / ★145; 2026 C# / Rust быстрые подсказки по частотному словарю (дополнение к правилам .aff) reference / adopt — 0,5
Vale MIT (1) ★6170 Go стилевые правила (канцелярит, длина предложений) — идеи формата reference — —
Open English WordNet CC-BY-4.0 + WordNet License (1) (проверено 2026-10-04) ★892; 2026-09-03 данные тезаурус en (современнее WordNet 2.1 в пакете LibreOffice) adopt конвертация в свой формат 2

2.8 Шрифты в комплекте (подробно — 3.7)

Шрифт Метрически заменяет Лицензия, RFN Источник Решение
Liberation Sans/Serif/Mono 2.x Arial, Times New Roman, Courier New OFL-1.1; RFN «Liberation» и «Arimo, Tinos, Cousine» (проверено 2026-10-04) ★574; посл. коммит 2022-12 adopt
Carlito Calibri OFL-1.1; RFN «Carlito» (проверено) google/fonts ofl/carlito adopt
Caladea Cambria OFL-1.1; без RFN (проверено) ★20; 2020-02 adopt
Gelasio Georgia OFL-1.1; без RFN (проверено) google/fonts ofl/gelasio adopt
Selawik Segoe UI (приблизительно) OFL-1.1; RFN «Selawik», товарный знак Microsoft (проверено) ★207; 2023-06 только резерв (3.7)
Intos Aptos (заявлено 0 % расхождения ширин) OFL-1.1; без RFN (проверено 2026-10-04) github.com/muglug/intos кандидат после юр. проверки
PT Sans / PT Serif — (русские шаблоны) OFL-1.1; RFN «PT Sans», «PT Serif», «ParaType» (проверено) google/fonts adopt
Noto (все письменности, Noto Sans Math) — OFL-1.1; без RFN (проверено по ofl/notosans, ofl/notosansmath) notofonts adopt (по письменностям, по загрузке)
Inter Segoe UI в интерфейсе OFL-1.1; без RFN (проверено) ★19 920 adopt
JetBrains Mono Consolas OFL-1.1; без RFN (проверено) ★13 048 adopt
STIX Two Text / Math Cambria Math OFL-1.1; RFN «TM Math»; «STIX Fonts™» — товарный знак IEEE (проверено) ★986; 2.12 adopt
Latin Modern Math — GUST Font License (GFL, на базе LPPL-1.3c), не OFL (CTAN, проверено 2026-10-04) CTAN lm-math 1.959 (2014) решение владельца (раздел 4)

2.9 Qt 6, мост Rust↔︎Qt, лента, докинг

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
cxx-qt MIT OR Apache-2.0 (1) ★1547; 0.10.0, 109 тыс.; 2026-09-29 Rust мост Rust↔︎Qt: QObject из Rust, свойства, сигналы, #[qml_element], потоки adopt версии 0.x; стоимость вызовов замерить в E0.2 3–4
qmetaobject-rs MIT (1) ★735; 0.2.10 (2023) Rust — avoid развитие остановилось —
Qt 6.8 LTS (qtbase и др.) LGPL-3.0 / GPL / коммерческая (2 / 4) — C++ оболочка решение владельца (3.6) GPL-only модули не подключать —
SARibbon MIT (1) ★1447; 2026-09-30; CI на Qt 6.8 LTS C++ лента: раскладка групп и кнопок, прокрутка вкладки, «свободный» и «компактный» стили, галереи, контекстные вкладки, настройка ленты port алгоритмов в QML (3.6) только Qt Widgets (QWidget) — в QML-оболочку не встраивается 1,5–2
Qt-Advanced-Docking-System LGPL-2.1 (2) ★2525; 2026-09-10 C++ идеи: перспективы, автоскрытие, плавающие контейнеры reference Widgets и LGPL —
KDDockWidgets GPL-2.0 / GPL-3.0 или коммерческая KDAB (3 / 4) (проверено 2026-10-04) — C++ докинг с поддержкой QtQuick/QML avoid; покупка — по решению владельца — —
FluentUI (QML) MIT (1) ★4601; 2026-04-07 C++/QML образцы QML-контролов (оконная рамка, навигация) reference — 0,5
Slint GPL-3.0 / Royalty-free 2.0 / коммерческая (2–3) ★24 000 Rust — avoid не наш стек —

2.10 Формулы (MOffice Math)

Кандидат Лицензия (класс) Активность Яз. Что даёт MOffice Стратегия Остаётся / риски Экон.
typst math Apache-2.0 (1) ★56 366; 2026-09-30 Rust раскладка по OpenType MATH: fraction.rs, radical.rs, scripts.rs, accent.rs, fenced.rs, table.rs, run.rs, fragment/glyph.rs (растяжимые глифы) port (3.5) завязан на стили и Engine typst; наш AST — MathML Core 6–8
ReX заявлено MIT/Apache в README, файлов лицензии в репозитории нет, в Cargo.toml поля license нет ★114; 2020-07-15 Rust раскладка TeX-формул reference юридически мутно, заброшен —
MathCAT MIT (1) ★119; 0.7.5, 115 тыс.; 2026-10-02 (проверено 2026-10-04) Rust речь (15 языков, есть русский), Брайль (Nemeth, UEB и др.), навигация по формуле; используется в NVDA и JAWS adopt правила ClearSpeak для ru проверить с носителями 8–12
KaTeX MIT (1) ★20 422; 2026-10-02 TS таблицы символов и макросов LaTeX, тест-набор port таблиц / reference — 1
Temml MIT (1) ★349; 2026-08-28 JS LaTeX → MathML Core (окружения, \tag, \label) port / reference — 2
MathJax Apache-2.0 (1) ★2401; 2026-10-02 TS эталон разбора LaTeX и AsciiMath; правила речи SRE (MathJax-SRE отдельно, не проверено) reference — —
math-core MIT (1) ★43; 0.8.2; 2026-10-02 (проверено) Rust LaTeX → MathML Core на Rust reference / adopt после оценки молодой проект 1–2
pulldown-latex MIT (1) 0.8.0, 80 тыс.; 2026-07-28 (проверено) Rust потоковый разбор LaTeX → MathML reference — —
latex2mathml (Rust) MIT (1) 0.2.3, 114 тыс.; 2020-04 Rust — avoid заброшен —
MathLive MIT (1) ★2165; 2026-09-30 TS эталон поведения визуального редактора (курсор, заполнители, линейный ввод) reference — —
unicode-math-class / codex (из typst) MIT OR Apache-2.0 / Apache-2.0 (1) (не проверено) — Rust классы символов (Bin/Rel/Op), таблицы имён символов adopt — 0,5

3. Глубокие разборы

3.1 Правописание «под нашей лицензией»: свой Hunspell-совместимый движок, словари, тезаурус, грамматика

Почему свой движок. Все зрелые реализации формата Hunspell — класса 2: Hunspell (MPL-1.1/GPL-2/LGPL-2.1), nuspell (LGPL-3), spellbook (MPL-2.0). Указанный в библии hunspell-rs — Apache-обёртка, но линкует C-Hunspell, то есть тоже класс 2. Единственная разрешительная реализация — zspell (Apache-2.0; TSV ошибочно пишет «GPL-3.0»), но в ней нет компаундов, подсказки не готовы, а все словоформы раскрываются в хеш-таблицу (для русского это сотни мегабайт). Вывод: пишем kernel/crates/meridian-spell (класс ★), формат .aff/.dic не охраняется — это данные и документация (hunspell(5)). Разрешённые источники знаний: страница hunspell(5), поведение Hunspell как «чёрного ящика», серия статей zverok «Rebuilding the spellchecker» (на неё ссылается README spellbook), разбор .aff из zspell (port с уведомлением Apache-2.0). Код spellbook и nuspell читать можно, копировать нельзя.

Что реально используют словари (подсчёт директив по клонам LibreOffice_dictionaries):

Словарь Директивы .aff (число строк) Вывод
ru_RU/ru_RU.aff (146 270 основ) SFX 1 606, TRY, SET UTF-8 только суффиксы — русская проверка дешёвая
en/en_US.aff (49 568 слов) REP 91, SFX 59, PFX 14, COMPOUNDRULE 3, ICONV 2, ONLYINCOMPOUND, NOSUGGEST, WORDCHARS COMPOUNDRULE нужен для «1st, 22nd»
uk_UA/uk_UA.aff SFX 5 804, ICONV 65, MAP 2, BREAK 2, IGNORE нормализация апострофов через ICONV
be_BY/be-official.aff SFX 10 000, FLAG длинные флаги
fr_FR/dictionaries/fr.aff SFX 5 343, PFX 215, REP 111, ICONV 43, MAP 26, BREAK 8, OCONV, KEY, CIRCUMFIX, NEEDAFFIX, FULLSTRIP, KEEPCASE, FORBIDDENWORD почти весь «аффиксный» набор
de/de_DE_frami.aff SFX 437, PFX 68, REP 29, MAP 8, COMPOUNDBEGIN/MIDDLE/END, COMPOUNDPERMITFLAG, CHECKSHARPS, CIRCUMFIX, NEEDAFFIX компаунды обязательны

Что поддержать из формата (по фазам; A — для ru/en/uk/be/pl/nl/tr, B — de/fr/nl/sv/da/nb, C — hu и морфология):

Группа Директивы Фаза
Заголовок и кодировки SET (UTF-8, ISO8859-1…15, KOI8-R/U, CP1251), FLAG (символ / long / num / UTF-8), AF/AM (псевдонимы флагов и морфологии), LANG, IGNORE, WORDCHARS, BREAK, COMPLEXPREFIXES A
Аффиксы PFX/SFX: отсечение, добавка, условие (классы символов), флаги продолжения (два уровня суффиксов + префикс), перекрёстное произведение Y/N; CIRCUMFIX, NEEDAFFIX, FULLSTRIP, KEEPCASE, FORCEUCASE, CHECKSHARPS, FORBIDDENWORD, NOSUGGEST, SUBSTANDARD, WARN/FORBIDWARN, ONLYINCOMPOUND A (PFX/SFX), B (остальное)
Компаунды COMPOUNDFLAG, COMPOUNDBEGIN/MIDDLE/END/ROOT, COMPOUNDPERMITFLAG/FORBIDFLAG, COMPOUNDRULE (регулярные выражения над флагами), COMPOUNDMIN, COMPOUNDWORDMAX, CHECKCOMPOUNDDUP/REP/CASE/TRIPLE/PATTERN, SIMPLIFIEDTRIPLE, COMPOUNDMORESUFFIXES; COMPOUNDSYLLABLE, SYLLABLENUM (венгерский) A (COMPOUNDRULE), B, C
Подсказки TRY, KEY (соседние клавиши), REP (с якорями ^ $ и _ = пробел), MAP (родственные символы), PHONE (фонетика), MAXCPDSUGS, MAXNGRAMSUGS, MAXDIFF, ONLYMAXDIFF, NOSPLITSUGS, SUGSWITHDOTS; алгоритмы правок (вставка, удаление, перестановка, замена, удвоение), разбиение на два слова, n-граммы, восстановление регистра A (правки, REP/MAP/KEY/TRY), B (n-граммы, PHONE)
Преобразования ICONV (нормализация ввода: апострофы, составные символы), OCONV (вывод подсказок) A
Морфология поля st: po: al: ph: is: ts: ds: ip: tp: sp: pa: dp:; API analyze, stem, generate — для поиска по словоформам, тезауруса по лемме и правил грамматики B (stem), C (generate)
Пользовательские данные личный словарь с «образцом склонения» (как add_with_affix), «пропустить всё», исключения; импорт .dic LibreOffice, custom.dic Word (UTF-16), расширений .oxt A

Устройство. Компиляция .aff/.dic → двоичный .mspell (основы в FST или идеальном хеше, таблицы аффиксов — деревья по условиям, отображение в память; загрузка ru < 50 мс); проверка по схеме Hunspell/Nuspell (классификация регистра → ICONV → BREAK → отсечение аффиксов → компаунды → запреты); подсказки с бюджетом времени (≤ 50 мс, асинхронно в Write); no_std + alloc ради WASM. Соответствие: тест-набор Hunspell (*.aff/*.dic/*.good/*.wrong/*.sug, лицензия на выбор MPL — хранится в tests/third_party/, в продукт не попадает) и дифференциальный фаззинг против бинарника hunspell в CI (только как оракул, не распространяется).

Трудоёмкость: фаза A — 3–4 чел.-мес.; B — 2,5–3; C — 1–1,5; тесты и фаззинг — 1. Итого 7,5–9,5 (порт разбора из zspell экономит ≈ 0,5). Если владелец разрешит spellbook как неизменённую зависимость (класс 2), интеграция — ≈ 1 чел.-мес., морфологию дописывать отдельно; экономия ≈ 6 чел.-мес. ценой MPL-исключения в deny.toml.

Словари: что в установщик, что по решению, что только загрузкой. Брать из первоисточников (SCOWL, sjp.pl, OpenTaal), а не из пакетов LibreOffice: в en/ лежит license.txt с текстом GPLv2 без указания, к чему он относится, и устаревший README.txt (2010) про LGPL. Лицензии ниже — по README в клоне и частичному клону LibreOffice/dictionaries (коммит 32b006a от 2026-08-22) и по таблице wooorm/dictionaries (проверено 2026-10-04).

Язык Источник (файл в клоне / первоисточник) Лицензия Кл. Решение
ru ru_RU/README_ru_RU.txt (А. Лебедев, 1997–2008) BSD-3-подобная + «изменённые версии помечать» 1 установщик
en-US, en-CA, en-AU en/README_en_US.txt → SCOWL (K. Atkinson) разрешительная SCOWL + PD (12dicts, MWords) + WordNet 1.6 + BSD (Ispell) 1 установщик
en-GB SCOWL en_GB-ise/-ize SCOWL (у wooorm — «MIT AND BSD», проверено 2026-10-04) 1 установщик; вариант LibreOffice (README_en_GB.txt, M. Pinto) — LGPL, не брать
en-ZA en/README_en_ZA.txt LGPL 2 заменить en-GB
pl SJP.PL, выпуск 2026-09-01 на выбор GPL-2 / LGPL-2.1 / MPL-1.1 / CC BY 4.0 / Apache-2.0 (проверено 2026-10-04) 1 установщик (Apache-2.0)
nl OpenTaal BSD-3-Clause или CC-BY-3.0 (проверено по wooorm) 1 установщик
tr hunspell-tr (dictionary-tr у wooorm) MIT (в LibreOffice tr_TR/README.txt — MPL-2.0) 1 установщик (вариант MIT)
nb, nn no/README v3.0: списки из Ordbanken (CC BY 4.0) и CLARIN PUB+BY, но .aff — spell-norwegian (GPL-2) смешанная 1 / 3 собрать свои .aff/.dic из Ordbanken (≈ 0,5 чел.-мес.)
lt, ka, fa, tk wooorm BSD-3 / MIT / Apache-2.0 / Apache-2.0 1 установщик по региону
fr fr_FR/dictionaries/README_dict_fr.txt (Grammalecte) MPL-2.0 2 решение владельца
uk uk_UA/README_uk_UA.txt MPL-1.1 (dict_uk у wooorm — GPL-3.0) 2 решение владельца
be be_BY/README_be_BY.txt CC BY-SA 4.0 или LGPL-3 2 решение владельца (LGPL)
es, pt-PT, da, el es/README_hunspell_es.txt, pt_PT/…, da_DK/…, el_GR/… тройные GPL/LGPL/MPL-1.1 2 решение владельца (MPL)
pt-BR, hu pt_BR/README_pt_BR.txt, hu_HU/README_hu_HU.txt LGPL-3 или MPL(-2.0) 2 решение владельца
kk myspell-kk (в LibreOffice/dictionaries нет) GPL-2+ / LGPL-2.1+ / MPL-1.1+ (поиск, 2026-10-04) 2 решение владельца
sv wooorm dictionary-sv LGPL-3.0 2 решение владельца
de, de-AT, de-CH de/README_extension_owner.txt (igerman98 + frami) GPL-2/GPL-3 или «OASIS 0.1» — та разрешает только программам, чей основной формат ODF, и без изменений (de/COPYING_OASIS.txt) → не наш случай 3 загрузка по запросу из первоисточника
it, cs, he it_IT/README_it_IT.txt, cs_CZ/README_en.txt, wooorm GPL-3 / GPL-2 / AGPL-3 3 загрузка по запросу
fi словаря Hunspell нет (Voikko) — — вне плана

Итог для E1.7 («20 словарей в комплекте»): без решений владельца в установщик идут ru, en-US/GB/CA/AU, pl, nl, tr (+ nb/nn после своей сборки); с разрешением «словари MPL/LGPL отдельными неизменёнными файлами» — ещё fr, uk, es, pt-BR, pt-PT, da, el, kk, sv, be; de/it/cs — только загрузка пользователем из первоисточника.

Тезаурус. en — Open English WordNet (CC-BY-4.0 + WordNet License, класс 1; современнее th_en_US_v2.dat, который построен на WordNet 2.1 — en/WordNet_license.txt, тоже допустим). ru — готового разрешительного нет: th_ru_RU_M_aot_and_v2.dat — LGPL-2.1 (ru_RU/README_thes_ru_RU_M_aot_and_v2.txt; AOT + словарь Абрамова в оцифровке М. Королёва), YARN — CC BY-SA (3), RuWordNet/RuThes — только некоммерческое использование (3) (оба — поиск, проверено 2026-10-04), RDT (nlpub/rdt) — код Apache-2.0, лицензия данных не проверена, к тому же это «похожие слова», а не синонимы. Предложение: собрать свой русский тезаурус из оригинала словаря Н. Абрамова (1911; общественное достояние — автор умер в 1914, не проверено юристом) с переводом в современную орфографию, плюс лексемы Викиданных (CC0), под контролем лингвиста — 2–3 чел.-мес.; до готовности — LGPL-файл AOT как отдельные данные по решению владельца. de — OpenThesaurus (LGPL-2.1+), fr/es — LGPL-2.1, uk — GPL/LGPL/MPL (все класс 2); pt-PT — Onto.PT (CC-BY-3.0, класс 1).

Грамматика. Английский — harper-core (Apache-2.0) в процессе, P1. Русский — свой meridian-grammar: токены ICU, морфология из meridian-spell, декларативные правила (шаблоны токенов + регулярные выражения + подсказка + категория); стартовый набор 150–200 правил пишет лингвист по справочникам (кавычки «ёлочки», тире и неразрывные пробелы, «в течение/в течении», повтор слов, пробелы у знаков препинания) — факты языка не охраняются, а правила LanguageTool и Lightproof (ru_RU/README_Lightproof_ru_RU.txt: MPL-1.1/GPL/LGPL) не копируем. Оценка: движок 2 чел.-мес. + правила 3–4. LanguageTool — только как внешний сервер, к которому клиент Lingo обращается по HTTP-протоколу /v2/check (протокол не охраняется): сами LT не поставляем, организация может подключить свой сервер (Enterprise). Это снимает вопрос LGPL при сохранении совместимости, обещанной в E1.7.

3.2 Переносы: лицензии TeX-шаблонов по языкам

Заголовки прочитаны во всех 88 файлах hyph-utf8/tex/generic/hyph-utf8/patterns/tex/hyph-*.tex репозитория tex-hyphen (коммит 5684c0f от 2026-02-24, проверено 2026-10-04). В крейте hyphenation (patterns/*.pat.txt) заголовки вырезаны, README отсылает к первоисточнику. В hypher файлы хранятся с заголовками (patterns/hyph-*.tex).

Язык Файл Авторы Лицензия Кл. Что в LibreOffice (для сравнения)
ru hyph-ru.tex (2003) A. I. Lebedev LPPL-1.2+ (не PD, как ошибочно в 12-license-policy.md §1) 1* hyph_ru_RU.dic — лицензия в README не указана → не брать
en-us hyph-en-us.tex (2005) G. Kuiken (на основе Liang) «копирование и распространение с изменениями или без… при сохранении уведомления» (FSF All-Permissive) 0–1 README_hyph_en_US.txt — BSD-подобная
en-gb hyph-en-gb.tex (1992–2016) D. Wujastyk, G. Toal MIT 1 hyph_en_GB.dic основан на старом ukhyphen.tex: изменения только под другим именем файла, исходный список слов — © OUP (README_hyph_en_GB.txt) → брать версию hyph-utf8
de (1996, 1901, de-CH) hyph-de-1996.tex (2024-02-28) Trennmustermannschaft (Hennig, Lemberg, Milde и др.) MIT 1 hyph_de_*.dic — LGPL-2.1+ (2)
fr hyph-fr.tex v2.13 Flipo, Gaulle, Reutenauer MIT 1 hyph_fr.dic — LGPL (адаптация), исходник hyph-fr.tex — MIT (README_hyph_fr.txt)
uk hyph-uk.tex (2001) M. Polyakov MIT или LPPL на выбор 1 hyph_uk_UA.dic — GPL-2+ (3)
kk hyph-kk.tex v0.1 (2025–2026) Miklavec, Ermers, Rosendahl Public domain 0 — (в hyphenation и hypher казахского нет — добавляем сами)
be hyph-be.tex 1.01 (2016) M. Salau MIT 1 hyph_be_BY.dic — CC BY-SA 4.0 или LGPL-3 (2)
es hyph-es.tex — MIT/X11 1 GPL-3/LGPL-3/MPL-1.1
it hyph-it.tex — LPPL-1.3+ или MIT 1 LGPL
pt hyph-pt.tex — BSD-3-Clause 1 pt_PT — GPL
pl hyph-pl.tex — MIT 1 LGPL-2.1
tr hyph-tr.tex — LPPL-1+ 1* —
nl hyph-nl.tex — MIT 1 —
sv hyph-sv.tex — LPPL-1.2+ 1* MPL/LGPL-3+
da hyph-da.tex — LPPL-1.3+ или MIT 1 —
nb, nn, no hyph-nb.tex, hyph-no.tex Kleveland, Selberg, Hufthammer FSF All-Permissive 0–1 GPL
fi hyph-fi.tex (1989) K. Saarinen «Patterns may be freely distributed» — права на изменение не названы 1* —
el (монотоника) hyph-el-monoton.tex — LPPL или MIT 1 LGPL
cs hyph-cs.tex — GPL-2+ 3 GPL (в hypher — другой файл hyph-cs-sojka.tex, лицензия не проверена)
hu hyph-hu.tex B. Nagy MPL-1.1 / GPL-2 / LGPL-2.1 2 —

* LPPL и «свободно распространяемые без права изменения» не названы в политике. По сути это разрешительные условия для данных (как OFL для шрифтов): распространять можно, изменённый файл — под другим именем и с уведомлением. Предложение (раздел 7): внести LPPL-1.3c и FSF All-Permissive в класс 1 для данных, а шаблоны не менять — свои исключения хранить отдельным списком. Прочие GPL-only шаблоны в tex-hyphen: id, mk, sr-cyrl; с выбором MIT (брать MIT): ga, индийские языки (as, bn, gu, hi, kn, ml, mr, or, pa, ta, te).

Реализация. Форк hypher (MIT/Apache) в kernel/crates/meridian-hyph: автоматы строятся при сборке из .tex-файлов, выбор языков — функциями Cargo; добавить en-gb и kk, пользовательские исключения и LEFTHYPHENMIN/ RIGHTHYPHENMIN из стилей документа (Word хранит «зону переноса» и «макс. переносов подряд» — это уже раскладка). Заголовки лицензий собираются скриптом сборки в THIRD_PARTY/hyphenation/<lang>.txt и в окно «О программе». Нестандартные переносы (немецкое «Schiff-fahrt», венгерский) — фаза 3+, по статье L. Németh (TUGboat 27/1).

3.3 Раскладка абзаца: parley vs cosmic-text vs своя; Кнут–Пласс из typst

Критерий (требования E0.3/E1.2) parley 0.11 cosmic-text 0.19 своя text-layout на готовых крейтах
Шейпинг, шрифты, резерв harfrust + skrifa + fontique (README клона) свой буфер, растеризация swash harfrust + skrifa + fontique — те же кирпичи
BiDi, сегментация есть (parley_engine/src/bidi.rs, ICU4X) есть unicode-bidi + icu_segmenter
Перенос строк жадный, свойства CSS (WordBreak, OverflowWrap, TextWrapMode) жадный жадный «как Word» + оптимальный (Кнут–Пласс)
Переносы по словарю нет (только мягкий перенос, shaped_text.rs) нет meridian-hyph
Выравнивание по ширине только межсловные пробелы (layout/alignment.rs) простое пробелы + межбуквенное (как «распределить» Word) + сжатие пробелов
Интервалы Word (точно/минимум/множитель), табуляции с заполнителями, обтекание, сноски, висячие строки, w:compat нет нет пишем (E1.2)
Встроенные объекты, редактирование inline boxes, PlainEditor редактор свои (модель — piece table)
Лицензия, зрелость Apache-2.0 OR MIT; ★744; активен MIT OR Apache-2.0; ★2154 наша

Решение: своя text-layout (совместимость с Word нельзя получить без собственной модели строки), но без собственного шейпинга, Unicode и шрифтов. Из parley переносим (Apache/MIT, port с уведомлением) итемизацию и анализ (parley_engine/src/{analysis,analyzer,itemize}.rs) и сверяем выравнивание с parley/src/layout/alignment.rs; cosmic-text — только reference.

Кнут–Пласс из typst. Файл crates/typst-layout/src/inline/linebreak.rs (1 070 строк, Apache-2.0, коммит e58a63a от 2026-09-30) содержит:

План порта: перенести алгоритм (не модуль) в kernel/crates/text-layout/src/linebreak/optimal.rs, заменив Preparation/Engine typst нашей моделью «прогонов» и метриками строк; параметры (стоимость переноса, висячих строк, допуск растяжения) вынести в настройки абзаца; жадный режим оставить по умолчанию (так ломает строки Word), оптимальный — флаг «Выравнивание по ширине — качественное» и режим Publisher. Оценка 1–1,5 чел.-мес. против 2,5–3 с нуля. Уведомление (Apache-2.0 §4): в начале файла — «Portions derived from Typst (https://github.com/typst/typst), crates/typst-layout/src/inline/linebreak.rs, © The Typst Project Developers, Apache License 2.0; modified by MOffice: …», в NOTICE — строка о typst и текст Apache-2.0 в «О программе». Сторонние уведомления из NOTICE typst (colors.css — MIT, переводы Babel — LPPL, Skia — BSD, LLVM) к этому файлу не относятся и не переносятся.

3.4 Экспорт PDF через krilla: PDF/A, PDF/UA, теги, шрифты

Проверено по клону LaurenzV_krilla (коммит bdefa10 от 2026-10-02). Требования — docs/apps/write.md (алгоритм 5.26, диалог WR-61, критерий «veraPDF: 0 ошибок PDF/A-2b и PDF/UA-1, PAC 2024») и docs/apps/pdf.md (2.11, 5.13).

Требование krilla Что дописываем мы
Шрифты: подмножества TrueType/CFF, Type0 + CIDFont, Identity-H, ToUnicode из кластеров шейпинга (лигатура → несколько символов) есть: subsetter, src/text/cid.rs; режимы PDF/A и UA требуют сопоставления глифов с текстом и проверяют его передавать текст кластеров вместе с глифами (низкоуровневый API глифов)
PDF/A-1b, 2b, 2u, 3b (WR-61); 1a/2a/3a (P2) Validator::A(..): A1_A, A1_B, A2_A, A2_B, A2_U, A3_A, A3_B, A3_U, A4, A4F, A4E (src/configure/validate.rs); соответствие пунктам ведётся в src/configure/PDF_A1.md…PDF_A4.md (A-1: 58 пунктов проверяются кодом, 32 — «не поддерживается, значит выполнено», 7 — на совести вызывающего) для A-1 krilla не сводит прозрачность сама, а выдаёт ошибку → растрирование фрагментов с альфой (300 dpi) делаем до вызова; A-3: исходник .mwx — EmbeddedFile с AssociationKind::Source (src/interchange/embed.rs) — есть
PDF/UA-1, теги из структуры документа Validator::Ua(UA1); теги (interchange/tagging/generate.toml): Part, Article, Section, Div, BlockQuote, Caption, TOC, TOCI, Index, P, Hn, L, LI, Lbl, LBody, Table, TR, TH, TD, THead, TBody, TFoot, Span, InlineQuote, Note, Reference, BibEntry, Code, Link, Annot, Figure, Formula, Form, Datetime, Terms, Title, Strong, Em; атрибуты AltText, ActualText, Lang, заголовки ячеек; артефакты отображение нашей модели в дерево тегов (образец — typst-pdf/src/tags/*); 26 пунктов UA помечены 🟣 «обеспечивает пользователь» (смысловая разметка) — их проверяет наша «Проверка доступности» Write
Закладки из заголовков, ссылки, именованные назначения, метки страниц, XMP (pdfaid, pdfuaid), OutputIntent есть (interchange/outline.rs, interactive/destination.rs, metadata.rs, xmp-writer) —
Комментарии как аннотации /Text, /Highlight нет: AnnotationType = только Link и Widget (src/interactive/annotation.rs) добавить разметочные аннотации в форке или постобработкой через pdf-writer (≈ 0,5 чел.-мес.)
Поля форм (Forms → PDF) Widget, src/interactive/form.rs —
Шифрование AES-256 (R6), права нет (README: «encryption or digital signatures… out-of-scope») свой проход meridian-pdf-crypt по ISO 32000-2 (≈ 1 чел.-мес.); PDF/A шифрование запрещает — предупреждение в диалоге
Подписи PAdES, линеаризация, PDF/X-1a/3/4 нет (рамки TrimBox/BleedBox есть: src/page.rs; CMYK, Separation, ICC — src/graphics/color.rs) подписи и линеаризация — модуль PDF (pdf.md 5.x); проверка PDF/X — своя (P2)
Изображения JPEG без перекодирования, PNG, GIF, WebP; SVG векторно есть (krilla-svg) —
Прозрачность, маски, режимы наложения, градиенты (линейный, радиальный, конический), узоры есть —
Цветные шрифты (эмодзи), вариативные шрифты есть: COLR/SVG/sbix/CBDT → Type3 (src/text/type3.rs), Font::new_variable —
Формулы: /Formula + /Alt, MathML как Associated File (PDF 2.0, math.md P1) тег Formula и Alt есть; AF на уровне документа есть, на уровне элемента структуры — не проверено при необходимости — правка в форке
Скорость: страницы параллельно функция rayon —

Вывод: krilla закрывает ≈ 80 % пунктов диалога экспорта Write (WR-61; нет только «комментарии как аннотации» и «безопасность») и всю «трудную» часть (шрифты, соответствие стандартам с проверками, теги); для приложения PDF (подписи, линеаризация, правка существующих файлов) он не замена — это зона lopdf/своего кода. Стратегия — adopt с возможностью форка (MIT OR Apache-2.0, правки публиковать не нужно); свои слои: шифрование, разметочные аннотации, сведение прозрачности для A-1, валидация veraPDF в CI. Нюанс NOTICE.md krilla: метод content_draw_path (src/content.rs) «взят из resvg» в период, когда resvg был под MPL; фрагмент тривиален (перевод квадратичной кривой в кубическую по стандартной формуле) — в форке переписать за минуты, в остальном NOTICE содержит заимствования из typst, svg2pdf, vello (Apache-2.0) — включить в наш NOTICE.

3.5 MOffice Math: раскладка typst, ReX, LaTeX, MathCAT

Требования docs/apps/math.md: раскладка по TeXbook (прил. G) с таблицей OpenType MATH (56 констант), ввод палитрами, UnicodeMath (UTN #28), LaTeX (подмножество), AsciiMath (P1); форматы OMML, MathML (Presentation 1–4, Core), StarMath; озвучивание MathSpeak/ClearSpeak ru/en (P1), навигация по дереву (P0), /Formula в PDF/UA (P1).

Раскладка — порт typst (Apache-2.0). Что лежит в crates/typst-layout/src/math/ (коммит e58a63a):

Файл Строк Что переносим
mod.rs 649 входы layout_equation_inline/block, нумерация add_equation_number, выбор математического шрифта, предупреждение о шрифте без MATH
fraction.rs 188 дроби и биномы по константам Fraction*
radical.rs 152 корни со степенью (Radical*)
scripts.rs 452 индексы, пределы, штрихи (правила 18a–f TeXbook через Subscript*/Superscript*)
accent.rs, line.rs, cancel.rs 95 / 80 / 148 акценты, над/подчёркивания, зачёркивания (m:borderBox)
fenced.rs 103 растяжимые скобки \left…\right, m:d
table.rs 239 матрицы, cases, точки выравнивания (m:eqArr)
run.rs 373 межатомные интервалы по классам Ord/Op/Bin/Rel/Open/Close/Punct
shaping.rs, text.rs 241 / 144 шейпинг математического текста (ssty, flac)
fragment/glyph.rs 721 варианты и сборка растяжимых глифов (GlyphAssembly)

Плюс промежуточное представление crates/typst-library/src/math/ir/{item,process,resolve,multiline}.rs (3,3 тыс. строк) — образец перехода «дерево → боксы». При порте: вместо Engine/StyleChain/Frame typst — наш AST (MathML Core + расширения m:*) и список отображения; ttf_parser::math и rustybuzz → read-fonts (таблица MATH) и harfrust. Дописываем сами: фантомы m:phant, m:box, перенос длинных выключных формул по m:mathPr (brkBin, wrapIndent), настройки Word (smallFrac, dispDef, interSp), эвристики для шрифтов без MATH. Оценка: порт 3–4 чел.-мес. + дополнения 2–3 против 10–14 с нуля → экономия 6–8.

ReX (ReTeX_ReX, последний коммит 2020-07-15): README заявляет «MIT и Apache-2.0, с частями под различными BSD-подобными лицензиями», но файлов LICENSE-APACHE/LICENSE-MIT в репозитории нет, поля license в Cargo.toml нет, а fonts/stix2/src/*.rs (≈ 12 тыс. строк) — таблицы, сгенерированные из шрифта STIX. Только reference.

Разбор входа.

Озвучивание и Брайль — MathCAT (MIT, Rust). Вход — MathML, выход — текст речи с командами синтезатора, Брайль (Nemeth, UEB Technical, CMU и др.), навигация по формуле; языки речи: китайский (трад.), английский, финский, французский, немецкий, греческий, венгерский, индонезийский, норвежский, польский, португальский, русский, испанский, шведский, вьетнамский (README, проверено 2026-10-04); используется в NVDA и JAWS. Правила речи — YAML-данные в том же репозитории (MIT). Закрывает math.md 5.7 и /Alt формул для PDF/UA; наши задачи — UIA MathML-шаблон (Windows), AXMathEquation (macOS), AT-SPI (Linux) и проверка русских правил носителями. Набор стилей (ClearSpeak/SimpleSpeak; полный MathSpeak) — проверить при интеграции. Экономия 8–12 чел.-мес.

Шрифты формул: STIX Two Math (OFL, RFN «TM Math») — по умолчанию; Noto Sans Math (OFL, без RFN); Latin Modern Math — GFL (раздел 4); Fira Math, Libertinus Math, XITS Math, Garamond Math — не проверялись, в установщик не включать до проверки.

План по фазе 4 (I13–I18 из 08-roadmap.md): I13 — AST и порт раскладки; I14 — LaTeX/UnicodeMath, визуальный редактор; I15 — OMML/MathML/StarMath; I16 — интеграция в Write/Slides, PDF-теги; I17 — MathCAT (P1, релиз 2.7).

3.6 Qt: GPL-only модули, коммерческая лицензия, cxx-qt, лента и докинг

Официальный список (doc.qt.io/qt-6.8/licensing.html, проверено 2026-10-04): «для открытой Qt некоторые модули доступны не под LGPLv3, а только под GPL». Для Qt 6.8 LTS:

GPL-only модуль Qt 6.8 Нужен MOffice? Замена (класс 0–1 или своё)
Qt Charts, Qt Graphs, Qt Data Visualization диаграммы во всех приложениях MOffice Chart на Skia (уже в плане; порт d3/ECharts — отчёт по charts)
Qt Virtual Keyboard сенсорный ввод экранные клавиатуры ОС (Windows Touch Keyboard, macOS «Клавиатура универсального доступа», Linux — через метод ввода)
Qt Lottie Animation анимации в Slides, иллюстрации rlottie (MIT, в карте компонентов) или velato (linebender, не проверено)
Qt Quick Timeline анимации интерфейса стандартные Animation/Behavior/State Qt Quick (LGPL)
Qt Quick 3D, Qt Quick 3D Physics 3D-модели в Slides (P2) не используем; при необходимости — свой рендер glTF
Qt Network Authorization (OAuth 2) вход в MOffice ID, облака Rust oauth2/openidconnect (уже в карте компонентов)
Qt HTTP Server локальные службы (брокер, надстройки) axum/hyper в Rust
Qt GRPC — tonic/prost в Rust при необходимости
Qt MQTT, Qt CoAP, Qt Wayland Compositor нет —
Qt Qml Compiler (qmlsc — компиляция QML в C++) производительность QML открытый qmlcachegen (байт-код) + тяжёлая логика в Rust/C++; замерить в спайке E0.2

В актуальной документации (Qt 6.12) список изменился: исчезли Charts и Data Visualization, добавился Qt Canvas Painter — при переходе на следующую LTS список перепроверять. Помимо этого, на пути LGPL: только динамическая линковка, без правок Qt (или с публикацией правок), предложение исходников точной версии Qt, тексты лицензий в «О программе»; Qt Multimedia — только с LGPL-сборкой FFmpeg; инструменты Qt (moc, rcc и др.) — GPL с исключением Qt GPL exception 1.0, на сгенерированный код не влияют.

Коммерческая Qt (qt.io, проверено 2026-10-04): «Qt for Small Business» — Qt for Application Development Enterprise за 546 € (618 $) в год за место, но только при выручке и привлечённых инвестициях компании ≤ 1 млн € и не более 3 мест, поддержка — 5 обращений в год. Команде MOffice (до 11 Qt-инженеров по таблице 2.2 дорожной карты, бюджет проекта заведомо больше 1 млн €) это не подходит. Стандартная цена на сайте не публикуется (по запросу); в дорожной карте заложено 60–75 тыс. в год за 12–15 мест (≈ 5 тыс. за место) — правдоподобно, но не подтверждено. Риск подписки: при прекращении оплаты теряется право пользоваться инструментами и выпускать новые версии на коммерческой Qt (страница Small Business прямо об этом говорит) — путь LGPL от этого не зависит. Рекомендация: стартовать на LGPL (решение библии), коммерческую лицензию рассматривать только ради Qt Qml Compiler или если понадобится статическая линковка (например, для веб-версии на Qt for WebAssembly).

cxx-qt (KDAB, MIT OR Apache-2.0, 0.10.0, 2026-09-29) — adopt: #[cxx_qt::bridge] с QObject, свойствами, сигналами и #[qml_element], потокобезопасные обновления из Rust в Qt; экономия 3–4 чел.-мес. против своего моста. Риски: версии 0.x, ломающие изменения; цена вызова и передача буферов (Skia-текстура → QQuickItem) — замер в E0.2.

Лента. SARibbon (MIT, CI на Qt 6.8 LTS) построен на QWidget (src/SARibbonBar/SARibbonBar.h: SARibbonBar(QWidget* parent)), а оболочка MOffice — Qt Quick (QML). Виджет в сцену QML не встраивается (наоборот — можно, через QQuickWidget), поэтому «fork» из карты компонентов невозможен без смены оболочки на Widgets. Переносим алгоритмы (MIT, port с уведомлением) в QML/C++-компонент shell/ribbon: раскладку элементов группы по рядам (крупные/малые кнопки) — SARibbonPanelLayout.cpp (1 863 строки), размещение групп на вкладке с прокруткой при нехватке ширины — SARibbonCategoryLayout.cpp (1 425), общую раскладку ленты в «свободном» и «компактном» стилях — SARibbonBarLayout.cpp (1 993, resizeInLooseStyle/resizeInCompactStyle), модель настройки ленты — SARibbonCustomizeData.cpp (1 037), галереи — SARibbonGallery*.cpp (2 100), контекстные вкладки — SARibbonContextCategory.cpp. Сворачивание группы в одну кнопку, как в Office, при порте проверить и при необходимости дописать. Оценка: своя лента 4–6 чел.-мес., с портом алгоритмов 3–4 → экономия 1,5–2. Рамка окна без системного заголовка: в SARibbon используется подмодуль QWindowKit (в клоне пуст, лицензия не проверена). Юридическая сторона «ленты» (патенты/дизайн Microsoft) — заключение в фазе 0 по политике §6.

Докинг. Qt-ADS — LGPL-2.1 и QWidget (класс 2, только идеи: перспективы, автоскрытие, плавающие контейнеры, индикаторы сброса). KDDockWidgets поддерживает QtQuick, но GPL-2.0/GPL-3.0 или коммерческая лицензия KDAB (проверено 2026-10-04) — открытый вариант запрещён, покупка — класс 4. Рекомендация: свой докинг на QML (боковые панели, вкладки панелей, плавающие окна, сохранение раскладки) — 3–4 чел.-мес.; запрос цены KDAB — как запасной вариант для решения владельца.

3.7 Шрифты: лицензии, Reserved Font Name, метрические клоны

Лицензии подтверждены по файлам OFL.txt в google/fonts (частичный клон, коммит 9710da1 от 2026-09-30), LICENSE Liberation и Selawik, CTAN (lm-math, stix2-otf) — таблица 2.8. Все шрифты раздела 4 библии — OFL-1.1, кроме Latin Modern Math (GUST Font License).

Правило Reserved Font Name (OFL-1.1, п. 3). Изменённую версию шрифта нельзя называть зарезервированным именем. Имена с RFN: Liberation (и Arimo/Tinos/Cousine), Carlito, PT Sans / PT Serif / ParaType, Selawik (плюс товарный знак Microsoft), STIX — RFN «TM Math» и товарный знак IEEE «STIX Fonts™». Без RFN: Caladea, Gelasio, Inter, JetBrains Mono, Noto (включая Noto Sans Math), Intos. Практические следствия для MOffice:

  1. Шрифты ставим неизменёнными и под своими именами — документы ссылаются на «Carlito», замена Calibri→Carlito делается таблицей подстановки, а не переименованием.
  2. Если понадобится доработка (компенсация ширин, недостающие глифы, кириллица для Selawik) — только в шрифте с новым именем (например, «MOffice Sans»), с сохранением OFL и уведомлений.
  3. Продавать шрифты отдельно нельзя (п. 1 OFL); в составе программы — можно. Подмножества шрифтов внутри PDF — обычная практика встраивания в документ (документы под OFL не подпадают); формулировку FAQ OFL о подмножествах с RFN юристу перепроверить (не проверено).

Метрические клоны.

Шрифт Office Клон Статус
Arial, Times New Roman, Courier New Liberation Sans / Serif / Mono метрически совместимы (назначение проекта)
Calibri / Cambria Carlito / Caladea метрически совместимы
Georgia Gelasio метрически совместим (описание проекта)
Aptos (по умолчанию в Office с 2024) Intos (github.com/muglug/intos) OFL-1.1 без RFN; семейства Intos, Intos Display, Intos Narrow, Intos Serif на основе Inter и Gelasio; по данным проекта — 0,000 % расхождения ширин с Aptos 2.01 в четырёх начертаниях и равные вертикальные метрики (проверено 2026-10-04). Риск: в шрифт перенесён кернинг Aptos — ширины традиционно считают нефункциональными «фактами» (так делались Liberation и Carlito), а таблицу кернинга — юристу; кириллица заявлена для Intos Serif (из Gelasio), для гротеска — проверить. Если юристы одобрят — заменяет «заказ OFL-клона в фазе 2» (3–6 мес. работы шрифтового дизайнера); иначе — заказ, как в библии
Segoe UI нет полноценного Selawik — «open source replacement for Segoe UI» (README), но без кернинга под Segoe UI; проект OpenPresentation отклонил его как замену (PR #54); кириллицы, по-видимому, нет (не проверено). Интерфейс MOffice и так на Inter; для документов — Selawik для латиницы + таблица компенсации ширин
Cambria Math STIX Two Math не метрический; формулы всё равно раскладываются заново
Consolas JetBrains Mono не метрический
Segoe UI Emoji Noto Color Emoji (OFL) / Twemoji (MIT, графика CC-BY-4.0) замена по символам

Latin Modern Math — лицензия GFL (юридически LPPL-1.3c плюс просьба переименовывать изменённые версии). Политика §6 разрешает только OFL/Apache → либо владелец добавляет GFL/LPPL для шрифтов в класс 1, либо комплект формул ограничиваем STIX Two Math + Noto Sans Math (качество не страдает, Latin Modern нужен в основном ради «вида LaTeX»).

4. Класс 2 — требует решения владельца (с альтернативами классов 0–1)

# Вопрос Лицензия (класс) Что даёт Альтернатива класса 0–1 / своя Рекомендация
1 Qt 6.8: LGPL-3 с динамической линковкой или коммерческая LGPL-3 (2) / коммерч. (4) вся оболочка внутри выбранной архитектуры нет LGPL сейчас (как в библии); GPL-only модули запрещены; коммерческую — только ради Qt Qml Compiler или статической сборки, цену запросить
2 spellbook как временный движок правописания MPL-2.0 (2), без правок экономия ≈ 6 чел.-мес., готовые подсказки «как Nuspell» свой meridian-spell (7,5–9,5 чел.-мес.), разбор .aff — порт из zspell (Apache-2.0) свой движок; spellbook — только если под угрозой альфа A1 (2027-06-25), за трейтом SpellEngine, с удалением к релизу 1.0
3 Словари MPL/LGPL отдельными неизменёнными файлами данных: fr, uk, es, pt-BR, pt-PT, da, el, hu, kk, sv, be MPL-1.1/2.0, LGPL (2) 11 языков «из коробки» вместо загрузки загрузка пользователем из первоисточника; свои словари — человеко-годы разрешить одним решением: файлы не меняем, лежат отдельно (пользователь может заменить), рядом лицензия и ссылка на исходник; в deny.toml/THIRD_PARTY.md — категория «данные, класс 2»
4 Тезаурусы LGPL: ru (AOT + Абрамов/Королёв), de (OpenThesaurus), fr, es LGPL-2.1 (2) синонимы с первого дня ru — свой из оригинала Абрамова 1911 (PD) + Викиданные (CC0), 2–3 чел.-мес.; en — Open English WordNet (CC-BY-4.0) ru — свой; остальные — как п. 3 (отдельные файлы) или загрузка
5 LanguageTool как внешний сервер LGPL-2.1 (2), правила тоже грамматика 30+ языков Harper (en, Apache-2.0) + свои правила (ru) не поставлять; клиент протокола /v2/check к серверу, который ставит пользователь или организация
6 Шаблоны переносов LPPL (ru, tr, sv; у it/da/el/uk есть выбор MIT), FSF All-Permissive (en-us, nb/nn), Latin Modern Math (GFL = LPPL-1.3c) не названы в политике (по сути 1) русские переносы целиком зависят от LPPL ru — генерировать свои шаблоны patgen по своему словарю переносов (≈ 2–3 чел.-мес.) или правиловый алгоритм хуже качеством внести LPPL-1.3c, FSF All-Permissive и GFL в класс 1 для данных и шрифтов; шаблоны не изменять
7 Венгерские шаблоны (hyph-hu.tex) и словарь hu MPL-1.1 / LGPL (2) венгерский нет только если венгерский войдёт в волну локализации
8 Норвежский nb/nn из LibreOffice .aff GPL-2 (3) + списки CC BY 4.0 — свой .aff к спискам Ordbanken (CC BY 4.0), ≈ 0,5 чел.-мес. свой
9 Докинг KDDockWidgets (коммерческая KDAB) коммерч. (4) готовый докинг для QML свой на QML, 3–4 чел.-мес. свой; цену KDAB запросить для сравнения

5. Запрещено (класс 3) и замены

Что Лицензия Где всплывает Замена
Qt Charts, Graphs, Data Visualization, Virtual Keyboard, Lottie, Quick Timeline, Quick 3D (+Physics), Network Authorization, HTTP Server, GRPC, MQTT, CoAP, Wayland Compositor, Qml Compiler GPL-3 (без коммерческой Qt) оболочка, диаграммы, OAuth см. таблицу в 3.6
KDDockWidgets (открытая версия) GPL-2.0 / GPL-3.0 докинг для QML свой докинг
PyQt-Fluent-Widgets GPL-3.0 стиль Fluent FluentUI (MIT) как reference, свой стиль MDS
Slint GPL-3.0 или royalty-free с обязательной атрибуцией альтернатива Qt не нужен (Qt)
Словари de/de-AT/de-CH (igerman98, frami) GPL-2/3; «OASIS 0.1» не применима правописание de загрузка пользователем из первоисточника; позже — свой словарь из разрешительных источников (не исследовано)
Словари it (GPL-3), cs (GPL-2), he (AGPL-3), dict_uk (GPL-3), gl, ga, eo, eu, la, mk, vi, ia, gd, rw (GPL), is (CC-BY-SA-3.0) GPL / AGPL / CC-BY-SA правописание загрузка из первоисточника; для uk — вариант LibreOffice под MPL-1.1 (п. 3 раздела 4)
Переносы LibreOffice: hyph_uk_UA.dic (GPL-2+), hyph_NO (GPL), hyph_pt_PT (GPL); TeX: hyph-cs.tex (GPL-2+), id, mk, sr-cyrl GPL переносы TeX-шаблоны uk (MIT), nb (FSFAP), pt (BSD-3); cs — проверить hyph-cs-sojka.tex в hypher
Тезаурусы: YARN (CC BY-SA), RuWordNet/RuThes (некоммерческие), it (GPL-3), hu (GPL) — тезаурус ru свой ru-тезаурус (раздел 3.1)
en/license.txt в пакете LibreOffice GPLv2, без привязки к файлам английские словари брать SCOWL из первоисточника

Отдельно: код класса 2 (Hunspell, nuspell, spellbook, LanguageTool, Lightproof) не запрещён к чтению, но копировать его без решения владельца нельзя — meridian-spell и meridian-grammar пишутся по hunspell(5), описаниям алгоритмов и наблюдаемому поведению.

6. Что переносим кодом (файл → куда в MOffice, лицензия, NOTICE)

Источник (путь в клоне) Лицензия Куда в MOffice Объём Уведомление
typst crates/typst-layout/src/inline/linebreak.rs Apache-2.0 kernel/crates/text-layout/src/linebreak/optimal.rs 1 070 → ≈ 600 строк заголовок «Portions derived from Typst … Apache-2.0; modified by MOffice: …», строка в NOTICE, текст Apache-2.0 в «О программе»
typst crates/typst-layout/src/math/{fraction,radical,scripts,accent,fenced,table,run,line,cancel,shaping,text}.rs, fragment/{glyph,mod}.rs Apache-2.0 kernel/crates/meridian-math/src/layout/*.rs ≈ 3,2 тыс. строк то же
typst crates/typst-library/src/math/ir/* Apache-2.0 образец для meridian-math/src/ir/ 3,3 тыс. (по необходимости) то же, если копируется текст
typst crates/typst-pdf/src/tags/{tree/build.rs,context/table.rs,groups.rs} Apache-2.0 kernel/crates/meridian-pdf-write/src/tags/ ≈ 2,1 тыс. → ≈ 1 тыс. то же
hypher (весь крейт; patterns/hyph-*.tex выбранных языков) MIT OR Apache-2.0; шаблоны — по языкам (3.2) kernel/crates/meridian-hyph/ (форк) ≈ 1 тыс. строк + данные LICENSE-MIT/LICENSE-APACHE в папке крейта; заголовки .tex сохраняются; скрипт сборки кладёт их в THIRD_PARTY/hyphenation/<lang>.txt
parley parley_engine/src/{analysis,analyzer,itemize}.rs Apache-2.0 OR MIT kernel/crates/text-layout/src/itemize/ ≈ 1 тыс. выбрать MIT: заголовок + NOTICE
SARibbon src/SARibbonBar/SARibbon{PanelLayout,CategoryLayout,BarLayout,CustomizeData,Gallery,GalleryGroup,ContextCategory}.cpp MIT (© 2020 czyt1988) shell/src/ribbon/ (C++ QQuickItem + QML) ≈ 8,8 тыс. строк C++ → порт на QML/C++ заголовок «Based on SARibbon (MIT)», NOTICE
zspell — модуль разбора .aff/.dic (путь не проверен, клона нет) Apache-2.0 kernel/crates/meridian-spell/src/aff/ ≈ 1–1,5 тыс. заголовок Apache, NOTICE
KaTeX / Temml — таблицы символов, макросов, окружений (пути не проверены) MIT kernel/crates/meridian-math/data/latex_*.toml (генерация) данные MIT-уведомление
krilla (зависимость; форк при необходимости) MIT OR Apache-2.0 kernel/crates/meridian-pdf-write — наш NOTICE включает содержимое NOTICE.md krilla (typst, svg2pdf, vello, resvg)
Open English WordNet CC-BY-4.0 + WordNet License data/thesaurus/en.* (компилированный) данные атрибуция Princeton WordNet и Open English WordNet
Словари ru_RU, SCOWL (en ×4), SJP.PL (Apache-2.0), OpenTaal, hunspell-tr BSD-подобная / SCOWL / Apache-2.0 / BSD-3 / MIT data/dictionaries/<lang>/ данные файлы README/лицензий поставляются рядом; ru — «изменённые версии помечать»
MathCAT (зависимость с YAML-правилами) MIT kernel/crates/meridian-math (feature speech) — MIT-уведомление

Порядок оформления (Apache-2.0 §4): копия лицензии; заметное указание об изменениях в каждом изменённом файле; сохранение исходных уведомлений об авторстве; если у источника есть NOTICE — перенос относящихся к взятому коду строк. Сводные NOTICE и THIRD_PARTY.md генерировать из Cargo.lock (cargo-about или аналог — не проверено) плюс ручной реестр для портированного кода и данных.

7. Предложения в библию и план

docs/00-foundation.md, раздел 4:

  1. «Шейпинг текста»: rustybuzz → harfrust + skrifa/read-fonts (rustybuzz в архиве); unicode-linebreak → icu_segmenter; hyphenation → meridian-hyph (форк hypher); fontdb + системные API → fontique (системные шрифты и резерв) + fontdb (встроенные шрифты) — окончательно по спайку E0.2.
  2. «Проверка языка»: hunspell-rs → свой meridian-spell (формат Hunspell .aff/.dic); «LanguageTool-совместимый локальный сервер» → «клиент протокола LanguageTool к внешнему серверу (не поставляется)» + harper-core для английского + свои правила для русского.
  3. «PDF»: добавить «экспорт — krilla (MIT/Apache) + свой слой шифрования и разметочных аннотаций».
  4. «Шрифты в комплекте»: Selawik — только резерв для латиницы; Aptos — «Intos (OFL-1.1) после юридической проверки, иначе заказ клона»; Latin Modern Math — по решению о GFL (раздел 4, п. 6).

docs/12-license-policy.md: 5. §1 «TeX-шаблоны переносов большинства языков» стоят в классе 0 — неверно: ru — LPPL-1.2+, en-us и nb — FSF All-Permissive, большинство — MIT, PD только kk (и gl — Unlicense). Перенести в класс 0–1 «по языкам». 6. §2: добавить в класс 1 для данных и шрифтов LPPL-1.3c, GFL, FSF All-Permissive, WordNet License, лицензию SCOWL; ввести категорию «данные класса 2 отдельными неизменёнными файлами» (словари MPL/LGPL). 7. §6 «Qt»: заменить «Qt Charts, Qt Data Visualization, Qt Virtual Keyboard и др.» точным списком Qt 6.8 из 3.6 (обязательно — Qt Network Authorization и Qt Qml Compiler).

docs/08-roadmap.md: 8. E0.8: строка «cargo-deny: разрешены MIT/Apache-2.0/BSD/MPL-2.0/OFL; LGPL — только динамическая линковка (Qt, Hunspell, libraw)» противоречит политике (MPL-2.0 — класс 2 через exceptions; Hunspell больше не нужен). Добавить: юридическая проверка Intos, запрос цен Qt и KDAB. 9. E0.2: добавить пункты (h) fontique против fontdb; (i) соответствие harfrust тест-набору HarfBuzz на корпусе; (j) производительность QML без Qt Qml Compiler. 10. E1.7 Lingo: «20 словарей в комплекте» → три списка (раздел 3.1); новые задачи: meridian-spell фаза A к A1 (2 инженера I03–I05, 3–4 чел.-мес.), фазы B/C к релизу 1.6 (3,5–4,5); свой русский тезаурус (лингвист, 2–3); meridian-grammar для русского (движок 2 + правила 3–4, P1); сборка nb/nn из Ordbanken (0,5). 11. E1.3: экспорт PDF на krilla — оценку уменьшить на 8–10 чел.-мес.; добавить meridian-pdf-crypt (1), разметочные аннотации (0,5), сведение прозрачности для PDF/A-1 и veraPDF в CI. 12. Фаза 4, Math: порт раскладки typst (I13), MathCAT (I17, P1); LaTeX-парсер с таблицами KaTeX/Temml. 13. Shell (E0.4, E1.5): «ribbon-компонент» = порт алгоритмов SARibbon в QML; докинг — свой (3–4 чел.-мес.).

docs/research/component-map.md: «Kernel / шейпинг» — harfrust вместо rustybuzz; «Kernel / переносы» — hypher-форк, лицензии по языкам; «Shell / лента» — port вместо fork; «Math» — убрать ReX, добавить MathCAT как adopt; «Lingo / прочие языки» — списки из 3.1 вместо «de (GPL/OASIS)»: для нас OASIS 0.1 неприменима.

Итого по экономии в области отчёта (против написания своими силами, без шейпинга и Skia): krilla 8–10, typst math 6–8, MathCAT 8–12, Harper 6–8, cxx-qt 3–4, SARibbon 1,5–2, hypher 1–2, Кнут–Пласс 1–1,5, ICU4X/шрифтовые крейты — десятки; ≈ 35–48 чел.-мес.; дополнительные затраты из-за политики — meridian-spell 7,5–9,5, русский тезаурус 2–3, русская грамматика 5–6.

8. Непроверенное