MOffice

Платформа, сервисы, оболочка, целые приложения и итоговая стратегия заимствования (исследование, 2026-10-04)

Область: MOffice ID и SSO, сервер лицензий, биллинг, установщики и обновления, отчёты о сбоях и телеметрия, системные крейты, облачные коннекторы, целые офисные пакеты и редакторы как источники, оболочка (лента, докинг, QML), иконки, справка, тестовые корпуса; собственный код владельца; итоговая стратегия. Правила и классы лицензий — docs/research/BRIEF.md, docs/12-license-policy.md. Данные — oss-verified.tsv (проверено 2026-10-04). Отметка «(проверено 2026-10-04)» — дополнительная ручная проверка в этом отчёте, «(не проверено)» — по памяти/документации, требует подтверждения.

1. Выводы

  1. Стратегия — сценарий В (Rust-ядро + форки и порты классов 0–1 + код владельца): экономия ≈ 7,5–10,5 % (≈ 200–280 ч.-м., 2 660 → ≈ 2 380–2 460; сверено с итогами соседних отчётов), архитектура библии сохраняется. Публичные даты не менять, экономию обратить в буфер рисков и пик 73 → ≈ 67 FTE; «агрессивный» вариант (−4 недели для 1.5, 2.0, 3.0, 3.5, 4.0) — после gate фазы 2. Форк Apache OpenOffice (сценарий Б) отклонён: экспорта OOXML в нём нет, C++ 2000-х, к фазе 6 ядро пришлось бы переписать (2 800–3 300 ч.-м.).
  2. MOffice ID — свой id-service на Rust, но начинать с порта сервера аккаунтов FlyType (Go, 8,3 тыс. строк, код владельца); SAML и SCIM — Ory Polis (Apache-2.0) отдельным контейнером; passkeys — порт проверки go-webauthn (BSD-3) вместо webauthn-rs (MPL). passkey-rs от 1Password — только клиент/аутентификатор, не замена серверной проверки. Keycloak 26.8 (SCIM, организации, passkeys) — эталон в CI и план Б; привязку refresh к устройству перевести на DPoP (RFC 9449).
  3. keygen-api запрещён: Fair Core License (source-available), в TSV ошибочно класс 1. Сервер лицензий — свой, клиентский meridian-license уже есть (1 914 строк). Биллинг — свой: Stripe Billing (async-stripe) для мира, свои адаптеры ЮKassa и CloudPayments (SDK CloudPayments без лицензии, SDK ЮKassa в архиве), Kill Bill — только образец, Lago — AGPL.
  4. Обновления — velopack (MIT): дельты, каналы, поэтапная раскатка, откат, MSI, нотаризация; дописать подпись фида Ed25519 (6–8 ч.-м.). Официальный WiX ≥ 6 требует платы OSMF при выручке > 10 000 USD — MSI собирать через velopack.
  5. Сбои: crash-handler + minidump-writer + rust-minidump + GlitchTip (MIT) ≈ 9 ч.-м.; Sentry и Symbolicator — FSL (класс 3), в 08-roadmap.md «Sentry self-hosted» заменить.
  6. Облака: OpenDAL (Apache-2.0: OneDrive, Google Drive, Dropbox, Яндекс Диск, WebDAV, S3) внутри брокера + rclone rcd отдельным процессом для синхронизируемых папок (7–10 ч.-м.); Google — только drive.file + Picker, иначе ежегодный CASA.
  7. Оболочка: SARibbon — Qt Widgets, в QML-окно не встраивается → порт алгоритмов раскладки ленты (3–4 ч.-м.); докинг — свой на QML; иконки — Lucide (ISC) + Tabler (MIT) как основа MOffice Glyphs (6–8 ч.-м.), Fluent/Material — только образцы.
  8. Apache OpenOffice — выборочный порт: фильтр Word 97 (ww8), функции Calc, StarMath, формулы фигур ODF, пресеты анимаций (4–7 ч.-м.); LibreOffice, OnlyOffice, Calligra, AbiWord, Gnumeric — чистая комната.
  9. Код владельца — 24–37 ч.-м.: auth/биллинг/релизы/извлечение текста FlyType (Go), инструменты формул AXEL (RU↔︎EN, диагностика, сравнение книг, рассылки, ИНН/сумма прописью), крипто-конверт и синхронизация PasswordSafe (с исправлениями: ключ = сырой выход Argon2id, MAC только заголовка, нет потокового шифрования), помощники захвата ScreenPrompt (Windows на Rust, macOS на ScreenCaptureKit). Не переносить: запись через ffmpeg + libx264 (GPL), веса Silero (NC), edge-tts (LGPL).
  10. Права на код владельца: все человеческие коммиты — от учётных записей владельца; правообладатель в LICENSE — условная метка, много трейлеров ИИ (Cursor 1 735 в FlyType, Claude 224 в AXEL) → нужен документ владельца о правах и фиксация незакоммиченного кода (≈ 27 % Rust PasswordSafe).
  11. Мелкие ловушки: крейт dirs тянет MPL-option-ext; mdBook кладёт MPL-тему в вывод (справка — Sphinx); тесты Ghostscript в корпусе К4 — заменить набором pdf.js.

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

Обозначения: ★ — звёзды GitHub, dl — загрузки crates.io, дата — последний коммит/выпуск по oss-verified.tsv; «ч.-м.» — экономия в человеко-месяцах против базового плана docs/08-roadmap.md (2 660 ч.-м.). Стратегии: adopt / fork / port / ref / avoid — по BRIEF.md.

2.1 MOffice ID и SSO

Кандидат SPDX · класс ★ / dl · дата Язык Что даёт MOffice Стратегия Что пишем сами, риски ч.-м.
github.com/keycloak/keycloak Apache-2.0 · 1 37 058★ · 2026-09-29 Java полный IdP: OIDC/SAML, организации (с 26.0), passkeys, SCIM-сервер — supported с 26.8 (проверено 2026-10-04) ref + план Б; эталонный IdP в CI для проверки SSO Java/Quarkus-стек, SPI на Java для наших требований; данные пользователей в чужой схеме 0 (план Б: ≈ 8 нетто)
github.com/ory/kratos, ory/hydra Apache-2.0 · 1 13 894★ / 17 547★ · 2026-07-29 Go аккаунты + сертифицированный OAuth2/OIDC-сервер ref (Hydra — образец сервера авторизации) организации, SAML, SCIM — только Ory Network или платная Ory Enterprise License (проверено 2026-10-04) 0
github.com/ory/polis (бывш. BoxyHQ SAML Jackson) Apache-2.0 · 1 (проверено 2026-10-04) нет в TSV TypeScript мост SAML 2.0 → OAuth/OIDC и синхронизация каталогов SCIM для организаций adopt отдельным контейнером (фаза 6) Node.js в составе сервисов; статус проекта после покупки Ory — следить 3–4
github.com/supertokens/supertokens-core Apache-2.0 + ee/ под отдельной лицензией · 1* 15 323★ · 2026-09-28 Java email/пароль, ссылки-вход, OAuth avoid MFA ($0,01/MAU), мультиарендность, связывание аккаунтов — платные даже при self-hosting (проверено 2026-10-04) 0
github.com/casdoor/casdoor Apache-2.0 · 1 14 506★ · 2026-10-03 Go на бумаге всё: OIDC-провайдер, SAML IdP/SP, SCIM 2.0, WebAuthn, TOTP, организации (README, проверено 2026-10-04) ref зрелость и история уязвимостей (не проверено), сообщество в основном китайское 0
github.com/authelia/authelia Apache-2.0 · 1 29 150★ · 2026-10-01 Go SSO-портал перед обратным прокси avoid нет самостоятельной регистрации, организаций, SAML — не CIAM 0
logto-io/logto · kanidm/kanidm MPL-2.0 · 2 14 644★ / 5 426★ TS / Rust CIAM с организациями (Logto); IdM для инфраструктуры (kanidm) ref (Logto — альтернатива класса 2 отдельным процессом) решение владельца; см. раздел 4 —
zitadel/zitadel · goauthentik/authentik AGPL-3.0 · 3 / MIT + enterprise/ + CC-BY-SA · 3 15 113★ / 25 756★ Go / Python — avoid см. раздел 5 —
crates.io/openidconnect 4.0.1 MIT · 1 643★ · 14,4 млн dl · 2025-07 Rust вход через Google/Microsoft/Apple и корпоративный OIDC; типы discovery и ID-токенов для своего сервера adopt крейт не обновлялся с 2025-07 — закрепить версию 1
crates.io/oauth2 5.0.0 MIT OR Apache-2.0 · 1 1 208★ · 54,9 млн dl Rust Яндекс ID (OAuth 2.0), VK ID (OAuth 2.1 + PKCE), клиент meridian-id adopt — 0,5
crates.io/samael 0.0.22 MIT · 1 108★ · 0,75 млн dl · 2026-07 Rust SAML SP (подписи через xmlsec1) ref / резерв к Polis версия 0.0.x, атаки обёртывания XML-подписи — свой аудит обязателен 0
crates.io/webauthn-rs 0.5.5 MPL-2.0 · 2 709★ · 7,4 млн dl · 2026-04 Rust проверка регистрации и входа passkeys (сторона сервера), аттестации запасной вариант по решению владельца (раздел 4); по умолчанию — порт go-webauthn (BSD-3, класс 1) без правок файлов MPL обязательства минимальны (1,5)
github.com/go-webauthn/webauthn BSD-3-Clause · 1 (по отчёту зависимостей FlyType; не проверено отдельно) нет в TSV Go эталонная серверная проверка WebAuthn, уже работает в бэкенде FlyType port логики проверки на Rust тесты на векторах и программном аутентификаторе passkey-rs 1
github.com/1Password/passkey-rs MIT OR Apache-2.0 · 1 нет в TSV Rust только клиент и программный аутентификатор CTAP2, проверки на стороне сервера нет (проверено 2026-10-04) adopt passkey-types + тестовый аутентификатор серверную проверку (подпись COSE, rpIdHash, флаги UV/UP, счётчик) пишем сами: ≈ 1–1,5 тыс. строк; крейт public-suffix несёт список Mozilla PSL (MPL-2.0) — не тянуть 0,5
totp-rs 6.0.0 · argon2 0.6.0 · jsonwebtoken 11.1.0 · ed25519-dalek 3.0.0 · aes-gcm 0.11.1 · axum 0.8.9 MIT / MIT-Apache / BSD-3 · 1 10,9 / 58,6 / 202,8 / 226,8 / 168,9 / 500,4 млн dl Rust TOTP, Argon2id, JWT EdDSA, подписи, шифрование секретов TOTP и client_secret, HTTP adopt — 1,5
crates.io/keyring 4.2.0 MIT OR Apache-2.0 · 1 769★ · 28,8 млн dl · 2026-08 Rust токены в Keychain / Credential Manager / Secret Service (meridian-id) adopt в Linux без Secret Service — запасной файл, зашифрованный ключом устройства 0,5
coset, p256, rsa (RustCrypto, Google) Apache-2.0 / MIT-Apache · 1 (не проверено) нет в TSV Rust разбор ключей COSE и проверка подписей ES256/RS256/EdDSA для своей проверки passkeys adopt (основа порта проверки go-webauthn) — —

2.2 Лицензии и биллинг

Кандидат SPDX · класс ★ / dl · дата Язык Что даёт MOffice Стратегия Что пишем сами, риски ч.-м.
kernel/crates/meridian-license (наш) собственный · ★ 1 914 строк: key.rs 582, features.rs 589, license.rs 478, sha256.rs 225 Rust ключ MOFC-…, флаги функций, .mlic, сроки и льготы, трейт Verifier own дописать CBOR (ciborium), ed25519-dalek, отпечаток, аренду; на сервере MAC ключей сравнивать за постоянное время (hmac + subtle) —
github.com/keygen-sh/keygen-api FCL-1.0-ALv2 (Fair Core License, «source-available») · 3 (проверено 2026-10-04; в TSV ошибочно класс 1) 1 605★ · 2026-09-28 Ruby сервер лицензий: машины, активации, плавающие лицензии, релизы avoid (код не читать); публичная документация API — только как чек-лист функций запрет «конкурирующего использования» и обхода проверки ключа; переход в Apache-2.0 только через 2 года после выпуска каждой версии 0
crates.io/machine-uid 0.6.0 MIT · 1 48★ · 3,8 млн dl · 2026-05 Rust идентификатор машины: MachineGuid (Windows), IOPlatformUUID (macOS), /etc/machine-id (Linux) adopt (или 60 строк своего кода) клоны ВМ и образы sysprep дают одинаковые ID — правило «2 из 3» (раздел 6.3 10-licensing-accounts.md) это покрывает 0,2
github.com/killbill/killbill Apache-2.0 · 1 5 764★ · 2026-09-28 Java каталог, подписки, счета, повторы списаний, состояния просрочки, плагины платёжных шлюзов ref (модель подписок и дэнинга); adopt — только если владелец захочет готовую админку Kaui JVM + своя БД; плагины ЮKassa/CloudPayments пришлось бы писать на Java; акты/УПД/ЭДО, реселлеры, Education всё равно свои 0 (adopt: 1–3 нетто)
github.com/getlago/lago AGPL-3.0 · 3 10 572★ Go — avoid — —
crates.io/async-stripe 0.41.0 MIT OR Apache-2.0 · 1 749★ · 5,5 млн dl · 2026-09 Rust Checkout, Billing, Tax, Customer Portal, вебхуки — мировой регион adopt (только нужные фичи крейта) большой объём генерированного кода; закрепить версию API Stripe 0,7
SDK ЮKassa: github.com/yoomoney/yookassa-sdk-python, -php, -java MIT · 1 50–75★ · архив на GitHub с 2022 (проверено 2026-10-04) Python/PHP/Java эталон запросов API v3: платежи, receipt 54-ФЗ, автоплатежи, возвраты, вебхуки ref (port отдельных моделей с уведомлением MIT) Rust-SDK нет: свой адаптер REST (Basic shopId:secretKey, Idempotence-Key, проверка вебхуков по IP-списку) 0,3
SDK CloudPayments: github.com/cloudpayments/* лицензии нет (None/NOASSERTION), всё в архиве (проверено 2026-10-04) 10–16★ разные — avoid код (без лицензии = нельзя копировать); только документация API свой адаптер: Basic Public ID:API Secret, подпись вебхуков HMAC-SHA256 (Content-HMAC) 0

2.3 Установщики и обновления

Кандидат SPDX · класс ★ / dl · дата Язык Что даёт MOffice Стратегия Что пишем сами, риски ч.-м.
github.com/velopack/velopack (клон) MIT · 1 2 354★ · крейт 1.2.161, 0,11 млн dl · 2026-09-29 Rust + C# (vpk) установщик и обновление Windows/macOS/Linux; дельты (zstd --patch-from), каналы, поэтапная раскатка, откат при сбое применения, MSI per-user/per-machine adopt (библиотека velopack + CLI vpk в CI) подписи фида нет (только SHA-256 пакетов) → свой UpdateSource с Ed25519; Linux — только AppImage; политики организаций — свои 6–8
github.com/sparkle-project/Sparkle MIT (+BSD-3, Zlib) · 1 9 797★ · 2026-09-28 Obj-C macOS: appcast с подписью EdDSA, дельты ref / запасной вариант для macOS второй механизм обновлений — только если velopack не справится с universal-сборкой 0
github.com/vslavik/winsparkle MIT · 1 1 479★ · 2026-08-10 C++ Windows: appcast, подписи avoid нет дельт, слабее velopack 0
github.com/crabnebula-dev/cargo-packager Apache-2.0 OR MIT · 1 485★ · крейт 0.11.8 (2025-11) Rust пакеты NSIS/WiX/DMG/AppImage/deb/pacman + апдейтер с подписью (не проверено) ref (deb/rpm собираем штатными средствами) крейт не выпускался с 2025-11 0
github.com/wixtoolset/wix MS-RL · 2 (инструмент; DLL пользовательских действий попадают в MSI) 1 149★ · 2026-09-30 C# MSI для GPO и тихой установки adopt как инструмент или MSI из velopack двоичные сборки WiX ≥ 6 — под EULA «Open Source Maintenance Fee»: при выручке > 10 000 USD/год обязательно спонсорство, WiX 7 блокирует команды до принятия EULA (проверено 2026-10-04); velopack собирает MSI своим форком WiX и OSMF не применяется —
github.com/jrsoftware/issrc (Inno Setup) собственная разрешительная · 1 (коммерческое использование бесплатно, проверено 2026-10-04) 5 648★ Pascal EXE-установщик ref не нужен при MSIX/MSI/velopack 0
create-dmg · appimagetool MIT · 1 2 644★ / 430★ Shell / C DMG; AppImage adopt (инструменты CI) — 0,3
flatpak-builder LGPL-2.1 · 2 (инструмент, в продукт не входит) 178★ · 2026-09-15 C Flatpak для Flathub — главный канал Linux adopt как инструмент обновления Flatpak делает сама ОС (OSTree), velopack не нужен —
github.com/indygreg/apple-platform-rs (rcodesign) MPL-2.0 · 2 (инструмент) 851★ · 2026-09-12 Rust подпись и нотаризация macOS с Linux-раннеров ref; по умолчанию codesign + notarytool на macOS-раннерах — 0

2.4 Отчёты о сбоях и телеметрия

Кандидат SPDX · класс ★ / dl · дата Язык Что даёт MOffice Стратегия Что пишем сами, риски ч.-м.
crates.io/crash-handler 0.8.1 (EmbarkStudios/crash-handling) MIT OR Apache-2.0 · 1 192★ · 3,3 млн dl · 2026-09-25 Rust перехват сигналов, SEH-исключений, Mach-исключений adopt обработчик минимальный: дамп пишет внешний процесс (брокер) 1,5
crates.io/minidump-writer 0.13.0 MIT · 1 90★ · 2,9 млн dl · 2026-07-20 Rust запись minidump для Windows/macOS/Linux из стороннего процесса adopt — 1,5
crates.io/minidump 0.27.0 + minidump-processor, breakpad-symbols (rust-minidump) MIT · 1 512★ · 1,2 млн dl · 2026-08-11 Rust разбор дампов, раскрутка стека, символикация по .sym adopt на сервере (telemetry-service) символы из PDB/dSYM/DWARF — dump_syms (Mozilla, Apache-2.0/MIT, не проверено) 2
github.com/google/breakpad BSD-3-Clause (основная) + сторонние файлы · 1 (в TSV класс 0 ошибочен) 2 902★ C++ формат .sym, эталон поведения ref — 0
crates.io/sentry 0.49.3 (sentry-rust) MIT · 1 753★ · 55,8 млн dl · 2026-09-21 Rust SDK событий: паники Rust, ошибки, хлебные крошки — протокол Sentry, принимается GlitchTip adopt (только транспорт и протокол; без автосбора ПДн) SDK класс 1, хотя сервер Sentry — FSL 0,5
gitlab.com/glitchtip/glitchtip-backend MIT · 1 (проверено 2026-10-04 по LICENSE на GitLab) 131★ (зеркало) Python/Django сервер ошибок, совместимый с SDK Sentry; группировка, уведомления; GlitchTip 6 — приём minidump и символов PDB/dSYM/ELF (по обзору, проверено 2026-10-04, нужен пилот) adopt (self-hosted в РФ и ЕС) проверить, не тянет ли нативная символикация Sentry Symbolicator (FSL); если тянет — дампы обрабатываем своим сервисом на rust-minidump 3
github.com/getsentry/sentry, getsentry/symbolicator FSL-1.1 (+Apache части) / FSL-1.1-MIT · 3 (проверено 2026-10-04) 44 867★ Python / Rust — avoid в 08-roadmap.md (1.3, 3.1, 5.4) стоит «Sentry self-hosted» — заменить на GlitchTip —
github.com/bugsink/bugsink PolyForm-Noncommercial-1.0.0 · 3 2 095★ Python — avoid — —
crates.io/opentelemetry 0.33.0 + tracing 0.1.44 Apache-2.0 / MIT · 1 2 722★ · 280,6 / 897,4 млн dl Rust трассировка, метрики, логи сервисов → Tempo/Prometheus/Loki adopt — 0,5
github.com/PostHog/posthog MIT, кроме ee/ (отдельная коммерческая лицензия) и сторонних частей · 1 только для FOSS-части (проверено 2026-10-04) 39 966★ · 2026-09-27 Python/TS продуктовая аналитика, воронки ref (тяжёлый стек: ClickHouse, Kafka) для opt-in-метрик достаточно своего эндпоинта telemetry-service + ClickHouse/PostgreSQL 0
github.com/umami-software/umami MIT · 1 39 079★ · 2026-09-29 TS аналитика сайта и портала без cookie adopt (сайт, портал) не для десктопа 0,3

2.5 Системные крейты

Кандидат SPDX · класс dl · дата Что даёт MOffice Стратегия Замечания
interprocess 2.4.4 0BSD OR Apache-2.0 · 0 15,4 млн · 2026-09 локальные сокеты (именованные каналы Windows / Unix-сокеты) — транспорт брокера adopt без обязательств
ipc-channel 0.23.0 (servo) MIT OR Apache-2.0 · 1 6,5 млн · 2026-09 передача дескрипторов и общей памяти — песочные процессы кодеков adopt (кодек-хост) —
tarpc 0.38.0 MIT · 1 10,1 млн · 2026-08 RPC поверх любого транспорта ref свой протокол кадров (serde + postcard/CBOR) проще и стабильнее для FFI
keyring 4.2.0 MIT OR Apache-2.0 · 1 28,8 млн · 2026-08 SecretStore (03-architecture.md) adopt см. 2.1
arboard 3.6.1 (1Password) · clipboard-rs 0.3.5 MIT-Apache / MIT · 1 50,3 / 0,6 млн буфер: текст, изображения, HTML adopt только в брокере и инструментах в окнах приложений — QClipboard/QMimeData (любые MIME, форматы Windows через QWinMime)
notify 8.2.0 CC0-1.0 · 0 163,9 млн · 2026-08 слежение за файлами: Hub (недавние), папки синхронизации adopt —
notify-rust 4.18.1 MIT OR Apache-2.0 · 1 15,5 млн · 2026-09 уведомления ОС из брокера (Linux/macOS) adopt Windows Toast — через windows (AUMID)
global-hotkey 0.8.0 · tray-icon 0.26.0 · muda 0.21.0 (tauri-apps) Apache-2.0 OR MIT · 1 5,9 / 32,4 / 38,4 млн глобальные клавиши брокера (в Qt их нет) adopt global-hotkey; трей и меню — Qt —
dirs 7.0.0 MIT OR Apache-2.0 · 1, но транзитивно dirs-sys → option-ext (MPL-2.0, найдено в Cargo.lock PasswordSafe) 348,7 млн · 2026-09 папки ОС из Rust avoid без исключения в deny.toml; в оболочке — QStandardPaths, в ядре — свои 60 строк (SHGetKnownFolderPath / NSFileManager / XDG) или etcetera (MIT-Apache, не проверено) репозиторий на GitHub в архиве (2025-01)
sysinfo 0.39.6 · open 5.4.4 MIT · 1 214,2 / 57,3 млн сведения о системе в отчёте о сбое; открыть URL/файл обработчиком ОС adopt без серийных номеров и имён пользователей в отчётах
windows 0.62.2 · objc2 0.6.4 MIT-Apache / MIT-Zlib-Apache · 1 347,6 / 124,5 млн системные API Windows и macOS adopt —
fluent 0.17.0 Apache-2.0 OR MIT · 1 14,7 млн строки ядра и сервисов ref интерфейс — Qt .ts через Weblate (план 7.1); второй формат только для сервисов
rfd, winit, accesskit, egui, iced, tauri, gtk4, enigo MIT/Apache · 1 — диалоги, окна, доступность, UI-тулкиты, эмуляция ввода avoid выбран Qt 6 (библия, раздел 4); автоввод — свой код PasswordSafe

Все крейты — Rust, звёзды см. oss-verified.tsv. Экономия по группе ≈ 2–3 ч.-м. (транспорт брокера, слежение за файлами, уведомления, глобальные клавиши, сведения о системе); при подключении каждого — cargo deny check, транзитивные MPL встречаются (пример — dirs).

2.6 Облачные коннекторы

Кандидат SPDX · класс ★ / dl · дата Язык Что даёт MOffice Стратегия Что пишем сами, риски ч.-м.
github.com/apache/opendal 0.59.3 Apache-2.0 · 1 (проверено 2026-10-04 по core/Cargo.toml) нет в TSV Rust единый API хранилищ внутри процесса: onedrive, gdrive, dropbox, yandex-disk, webdav, s3, pcloud, koofr, seafile, sftp, fs adopt для «Открыть/Сохранить из облака» в Hub OAuth-вход и обновление токенов — наш meridian-id; сервисы облачных дисков в OpenDAL моложе S3/WebDAV — интеграционные тесты на каждого провайдера 4–6
github.com/rclone/rclone MIT · 1 60 023★ · 2026-09-30 Go 70+ бэкендов, зрелая синхронизация, повторы, лимиты API, проверка хэшей adopt отдельным процессом rclone rcd (rc-API по локальному сокету) для фоновой синхронизации папок librclone (c-shared) — «экспериментальный» API; в Windows только динамическая загрузка без FreeLibrary (проверено 2026-10-04) → не встраивать в процесс; Go-зависимости сборки проверить go-licenses; размер бинарника (не проверено) 3–4
PasswordSafe passwordsafe-sync, passwordsafe-cloud (наши) собственный · ★ см. 3.5 Rust сквозное шифрование, WebDAV/S3, авторизация устройств own (перенос) см. 3.5 см. 3.5

2.7 Целые приложения и редакторы

Кандидат SPDX · класс ★ · дата Язык Что даёт MOffice Стратегия Риски ч.-м.
github.com/apache/openoffice Apache-2.0 · 1 1 244★ · 2026-09-22; выпуск 4.1.16 — 2025-11-10, 4.2.0 «в 2026» (проверено 2026-10-04) C++ (UNO, VCL) фильтры бинарных форматов (sw/source/filter/ww8, sc/source/filter/excel), функции sc (финансы, статистика), пресеты анимаций Impress, парсер StarMath, автофигуры ref + port выборочно (см. 3.6) код 2000-х, модель UNO; OOXML в AOO только читается — экспорта docx/xlsx нет; порт ≠ форк 4–7
github.com/LibreOffice/core MPL-2.0 / LGPLv3+ / GPL (смешанная история) · 3 по TSV 4 439★ C++ только тестовые документы (*/qa/*, MPL-2.0) — в корпус, не в продукт avoid код (чистая комната) — —
ONLYOFFICE, Calligra, AbiWord, Gnumeric, CKEditor 5 AGPL/GPL · 3 — — — avoid см. раздел 5 —
ProseMirror (prosemirror-model, -transform) MIT · 1 340★ · репозиторий на GitHub в архиве (TSV) TS шаги транзакций, отображение позиций (Mapping), схема узлов, ReplaceStep ref (идеи модели правок text-model) — 0,5
Lexical · Slate · Quill · Tiptap MIT / MIT / BSD-3 / MIT · 1 23 901★ / 31 752★ / 47 363★ / 38 572★ TS Lexical: ключи узлов, двойной буфер «черновик/зафиксировано»; Quill Delta — компактный OT-формат правок; Slate — операции над деревом ref веб-редакторы, раскладки страниц у них нет 0,5
github.com/dream-num/univer Apache-2.0 · 1 21 936★ · 2026-09-29 TS архитектура «команда → мутация → операция», движок формул (порт функций — отчёт oss-formats-sheets-data.md) ref + port функций часть возможностей — в закрытом Univer Pro (не проверено) см. отчёт Sheets
github.com/gristlabs/grist-core Apache-2.0 · 1 11 880★ · 2026-09-29 TS/Python «таблица-БД», формулы по столбцам, правила доступа по строкам ref для Base и Forms grist-ee — отдельная закрытая часть (не проверено) 0,5
github.com/ether/etherpad-lite Apache-2.0 · 1 18 558★ JS Easysync: changesets, пулы атрибутов — компактный журнал правок ref (формат журнала операций MOP history/) — 0,3
xi-editor · lapce/floem · zed Apache-2.0 · 1 (только файлы под Apache; в zed часть крейтов — GPL/AGPL) 19 815★ / 38 862★ / 91 173★ Rust канаты (xi-rope), якоря, sum_tree ref в zed проверять лицензию каждого крейта — GPL-части класса 3 0

2.8 Оболочка

Кандидат SPDX · класс ★ · дата Язык Что даёт MOffice Стратегия Риски ч.-м.
github.com/czyt1988/SARibbon (клон) MIT · 1 1 447★ · 2026-09-30 C++ / Qt Widgets ≈ 35 тыс. строк src/SARibbonBar: раскладка панелей с адаптивным сворачиванием, контекстные вкладки, галереи, панель быстрого доступа, диалог настройки ленты, менеджер действий; QML нет port алгоритмов раскладки и модели настройки в QML-ленту (не fork виджетов) QWidget нельзя вставить в QML-окно; QWindowKit (сабмодуль, Apache-2.0 — не проверено) не нужен 3–4
github.com/githubuser0xFFFF/Qt-Advanced-Docking-System (клон) LGPL-2.1 · 2 2 525★ · 2026-09-10 C++ / Widgets ≈ 23 тыс. строк; QML нет ref (поведение, сохранение раскладки) копирование — только по решению владельца; переносить незачем 0
KDDockWidgets (KDAB) GPL-2.0/3.0 + коммерческая · 3 (не проверено) — C++ / Widgets + QtQuick докинг для QtQuick avoid (или покупка — класс 4) — —
github.com/zhuzichu520/FluentUI MIT · 1 4 601★ · 2026-04-07 C++ / QML безрамочное окно, акрил/Mica, анимации, навигация, тосты на QML ref, точечный fork приёмов (безрамочное окно) стиль Fluent ≠ MDS; активность падает 1
PyQt-Fluent-Widgets GPL-3.0 · 3 8 112★ Python — avoid — —
cxx-qt 0.10.0 · qmetaobject 0.2.10 MIT-Apache / MIT · 1 1 547★ / 735★ Rust мост Rust↔︎Qt (выбран cxx-qt) adopt cxx-qt; qmetaobject — ref (крейт не выпускался с 2023) — —
egui, iced, Flutter, Avalonia, Tauri, Electron, wxWidgets (LGPL-искл.), Slint (GPL/royalty-free) разные — — альтернативные тулкиты avoid (решение библии — Qt 6) — —

2.9 Иконки

Набор SPDX · класс ★ · дата Объём и стиль (не проверено) Роль в MOffice Glyphs Стратегия
Lucide ISC (+MIT для иконок, унаследованных от Feather) · 1 24 797★ · 2026-09-29 ≈ 1 600, сетка 24, линия 2 px, скругления основа общего интерфейса fork → перерисовка под сетку MDS
Tabler Icons MIT · 1 21 875★ · 2026-10-02 ≈ 5 900, 24 px, линия 2 px, близка к Lucide офисные метафоры: таблицы, текст, макет, диаграммы fork (дополнение)
Phosphor (core) MIT · 1 380★ · 2026-01-06 ≈ 1 500 × 6 начертаний образец системы весов (тонкий/обычный/жирный/заливка) ref
Material Symbols Apache-2.0 · 1 54 046★ · 2026-09-25 ≈ 3 800, вариативный шрифт ref (метафоры, оси веса) ref
Fluent System Icons MIT · 1 10 875★ · 2026-09-29 тысячи, богатые офисные метафоры Microsoft только ref: узнаваемый стиль Microsoft — риск «похожести» на Office ref
Heroicons · Feather MIT · 1 23 846★ / 26 003★ ≈ 300 / 287 (Feather не развивается с 2025-03) ref ref
RemixIcon собственная «Remix Icon License v1.0» (2026), не OSI · 9 8 390★ — — avoid
Breeze · Papirus LGPL-2.1 · 2 / GPL-3.0 · 3 282★ / 8 122★ — — avoid

Формат всех наборов — SVG; экономия 6–8 ч.-м. дизайнера иконок (разбор в 3.7).

2.10 Справка и корпуса

Кандидат SPDX · класс ★ · дата Что даёт MOffice Стратегия Риски
github.com/rust-lang/mdBook MPL-2.0 · 2 (инструмент) 22 179★ · 2026-10-01 Markdown → HTML, поиск, темы adopt как инструмент только со своей темой тема по умолчанию (JS/CSS, MPL-2.0) копируется в вывод — тогда в справке окажутся файлы MPL
github.com/mkdocs/mkdocs BSD-2-Clause · 1 22 480★ · 2025-10-20 сайт документации ref (активность низкая) будущее экосистемы тем — (не проверено)
github.com/sphinx-doc/sphinx BSD-3-Clause · 1 8 031★ · 2026-09-21 многоязычная справка (gettext), PDF, .qch adopt для онлайн-справки и документации API Python в CI
Qt Help (qhelpgenerator, модуль QtHelp) в составе Qt (LGPL-3.0 / коммерч.) · 2 — офлайн-справка F1 по контексту (план 7.2) adopt (решение по Qt) —
GovDocs1 (digitalcorpora.org) общественное достояние (документы госорганов США) · 0 — ≈ 1 млн файлов doc/xls/ppt/pdf/html для фаззинга и корпуса К1–К4 adopt (вне продукта) отдельные файлы могут содержать чужие материалы — только тесты
DocBank Apache-2.0 (датасет, проверено 2026-10-04) · 1 636★ · 2024-08 500 тыс. страниц с разметкой блоков (arXiv) adopt для тестов раскладки PDF→Write обучение моделей: статьи arXiv под своими лицензиями — юристу
PubLayNet CDLA-Permissive-1.0 (аннотации) · 1 1 061★ · 2025-07 360 тыс. страниц PMC с разметкой adopt для тестов изображения — статьи PMC OA под CC-лицензиями статей
DocLayNet (IBM) CDLA-Permissive-1.0 (не проверено) — 80 тыс. страниц отчётов, инструкций, патентов — ближе к офисным документам adopt для тестов —
Тестовые файлы Apache POI (test-data/) Apache-2.0 · 1 — тысячи doc/xls/ppt/docx/xlsx, включая «ломаные» и зашифрованные adopt в корпус —
Тестовые файлы LibreOffice (sw/qa, sc/qa, sd/qa) MPL-2.0 · 2 (только тесты) — регрессионные документы adopt в корпус, не в установщик код тестов LibreOffice не читать (чистая комната)

Экономия: инструменты справки ≈ 1 ч.-м.; источники корпусов уже заложены в план 5.1, сверх плана экономии нет.

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

3.1 MOffice ID: Keycloak, свой сервер на Rust или другой IdP

Требования взяты из docs/10-licensing-accounts.md §8 и §10.2: e-mail + Argon2id с pepper, ссылка-вход с client_nonce и кодом из 6 цифр, вход через Google/Apple/Microsoft/Яндекс ID/VK ID, корпоративный OIDC и SAML 2.0 с маршрутизацией по домену и JIT, TOTP + passkeys + коды восстановления, refresh-ротация с отзывом «семьи», привязка refresh к ключу устройства, JWT EdDSA + JWKS, организации с 7 ролями, SCIM 2.0, аудит с хэш-цепочкой и выгрузкой в SIEM, регионы ru/eu с каталогом email_hash → region, экспорт и удаление по 152-ФЗ/GDPR, on-prem в docker compose.

Требование Keycloak 26.8 Свой Rust (axum + крейты) Ory Kratos + Hydra SuperTokens Casdoor Logto (класс 2)
Лицензия, класс Apache-2.0, 1 наш код + MIT/Apache, 1 Apache-2.0, 1 (ядро) Apache-2.0 + ee/, 1* Apache-2.0, 1 MPL-2.0, 2
OIDC-сервер для своих клиентов (код + PKCE, loopback) да, сертифицирован свой узкий сервер (≈ 3 ч.-м.) Hydra, сертифицирован частично (единый вход — платно) да да
Google/Apple/Microsoft · Яндекс/VK встроенные + расширения для Apple, Яндекс, VK (не проверено) openidconnect + oauth2 общий OIDC-провайдер да да да
SAML 2.0 SP (вход сотрудников) да, зрелый через Ory Polis (Apache-2.0) только платная OEL платно (не проверено) да (IdP и SP) да
SCIM 2.0 да, входящий, supported с 26.8 (проверено 2026-10-04) свой (≈ 1,5 ч.-м.) или Polis только платная OEL нет (не проверено) да (не проверено)
TOTP, коды, passkeys да totp-rs; passkeys — порт go-webauthn (класс 1), запасной — webauthn-rs (класс 2) да MFA платно да да
Организации и 7 ролей организации да; роли — наш слой наша модель (DDL уже есть) только OEL мультиарендность платно да да
Привязка refresh к устройству DPoP RFC 9449 (версия — не проверено) или SPI на Java свой заголовок или DPoP нет нет нет нет
Аудит с хэш-цепочкой, регионы, экспорт/удаление слушатель событий (SPI) + наш сервис своё своё своё частично своё
Ссылка-вход с nonce и кодом свой аутентификатор (SPI) своё да (code) да да да
Стек и вес on-prem Java/Quarkus, ≈ 1 ГБ ОЗУ на узел (не проверено) один Rust-бинарник Go, лёгкий Java + SDK Go + React Node.js
Стоимость владения за 4 года 18–22 ч.-м.: темы входа (Keycloakify) и SPI 6–8, наш сервис устройств/аудита/регионов 6, сопровождение 0,2 FTE 26–30 ч.-м. с нуля: ядро 10–12, соцвход 1,5, MFA/passkeys 1–2, организации 2, SSO OIDC 1,5, SCIM 1,5, Polis 1, аудит/регионы/удаление 3, пентест и OpenID conformance 2,5; ≈ 21–25 с портом auth из FlyType 20–24 + платная OEL не подходит 16–20 18–22
Главный риск SPI ломаются при квартальных обновлениях; пользователи в чужой схеме, рядом с license-service — синхронизация по событиям безопасность своего сервера авторизации B2B-функции платные ключевые функции платные по MAU зрелость и аудит безопасности (не проверено) MPL + Node; решение владельца

Рекомендация. Оставить решение библии — свой id-service на Rust — но не писать с нуля опасные части: 0. Основа — порт сервера аккаунтов FlyType (backend/internal/auth, Go, 8,3 тыс. строк, код владельца): пароль, ссылка-вход, OAuth Google/Яндекс, SSO, passkeys, TOTP, вход с устройства, refresh, JWKS уже работают в продукте (3.9; экономия 3–5 ч.-м. учтена там). Это снимает большую часть стоимости «своего» столбца таблицы.

  1. Клиентская сторона входа (Google, Microsoft, Apple, корпоративный OIDC) — openidconnect; Яндекс ID и VK ID — oauth2; свой сервер авторизации — только для своих клиентов (десктоп, портал, cloud): код + PKCE, loopback-redirect, refresh-ротация; без динамической регистрации клиентов и чужих приложений. Проверка: OpenID conformance suite (бесплатный инструмент OpenID Foundation) и внешний пентест к вехе L1.2 (2027-09-17).
  2. SAML 2.0 и SCIM для Business/Enterprise (фаза 6) — Ory Polis (Apache-2.0) отдельным контейнером: он принимает SAML-ответы и отдаёт нашему сервису OAuth-код, а каталоги SCIM синхронизирует в наши org_members. Своего кода XML-подписей нет — исчезает главный риск samael 0.0.x.
  3. Passkeys — порт серверной проверки из go-webauthn (BSD-3-Clause, класс 1; уже используется в бэкенде FlyType) на Rust поверх passkey-types + coset + p256/ed25519-dalek (≈ 1–1,5 тыс. строк, ≈ 1 ч.-м.); программный аутентификатор passkey-authenticator — в интеграционные тесты. По политике класс 2 берём, только если нет замены 0–1, а она есть, поэтому webauthn-rs (MPL-2.0) — запасной вариант по решению владельца (раздел 4). Замечание: passkey-rs — не замена webauthn-rs «один к одному», серверной проверки в нём нет (проверено 2026-10-04).
  4. Привязку refresh к устройству перевести с собственного заголовка X-Meridian-Device-Proof на стандарт DPoP (RFC 9449): та же криптография Ed25519 (ключ устройства в Keychain/DPAPI/Secret Service), но совместимо с Keycloak и сторонними клиентами. Это же делает Keycloak реальным планом Б: если к вехе L3.1 (2028-07-07, SSO OIDC) свой сервер не прошёл пентест, переходим на Keycloak, сохранив наши сервисы устройств, аудита и лицензий.
  5. Keycloak сразу нужен как эталонный IdP в CI (тесты SSO с Entra ID, Google, Яндекс 360 и Keycloak — критерий релиза 3.5).

Экономия против плана: крейты 3,5 ч.-м. + Polis 3–4 + порт go-webauthn вместо проверки с нуля 1 = 7,5–8,5 ч.-м. (плюс 3–5 ч.-м. от порта кода FlyType в 3.9). Полный переход на Keycloak дал бы ≈ 8 ч.-м. сверх «своего с нуля», но при наличии кода FlyType преимущество почти исчезает, а цена — Java-стек и чужая модель данных.

3.2 Лицензии и биллинг

keygen-api — нельзя. Репозиторий распространяется под Fair Core License 1.0 (FCL-1.0-ALv2): разрешено внутреннее использование, но запрещено «конкурирующее использование» и обход проверки ключа, а в Apache-2.0 каждая версия переходит только через 2 года (проверено 2026-10-04). Для нас это «source-available» — класс 3: код не подключаем и не читаем. Скрипт проверки отнёс проект к классу 1, потому что нашёл в тексте слово «Apache» — запись в oss-verified.tsv нужно исправить. Публичная документация Keygen (машины, «сердцебиения», плавающие пулы, политики) — допустимый чек-лист идей: идеи не охраняются, текст кода — охраняется.

Свой meridian-license уже есть (1 914 строк, без внешних зависимостей, тест-векторы ключа): формат ключа и контрольный символ, флаги функций, структура лицензии со сроками, льготами и сравнением отпечатка, трейт Verifier. Что добавить: CBOR .mlic (ciborium, Apache-2.0 — не проверено), проверку Ed25519 (ed25519-dalek), сбор отпечатка (machine-uid + серийник диска/платы через windows/IOKit//sys), аренду плавающих лицензий. На сервере MAC ключей проверять за постоянное время (hmac + subtle), собственный sha256.rs оставить только для отпечатков и тестов. Сервер лицензий (включая on-prem и плавающий режим) — свой license-service: открытых аналогов класса 0–1 с нужной моделью нет.

Биллинг. Свой billing-service с трейтом PaymentProvider (уже описан в §9.2) — правильный выбор:

Экономия: async-stripe 0,7 + перенос подписочной логики мира на Stripe Billing 2 + эталоны ЮKassa/Kill Bill 0,5 + machine-uid 0,2 = ≈ 3,4 ч.-м.

3.3 Установщики и обновления

velopack (MIT; клон, коммит 2026-09-29, версия 1.2) закрывает большую часть модуля MOffice Update:

Возможность Как в velopack (по коду клона) Что дописываем мы
Каналы канал задаётся при упаковке (vpk pack --channel beta), переключение — UpdateOptions.ExplicitChannel; в Windows канал можно «вшить» в подпись Authenticode установщика (windows_channel_tag.rs) маппинг на nightly/beta/stable/lts, ограничение update_channel_max из политики (§8.7)
Дельты zstd-патчи с базовым пакетом (commands/patch.rs), до 10 дельт подряд, затем полный пакет (MaximumDeltasBeforeFallback) цель плана «≤ 15 МБ» проверить на реальных сборках Qt + Skia
Целостность SHA-256 каждого пакета из фида (verify_package_checksum) подпись фида Ed25519 (своя реализация трейта UpdateSource: скачать releases.{channel}.json + .sig, проверить ключом из бинарника)
Поэтапная раскатка staged_user_id в локаторе проценты раскатки и отсрочка до 30 дней для организаций — в update-service
Windows Setup.exe и Update.exe на Rust, ярлыки, реестр, пререквизиты (VC++), MSI per-user/per-machine через форк WiX 7 (Packaging.Windows/Msi), подпись signtool / Azure Trusted Signing MSIX для Store и предприятий — штатными средствами Windows SDK; там обновляет магазин или App Installer
macOS .app + .pkg, codesign + notarytool (OsxBuildTools.cs) проверка universal-сборки; запасной вариант — Sparkle (MIT, EdDSA, дельты)
Linux только AppImage (runtime type2, MIT; squashfs через backhand, MIT/Apache) Flatpak (Flathub) и deb/rpm обновляет сама система
Публикация GitHub, Gitea, S3, Azure, HTTP, локально (Velopack.Deployment) наш update-service + зеркало on-prem

Вывод: adopt velopack для прямой загрузки на трёх ОС; MSIX/Flatpak/deb/rpm — штатные механизмы. Экономия 6–8 ч.-м. (дельта-движок, установщики, апдейтер, откат при сбое применения). Риски: подпись фида — наша; vendor-бинарники velopack (signtool — лицензия Windows SDK, zstd — BSD/GPLv2 по выбору → BSD) используются только при сборке. WiX: официальные сборки WiX ≥ 6 требуют оплаты Open Source Maintenance Fee при выручке > 10 000 USD/год, WiX 7 не работает без принятия EULA (проверено 2026-10-04); MSI из velopack собирается их форком WiX и под OSMF не попадает. Если нужен «чистый» MSI для GPO собственной сборки — оплатить спонсорство WiX (решение владельца, раздел 4). DLL пользовательских действий WiX внутри MSI — MS-RL: исходники этих файлов публичны, достаточно текста лицензии в NOTICE.

3.4 Сбои и телеметрия

Конвейер сбоев целиком на классе 1:

  1. В каждом процессе приложения — crash-handler (только сигнал брокеру по interprocess); дамп пишет брокер через minidump-writer (вне упавшего процесса — надёжнее); Qt-сообщения и паники Rust идут в sentry-SDK.
  2. При следующем запуске и только с согласия (telemetry: off | crash_only | full, §8.7) дамп уходит в telemetry-service; пути с именем пользователя вычищаются, содержимого документов нет.
  3. На сервере — minidump-processor + символы из нашего хранилища (CI генерирует .sym из PDB/dSYM/DWARF); результат как событие отправляется в GlitchTip (MIT) по протоколу Sentry: группировка, уведомления, трекер. Если пилот покажет, что встроенная обработка minidump в GlitchTip 6 работает без Sentry Symbolicator (FSL-1.1-MIT, класс 3) — можно отдать дампы ему напрямую; иначе символикация остаётся нашей.
  4. KPI «crash-free sessions» (план 3.x) — свои события сеанса в ClickHouse/PostgreSQL + Grafana; сервисы — OpenTelemetry. PostHog — только как образец (FOSS-часть MIT, ee/ закрыта, тяжёлый стек); Umami (MIT) — сайт и портал.

Экономия: перехват и запись дампов 3, разбор и символикация 2, сервер ошибок 3, SDK и OpenTelemetry 1, сайт 0,3 = ≈ 9 ч.-м. Поправка к плану: 08-roadmap.md 1.3 («Sentry self-hosted» в инструментах), 3.1 (риск «автогруппировка (Sentry)») и 5.4 — Sentry под FSL (класс 3), заменить на GlitchTip.

3.5 Облачные коннекторы и код PasswordSafe

Схема для Hub (по 03-architecture.md: сеть есть только у брокера/Hub; docs/apps/hub.md HUB-06):

  1. «Открыть/Сохранить из облака», обзор папок, автономный кэш — OpenDAL внутри брокера (Rust, Apache-2.0): сервисы webdav (Nextcloud, ownCloud, SharePoint по WebDAV), onedrive, gdrive, dropbox, yandex-disk, s3, sftp за одним API. OAuth-вход через системный браузер + PKCE + loopback делает meridian-id, токены — в keyring.
  2. «Синхронизируемые папки» (книжки Notes в папке облака, docs/apps/notes.md) — rclone отдельным процессом: брокер запускает rclone rcd с доступом только по локальному адресу и паролю, управляет заданиями sync/copy через rc-API, передаёт rclone наши OAuth-токены. librclone внутри процесса не берём: API помечен экспериментальным, Go-рантайм в адресном пространстве Qt-приложения, в Windows библиотеку нельзя выгрузить (проверено 2026-10-04).
  3. Совместное редактирование файлов OneDrive «как в Office» недоступно (закрытые протоколы) — только MOffice Cloud (фаза 6).

Регистрация OAuth-клиентов (организационная задача фаз 1–2, решение 26 библии):

Провайдер Что нужно Условие без лишних аудитов
Google Drive проект Google Cloud, экран согласия, верификация бренда только scope drive.file + Google Picker (страница выбора на нашем домене, открывается в браузере) — без проверки ограниченных scope и без ежегодного аудита CASA; полный drive = CASA каждый год, ≈ 500–4 500 USD (проверено 2026-10-04)
OneDrive / SharePoint (Microsoft Graph) приложение в Entra ID (мультиарендное + личные аккаунты), делегированные Files.ReadWrite, offline_access верификация издателя (Partner Center) — иначе во многих организациях согласие пользователя запрещено (не проверено)
Dropbox приложение в App Console заявка на production-статус после лимита пользователей в режиме разработки (не проверено)
Яндекс Диск приложение на oauth.yandex.ru, права cloud_api:disk.* модерация приложения (не проверено)
WebDAV / Nextcloud не нужно Nextcloud Login Flow v2 (пароль приложения); Basic-пароль только по HTTPS

Экономия: OpenDAL 4–6 + rclone 3–4 = 7–10 ч.-м. против своих клиентов шести API (загрузка частями, повторы, лимиты, обновление токенов).

PasswordSafe → MOffice (разбор кода рабочего дерева, 2026-10-04; 15,4 тыс. строк Rust, из них 12,5 тыс. без тестов, 88 тестов). Переносится в основном проект и ≈ 2–2,5 тыс. строк (крипто-конверт, движок синхронизации, брокер) плюс образцы облачного API и клиппера, а не все 4,8 тыс. строк passwordsafe-core, как сказано в docs/11-open-source-reuse.md: большая часть ядра — хранилище паролей на SQLite, импорт CSV, генератор, «здоровье» паролей.

Модуль PasswordSafe (строк без тестов) Куда в MOffice Что исправить при переносе ч.-м.
passwordsafe-core: crypto.rs 241, vault/envelope.rs 187, field_cipher.rs 144, secure_mem.rs 92, шаблон формата vault/file.rs 505 meridian-crypto: «Файл → Защитить паролем» для MOP, ключ восстановления (для Business — депонирование у организации), шифрование отдельных частей пакета с контекстом AAD ключ = сырой выход Argon2id → разделять через HKDF; заголовок и версию включить в AAD данных (сейчас MAC покрывает только 82 байта заголовка); верхние границы параметров KDF из файла (иначе DoS); потоковое AEAD кусками по 64 КиБ для больших пакетов (сейчас весь файл одним блоком); mlock/VirtualLock для всех ключей на всех ОС; не держать пароль в сессии; эталонные векторы RFC 9106 / NIST GCM / RFC 5869; fsync перед переименованием 1,5–2
passwordsafe-sync: engine.rs 420, provider.rs 121, manifest.rs 39, local_state.rs 61 Hub: синхронизация файлов MOP с WebDAV/S3/«свой сервер»; модель «манифест + rev + SHA-256», конфликт «сохранить обе копии» транспорт заменить на OpenDAL (своя SigV4 без тестов, с ошибкой host:port, продублирована в двух крейтах); условная запись (ETag/If-Match); подписанный манифест против отката; не записывать файл раньше манифеста; офлайн-очередь; ложные конфликты от перешифрования с новым nonce 1
passwordsafe-daemon: protocol.rs 122, handlers.rs 543, server.rs 121, client.rs 100 meridian-broker: кадры JSON, диспетчер методов, лимит частоты TCP 127.0.0.1 + общий токен → локальные сокеты interprocess с проверкой учётных данных процесса; единственный экземпляр; служба автозапуска; версия протокола и лимит длины кадра; фоновые таймеры вместо «ленивой» блокировки; Argon2 вне потоков tokio 0,5
passwordsafe-cloud: auth.rs 70, state.rs 1 037, routes.rs 514, store.rs 449 id-service / cloud-service: токен на устройство (хранится SHA-256, ротация, список, отзыв), миграции PostgreSQL с advisory lock, запись манифеста по If-Match: "rev-N" ключи устройств/DPoP (сейчас голый bearer без срока), лимиты на вход и регистрацию, TLS к PostgreSQL, асинхронный драйвер (sqlx) вместо блокирующего в async 1
passwordsafe-ui/src-tauri: secret_store.rs 266, biometric/* ≈ 330 SecretStore в meridian-id; разблокировка защищённых документов по Touch ID/Windows Hello (P2) secret_store.rs не в git; в Linux — открытый JSON → Secret Service через keyring; Windows Hello сейчас лишь диалог согласия, ключ к нему криптографически не привязан 0,3
browser-extension (MV3) + natmsg-proxy Notes: веб-клиппер (план 3.1, Notes P1) через native messaging → брокер список разрешённых методов в хосте, лимит размера сообщения 0,5–1
totp.rs, passwordsafe-autotype — TOTP брать из totp-rs (своя реализация игнорирует SHA-256/512); автоввод офису не нужен 0

Итого по PasswordSafe ≈ 5–6 ч.-м. (учтено в 3.9). Перед переносом: закоммитить рабочее дерево (≈ 27 % Rust-кода, включая весь облачный сервер, нет в истории git) и добавить файл LICENSE — см. юридическое замечание в 3.9.

3.6 Целые офисные пакеты и модели документов

Apache OpenOffice (Apache-2.0, класс 1) — единственный полный офисный пакет, код которого можно и читать, и переносить в закрытый продукт. Проект жив, но медленный: 4.1.16 вышел 2025-11-10, 4.2.0 обещан «в 2026» (проверено 2026-10-04). Что реально стоит портировать на Rust (с уведомлением «основано на Apache OpenOffice, Apache-2.0» и записью в NOTICE):

Источник в AOO Что берём Куда в MOffice ч.-м.
sw/source/filter/ww8/* чтение и запись Word 97–2003: поля, таблицы, стили, исправления, колонтитулы — заметно полнее HWPF из Apache POI codecs/msbinary (.doc), дополняет порт POI 2–3
sc/source/filter/excel/*, sc/source/core/tool/interpr*.cxx, scaddins/source/analysis/* разбор формул BIFF8; численно выверенные функции (финансы, распределения, XIRR, купонные, Бессель) meridian-calc: функции, которых нет в IronCalc 1–1,5
sd/xml/effects.xml, transitions.xml (не проверено по клону) пресеты анимаций и переходов как данные Slides: библиотека эффектов 0,5
starmath/source/parse.cxx синтаксис StarMath ({a} over {b}) импорт формул ODF с аннотацией StarMath в MOffice Math 0,5
svx/source/customshapes/* вычисление draw:enhanced-geometry (формулы фигур ODF) meridian-scene: импорт фигур ODF 0,5
xmloff/* полнота покрытия элементов ODF ref для codecs/odf —

Цена старого C++: модель UNO и VCL, сборка dmake/gbuild, в OOXML AOO умеет только читать (экспорта docx/xlsx нет), Windows-сборки 4.1.x 32-битные (не проверено). Порт алгоритма ≈ 30–50 % стоимости написания с нуля, но даёт выверенные граничные случаи. Итого 4–7 ч.-м. экономии; форк целиком — сценарий Б (3.10), не рекомендуется.

LibreOffice — новые файлы под MPL-2.0, унаследованные — LGPLv3+, часть — GPL; по политике это «чистая комната»: код не читаем, тестовые документы (не код тестов) — только в корпус. OnlyOffice (AGPL), Calligra, AbiWord, Gnumeric (GPL) — запрет.

Модели документа — источник идей транзакций (MIT/BSD, только ref):

Экономия на идеях — проектирование, а не код: ≈ 1,5 ч.-м. (меньше переделок модели правок в фазах 1 и 6).

3.7 Оболочка: лента, докинг, QML

3.8 Справка и тестовые корпуса

Справка. Рекомендация — Sphinx (BSD-3) с Markdown-источниками: один источник даёт сайт документации, офлайн-справку Qt Help (встроенный сборщик qthelp → qhelpgenerator → .qch для F1 по контексту, план 7.2), PDF и переводы через gettext (.po → Weblate, тот же процесс, что и для интерфейса). mdBook (MPL-2.0) допустим как инструмент только со своей темой: стандартная тема копируется в результат и принесла бы файлы MPL в установщик; встроенного вывода Qt Help и зрелого i18n у него нет. MkDocs (BSD-2) — активность низкая. Поиск по справке в приложении — tantivy (уже в карте компонентов). Экономия на инструментах ≈ 1 ч.-м.; содержание (105 ч.-м. писателей) от выбора не зависит, кроме каталога функций AXEL (3.9).

Корпуса (план 5.1: К1 1 000 → К5 60 000+ файлов, хранение вне продукта — политика §6):

3.9 Собственный код владельца

Разбор только на чтение (2026-10-04): PasswordSafe, ScreenPrompt, FlyType, voice-agent, TermitPro/TermitProCore — локальные клоны; Formulник/AXEL — ~/AXEL (292 коммита) и развёрнутая копия root@sagr:/opt/projects/axel (без git). Qt/QML-кода нет ни в одном проекте; Rust — ≈ 15 тыс. строк в PasswordSafe и ≈ 9,5 тыс. в FlyType/ScreenPrompt; остальное — Go, Swift, Python, C#, TS, т.е. перенос = порт логики на Rust или вынос во внешний процесс-помощник.

Модуль владельца (язык, строк) Модуль MOffice Как ч.-м.
PasswordSafe — крипто-конверт, синхронизация, брокер, облачный API, хранилище секретов, клиппер (Rust; см. 3.5) meridian-crypto, Hub-синхронизация, meridian-broker, id-service/cloud-service, Notes-клиппер fork с исправлениями из 3.5 5–6
ScreenPrompt native/windows/src (Rust 2,4 тыс.: capture.rs 711 — Windows Graphics Capture через windows-capture (MIT) и системный кодер; audio.rs 498 — WASAPI loopback + микрофон; policy.rs, protocol.rs, mux_plan.rs, timing.rs) meridian-capture (Windows): Paint → «Снимок», Slides → «Запись экрана», Notes → вырезка fork 2–3
ScreenPrompt native/macos (Swift ≈ 1,4 тыс.: ScreenCaptureKit, системный звук и микрофон раздельно, H.264 через AVAssetWriter — платформенный кодер, как требует библия) помощник захвата macOS (Swift-процесс или порт на objc2) fork / port 1–1,5
ScreenPrompt capture/linux_portal.py 548 (XDG ScreenCast + PipeWire) и NDJSON-протокол помощников с версией и рукопожатием захват в Linux (порт на Rust через ashpd), протокол всех внешних помощников (кодек-хост, захват) port 0,5
FlyType crates/ (Rust 2,5 тыс.: flytype-core — правила «полировки», пунктуация по паузам, фильтры эха и галлюцинаций STT, трейт движка и маршрутизатор облако/локально; flytype-ffi — C ABI; flytype-protocol — WS-диктовка) «Диктовка» в Write/Notes/Mail (см. также oss-pim-collab-script.md 3.6) adopt как крейты 1–1,5
FlyType backend/internal/auth (Go 8,3 тыс.: e-mail и пароль, ссылка-вход, OAuth Google/Яндекс, SSO, passkeys на go-webauthn, TOTP, вход с устройства, refresh, JWKS) id-service — проверенные потоки и модель данных; проверка passkeys портом логики go-webauthn (BSD-3-Clause — по отчёту зависимостей FlyType) вместо webauthn-rs (MPL) port на Rust 3–5
FlyType billing (Stripe) 627, clientreleases 552, telemetry 562, objstore 509 (Go) billing-service, update-service (манифесты), telemetry-service, S3-слой cloud-service port 1–2
FlyType mind/extract (Go 4,3 тыс., без внешних утилит: docx, xlsx, pptx, odt, pdf, epub, fb2, mobi, djvu, msg) индексатор Hub (tantivy) и импорт epub/fb2/mobi в Write port 1,5–2
FlyType клиенты: LoopbackAuthServer.cs, TokenStore.cs (DPAPI), AuthTokenStorage.swift (Keychain), DeviceLoginService, Notes на SwiftUI (20,7 тыс.) meridian-id (вход через loopback), образец UX Notes ref 0,5–1
voice-agent (Python 11 тыс.: рантайм агента, MCP-сервер, хранилище сеансов SQLite, инструменты) MOffice Assist (фаза 7) — образцы ref 0,5–1
TermitPro / TermitProCore (Swift, Python, PHP): LocalToolWorker.swift и FileSystemGuard.swift (белый список, защита от traversal/symlink), компакция контекста, CommandPalette.swift; site/api — проверка лицензии, Stripe и ЮKassa (платёж + вебхук, PHP); secret_redaction.py, CrashReporter.swift Assist и песочница Script; командная палитра; адаптер ЮKassa; очистка отчётов о сбоях ref / port логики 1,5–3
AXEL engine/formula (Python: tokenizer.py 332, translate.py 342, dictionary.py 81 + словарь функций RU↔︎EN, diagnose.py 413, catalog.py 429, execvote.py 614) Sheets: русские имена функций и перевод формул RU↔︎EN (разделители ;), «Почему формула не работает», описания функций для мастера и справки; Assist «формула по описанию» с проверкой исполнением port + данные 3–4,5
AXEL engine/xlsx (audit.py 329, diff.py, tools.py 478, patcher.py 729, шаблоны ≈ 1 тыс.) Sheets: «Проверить книгу», «Сравнить книги», шаблоны учёта; идея точечной правки OOXML без пересохранения port / ref 1,5–2
AXEL engine/docx (merge.py 280, review.py 361, forms.py 180, documents.py 764, money.py — сумма прописью и НДС, requisites.py — проверка ИНН/КПП/ОГРН) Write: рассылки (слияние с таблицей), запись исправлений, элементы управления содержимым, российские шаблоны и функции port 1,5–2
AXEL engine/pdf + xlsx/fromgrid.py, сервисы OCR (RapidOCR + PP-OCRv5, Apache-2.0) и голоса (onnx-asr + GigaAM-v3, MIT) PDF → Sheets (таблицы счетов с проверкой сумм), «фото таблицы → Sheets»; офлайн-распознавание русской речи для «Диктовки» port 1–1,5
AXEL engine/vba/analyzer.py, data/ru_calendar.py анализ опасных вызовов при импорте макросов VBA; производственный календарь РФ для функций рабочих дней port 0,5

Итого код владельца: ≈ 24–37 ч.-м. Не переносить ни при каком варианте: запись через ffmpeg с libx264 и GPL-библиотеки в бандле ScreenPrompt; веса Silero TE (CC BY-NC-SA, пунктуация FlyType); poppler, ffmpeg-GPL и LibreOffice из Docker-помощников FlyType; edge-tts (LGPL-3.0) и неофициальные Google Web Speech / Edge TTS (voice-agent, TermitPro); копию Apple mlx-examples в TermitPro/backend/mlx_sd (не нужна); некоммерческие модели FLUX.1-dev и sdxl-turbo.

Юридическое замечание (не заключение юриста). Владелец как автор вправе включить свой код в закрытый MOffice под EULA, даже если раньше опубликовал его под MIT: MIT — неисключительная лицензия другим лицам, она не ограничивает самого правообладателя (но уже опубликованные версии остаются доступными всем на условиях MIT). Проверка соавторства по git shortlog -sn --all:

Проект Коммиты и авторы LICENSE Что сделать до переноса
PasswordSafe 15, один автор (Alexey Oros), 2026-07-13 … 07-16 нет файла; license = "MIT" в Cargo.toml закоммитить ≈ 27 % Rust-кода (облачный сервер, secret_store.rs); фрагмент из security-framework (MIT/Apache) в biometric/store/macos.rs — сохранить уведомление
ScreenPrompt 70: Linx 59, Alexey Oros 8, анонимная учётка «ScreenPrompt contributors» 3; вложенный репозиторий — ещё 18 (в т.ч. «Sites Publisher») MIT, «ScreenPrompt contributors» подтвердить, что анонимные учётки — инструменты владельца; закоммитить 68 + 94 файла
FlyType 2 040: Alexey Oros 2 039, Linx 1; трейлеры Co-authored-by: Cursor 1 735, Claude 150, Codex 1 MIT, «FlyType»; при этом EULA Windows-установщика — «All rights reserved» устранить противоречие лицензий; около 6,4 тыс. незафиксированных изменений
voice-agent 49: Linx 46, Alexey Oros 3 нет — (код владельца, «все права защищены»)
TermitPro / TermitProCore 443: Alexey Oros 420, Linx 23 (Cursor — 91 трейлер) / 4 (Linx); вложенный TermitProPrototype — 23 коммита «Codex Sites» MIT, «TermitPro contributors» / нет не переносить mlx_sd (Apple, MIT) и чужие «skills» из незатреканных папок
AXEL 292, Linx; трейлеры Co-Authored-By: Claude — 224 нет —

Выводы для юриста: (1) все человеческие коммиты — от учётных записей владельца (Alexey Oros, Linx/Linx72), сторонних людей-соавторов не найдено; (2) правообладатель в LICENSE указан условной меткой («… contributors», «FlyType») — нужен короткий документ владельца о принадлежности исключительного права и его передаче юрлицу MOffice со списком репозиториев; (3) ИИ-инструменты (Cursor, Claude, Codex) не являются правообладателями, условия их сервисов оставляют права на результат пользователю, но охраноспособность сгенерированного кода в разных юрисдикциях ограничена — это не мешает использованию, но ослабляет защиту от копирования, поэтому код MOffice держим закрытым (коммерческая тайна) и сохраняем человеческие проектные документы и ревью.

3.10 Стратегия: сценарии А, Б, В

База — 2 660 ч.-м., 48 месяцев, релизы 1.0 (2027-12-14) … 4.0 (2030-12-10) по 08-roadmap.md. База уже предполагает платформенные библиотеки библии (Qt, Skia, HarfBuzz/rustybuzz, pdfium как временный рендер, SQLite, Yrs, QuickJS), поэтому экономия ниже считается против «пишем остальное сами». Цифры по чужим областям взяты из итогов соседних отчётов (oss-formats-sheets-data.md, oss-text-render-lingo-math.md, oss-graphics-pdf-charts.md, oss-pim-collab-script.md, сверено 2026-10-04); пересечения (лента — 1,5–2 ч.-м. в отчёте по тексту, FlyType/voice-agent — в отчёте PIM) вычтены.

А. Всё своё + точечные библиотеки Б. Форк Apache OpenOffice как ядра В. Гибрид: Rust-ядро + форки и порты классов 0–1
Суть план как есть: свои модели, раскладка, движок формул, кодеки; библиотеки только уровня Skia/Qt/pdfium берём AOO (Writer/Calc/Impress/Draw/Math/Base) целиком, меняем оболочку на ленту, добавляем облако и лицензирование своё ядро на Rust; fork IronCalc → meridian-calc; порт POI/AOO-фильтров, formulajs/Univer, SSF, jackcess, Pinta; adopt pdfium, libmypaint, Stalwart mail-*, velopack, GlitchTip, OpenDAL/rclone; перенос кода владельца
Трудоёмкость 2 660 ч.-м. 2 800–3 300 ч.-м.: Qt-бэкенд VCL (≈ 15–25 ч.-м.), экспорт OOXML с нуля (в AOO его нет), 64-бит/arm64, укрепление C++-парсеров, CRDT поверх модели UNO — фактически переписывание ядра к фазе 6 ≈ 2 380–2 460 ч.-м. (экономия 230–305, минус ≈ 2–3 на пересечения и ≈ 25 на интеграцию, сопровождение форков и NOTICE/SBOM)
Экономия по областям, ч.-м. — — форматы, Sheets, данные 44–58 · текст, рендер, правописание, формулы 25–40 · графика, PDF, диаграммы 45–65 · PIM, CRDT, скрипты ≈ 40 · платформа и сервисы (этот отчёт) 52–65 · код владельца 24–37
Первый релиз 1.0 «Write» 2027-12-14 «весь пакет» раньше (≈ 2027-09), но с точностью docx ниже цели 85 % и без экспорта OOXML 1.0 — без изменений (критический путь — раскладка текста и docx)
Риски наибольший объём, найм старый C++ без безопасности памяти, мало специалистов по коду OOo, невозможность WASM и CRDT без переписывания, продукт «ещё один OpenOffice» расхождение форка IronCalc с апстримом, качество портов (тесты на эталонных файлах), дисциплина атрибуции
Лицензионная чистота максимальная Apache-2.0 — допустимо, но огромный NOTICE и чужая архитектура всё классов 0–1 (класс 2 — только инструменты сборки и данные корпуса) — продукт целиком под EULA

Рекомендация — сценарий В. Он сохраняет архитектуру библии и даёт ≈ 7,5–10,5 % экономии (≈ 0,8–1,1 млн USD ФОТ по ставкам РФ или 2,2–3,1 млн USD по международным). Экономия сосредоточена в фазах 2, 4, 5, 6 (готовые движок формул, кисти, PDF, почта, CRDT, сервисы), поэтому даты меняются так:

Релиз План В, агрессивно (люди те же) В, рекомендовано
1.0 «Write» 2027-12-14 2027-12-14 2027-12-14
1.5 «Sheets» 2028-04-18 2028-03-21 (−4 нед.: движок и xlsx уже есть) 2028-04-18
2.0 «Slides+Draw» 2028-10-17 2028-09-19 (−4 нед.) 2028-10-17
2.5 «Paint+PDF+Math» 2029-02-13 2029-02-13 (заморозка кода попала бы на 1–10 января; выигрыш уходит в 2.6) 2029-02-13
3.0 «Notes/Mail/Base/Forms» 2029-10-16 2029-09-18 (−4 нед.) 2029-10-16
3.5 «Cloud» 2030-04-16 2030-03-19 (−4 нед.) 2030-04-16
4.0 «Экосистема» 2030-12-10 2030-11-12 (−4 нед.) 2030-12-10

Рекомендовано не сдвигать публичные даты, а обратить экономию в буфер рисков (пессимистичный сценарий плана 3 300 ч.-м. → ≈ 3 000) и снизить пик численности с 73 до ≈ 67 FTE в H5–H6. Сдвиг «агрессивного» варианта — только после gate фазы 2, когда форк IronCalc подтвердит точность формул ≥ 99,5 % на корпусе К3.

4. Класс 2 — решения владельца

Компонент Лицензия Зачем Как связан с продуктом Альтернатива класса 0–1 Рекомендация
webauthn-rs 0.5.5 MPL-2.0 серверная проверка passkeys в id-service крейт без правок, статически в сервисе (не в десктопе) порт проверки из go-webauthn (BSD-3, уже в бэкенде FlyType) на passkey-types + coset + p256 (≈ 1 ч.-м.) по умолчанию не нужен — замена класса 1 есть; одобрить исключение в deny.toml только если порт не пройдёт аудит к L1.2
WiX ≥ 6 (официальные сборки) MS-RL + EULA OSMF MSI для GPO инструмент; DLL пользовательских действий внутри MSI MSI из velopack (их форк WiX, OSMF не применяется) использовать velopack; если нужен отдельный MSI — оплатить OSMF (спонсорство WiX)
flatpak-builder, rcodesign (apple-platform-rs), mdBook LGPL-2.1 / MPL-2.0 / MPL-2.0 сборка Flatpak, подпись macOS с Linux, справка только инструменты CI codesign + notarytool на macOS; Sphinx (BSD-3) закрепить в политике правило «инструменты, не попадающие в продукт, — без решения»; mdBook — только со своей темой
Тестовые документы LibreOffice MPL-2.0 корпус регрессий только вне продукта (LFS корпуса) GovDocs1, Apache POI одобрить как данные корпуса, код тестов не читать
Logto (если владелец захочет готовый CIAM вместо своего) MPL-2.0 аккаунты, организации, enterprise SSO отдельный сервис свой id-service + Ory Polis; Keycloak (Apache-2.0) не требуется при рекомендации 3.1
Qt-ADS, Breeze LGPL-2.1 докинг, иконки — свой QML-докинг; Lucide/Tabler не брать — решение не нужно
Qt 6 и модуль QtHelp LGPL-3.0 / коммерческая оболочка, офлайн-справка динамическая линковка — решение библии (раздел 4) и отчёта oss-text-render-lingo-math.md

5. Запрещено и замены

Запрещено (класс 3) Почему Замена
keygen-api FCL-1.0-ALv2 — source-available, запрет конкурирующего использования свой license-service + meridian-license; идеи — из публичной документации
Zitadel; Authentik (enterprise/, CC-BY-SA-части) AGPL-3.0; смешанная с закрытой частью свой id-service + Ory Polis; Keycloak — план Б
Ory Enterprise License, SuperTokens ee/, PostHog ee/ коммерческие/закрытые каталоги внутри открытых проектов не подключать эти каталоги; брать только Apache/MIT-части
Lago AGPL-3.0 свой billing-service + Stripe Billing; Kill Bill как образец
Sentry (сервер), Sentry Symbolicator FSL-1.1 / FSL-1.1-MIT GlitchTip (MIT) + rust-minidump; SDK sentry (MIT) можно
Bugsink PolyForm-Noncommercial GlitchTip
LibreOffice (GPL/LGPL-части), OnlyOffice, Calligra, AbiWord, Gnumeric, CKEditor 5 GPL/AGPL порт выборочно из Apache OpenOffice, свой код, чистая комната
KDDockWidgets, PyQt-Fluent-Widgets GPL свой QML-докинг; FluentUI (MIT) как образец
Papirus; RemixIcon (своя лицензия 2026, не OSI) GPL-3.0; неясные условия Lucide + Tabler
GPL/AGPL-крейты в репозитории zed GPL-3.0 / AGPL-3.0 только крейты под Apache-2.0 и только как образец
SDK CloudPayments без лицензии = все права защищены свой адаптер по документации API
Тесты Ghostscript в корпусе К4 AGPL-проект корпус pdf.js (Apache-2.0), свои «ломаные» PDF

6. Что переносим кодом

Источник (файлы) Лицензия Куда в MOffice Способ Обязательство
SARibbon src/SARibbonBar/SARibbonPanelLayout.*, SARibbonCategoryLayout.*, SARibbonCustomizeData.*, SARibbonActionsManager.*, SARibbonGallery* MIT (© 2020 czyt1988) shell/src/ribbon/ (C++-модель + QML) port заголовок «основано на SARibbon (MIT)», текст MIT в NOTICE
velopack: крейт velopack, CLI vpk MIT (© 2021 Caelan Sayler, © 2024 Velopack Ltd.) kernel/crates/meridian-update (зависимость), CI adopt MIT в «О программе»
Apache OpenOffice: sw/source/filter/ww8/*, sc/source/core/tool/interpr*.cxx, scaddins/source/analysis/*, starmath/source/parse.cxx, svx/source/customshapes/*, sd/xml/effects.xml Apache-2.0 codecs/msbinary, meridian-calc, meridian-math, meridian-scene, пресеты Slides port заголовок «Portions derived from Apache OpenOffice»; перенести содержимое NOTICE AOO в наш NOTICE
Lucide, Tabler (SVG) ISC / MIT assets/glyphs/ (MOffice Glyphs) fork с перерисовкой уведомления ISC и MIT в NOTICE
crash-handler, minidump-writer, rust-minidump; sentry (SDK) MIT / MIT-Apache meridian-broker, telemetry-service adopt «О программе»
GlitchTip; Ory Polis MIT; Apache-2.0 серверные контейнеры; профиль sso on-prem adopt NOTICE в on-prem комплекте
OpenDAL; rclone (бинарник) Apache-2.0; MIT + лицензии Go-зависимостей meridian-broker (облака); процесс рядом с брокером adopt NOTICE + отчёт go-licenses для rclone
go-webauthn (логика проверки) BSD-3-Clause (проверить) services/id-service/src/webauthn/ port заголовок и текст BSD-3 в NOTICE
SDK ЮKassa (модели запросов) MIT services/billing-service/src/providers/yookassa.rs port отдельных моделей заголовок MIT
PasswordSafe crypto.rs, vault/envelope.rs, field_cipher.rs, secure_mem.rs, vault/file.rs ★ (владелец) kernel/crates/meridian-crypto fork с исправлениями 3.5 сохранить уведомление security-framework (MIT/Apache) для biometric/store/macos.rs, если он переносится
PasswordSafe passwordsafe-sync/src/{engine,provider,manifest,local_state}.rs; passwordsafe-daemon/src/{protocol,handlers,server}.rs; passwordsafe-cloud/src/{auth,state,routes}.rs; browser-extension/, natmsg-proxy/ ★ Hub-синхронизация, meridian-broker, id-service/cloud-service, клиппер Notes fork / port —
ScreenPrompt native/windows/src/*, native/macos/Sources/ScreenPromptCapture/* ★ (MIT владельца) kernel/crates/meridian-capture, помощник захвата macOS fork зависимость windows-capture (MIT) — в «О программе»
FlyType crates/flytype-core, flytype-ffi, flytype-protocol ★ (MIT владельца) kernel/crates/meridian-dictation adopt —
FlyType backend/internal/{auth,billing,clientreleases,telemetry,objstore}, mind/extract (Go) ★ id-service, billing-service, update-service, telemetry-service, индексатор Hub port зависимости Go (go-webauthn, stripe-go) — по их лицензиям
AXEL engine/formula/*, engine/xlsx/{audit,diff,tools}.py, engine/docx/{merge,review,forms,money,requisites}.py, engine/pdf/*, engine/vba/analyzer.py, data/ru_calendar.py + словарь функций RU↔︎EN ★ meridian-calc (локализация, диагностика), Sheets-инструменты, Write-рассылки, PDF → Sheets, Script port + данные —
TermitPro site/api (ЮKassa, Stripe, проверка лицензии), TermitProCore/Sources/TermitProCore/{LocalToolWorker,FileSystemGuard}.swift ★ billing-service, песочница Script/Assist port логики —
Корпуса: GovDocs1, Apache POI test-data, DocBank, PubLayNet, DocLayNet, документы LibreOffice */qa/* PD / Apache-2.0 / CDLA-Permissive / MPL-2.0 corpus/ (LFS, вне продукта) данные реестр источников корпуса (план 5.1)

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

№ Документ, раздел Предложение
1 12-license-policy.md §5–6 Явное правило: инструменты сборки и CI, не попадающие в установщик и сервисы (WiX, flatpak-builder, rcodesign, mdBook, компиляторы), допустимы в классах 0–2 без отдельного решения; но всё, что инструмент копирует в результат (тема mdBook, DLL пользовательских действий WiX), оценивается как часть продукта
2 12-license-policy.md §2 FSL/FCL («fair source») — класс 3 даже для версий старше 2 лет, ставших MIT/Apache: правило проще, чем учёт дат по каждой версии
3 oss-verified.tsv keygen-sh/keygen-api → FCL-1.0-ALv2, класс 3; google/breakpad → BSD-3-Clause, класс 1; supertokens-core, posthog → пометка «ee/ закрыт»; добавить ory/polis, apache/opendal (Apache-2.0), go-webauthn/webauthn (BSD-3, проверить), 1Password/passkey-rs (только клиент); крейт dirs → пометка «транзитивно MPL option-ext»
4 component-map.md MOffice ID: «свой id-service (порт auth FlyType) + Ory Polis (SAML/SCIM) + порт проверки go-webauthn (BSD-3); Keycloak — эталон в CI и план Б»; лента: SARibbon — port, не fork; облака: «OpenDAL в брокере + rclone отдельным процессом»; сбои: «GlitchTip без Sentry Symbolicator»; обновления: «velopack + подпись фида Ed25519»; лицензии: keygen запрещён
5 00-foundation.md §4 «Установка» «автообновление — свой модуль» → «MOffice Update = velopack (MIT) + наша подпись фида Ed25519 и политики; MSIX/Flatpak/deb/rpm — штатные механизмы; MSI — из velopack или WiX ≥ 6 с оплатой OSMF»
6 00-foundation.md §9.4, 10-licensing-accounts.md §10.1, §10.9 telemetry-service = свой приёмник minidump + GlitchTip; контейнер polis (фаза 6) и профиль sso в on-prem compose
7 10-licensing-accounts.md §8.3 заголовок X-Meridian-Device-Proof заменить на DPoP (RFC 9449) с тем же ключом Ed25519 устройства
8 10-licensing-accounts.md §8.2, 08-roadmap.md E0.7 id-service начинать с порта backend/internal/auth FlyType (Go → Rust); passkeys — порт проверки go-webauthn (BSD-3) на passkey-types + coset, webauthn-rs (MPL) — только запасной вариант; программный аутентификатор passkey-rs — в интеграционные тесты
9 08-roadmap.md 1.3, 3.1 (риск «автогруппировка (Sentry)»), 5.4 «Sentry self-hosted» → GlitchTip (Sentry — FSL, класс 3)
10 08-roadmap.md E1.12 «MSI (WiX 4)» → «MSI из velopack (или WiX ≥ 6 + OSMF)»; в статьях бюджета — строка OSMF, если выбран официальный WiX
11 08-roadmap.md 5.1 (К4) «наборы Ghostscript» → «наборы pdf.js (Apache-2.0) и свои «ломаные» PDF»; для обучения моделей на DocBank/PubLayNet — юридическая проверка
12 03-architecture.md (облака), docs/apps/hub.md OneDrive/Google Drive/Яндекс Диск/Dropbox — через OpenDAL; Google — только drive.file + Picker (без CASA); синхронизируемые папки — rclone rcd под управлением брокера
13 08-roadmap.md 7.2 инструмент справки — Sphinx (BSD-3): сайт + .qch для Qt Help + PDF + gettext/Weblate из одного источника
14 08-roadmap.md E0.4/M0.5 лента на QML с портом алгоритмов SARibbon; безрамочное окно — оценить QWindowKit (Apache-2.0) в спайке M0.2
15 08-roadmap.md 1.3 при сценарии В: публичные даты не менять, пессимистичный сценарий 3 300 → ≈ 3 000 ч.-м., пик 73 → ≈ 67 FTE; пересмотр дат — после gate фазы 2
16 docs/11-open-source-reuse.md §4 PasswordSafe: переносится проект и ≈ 2–2,5 тыс. строк (крипто-конверт, движок синхронизации, шаблоны брокера и облачного API), а не 4,8 тыс. строк ядра целиком; добавить AXEL-модули из 3.9

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

Проверено вручную 2026-10-04 (≈ 23 веб-запроса; авторство — по локальным git-клонам): лицензии keygen-api (FCL), glitchtip-backend (MIT), PostHog (ee/), SuperTokens (ee/, платные функции), Ory Polis (Apache-2.0), Sentry Symbolicator (FSL-1.1-MIT), Inno Setup, SDK ЮKassa и CloudPayments (GitHub API), OpenDAL (core/Cargo.toml); функции passkey-rs, Casdoor, librclone; SCIM/организации/passkeys в Keycloak 26.7–26.8; B2B-функции Ory; EULA OSMF у WiX; CASA у Google; статус Apache OpenOffice; лицензия DocBank.

Требует проверки до решений:

  1. Обработка minidump в GlitchTip 6 — пилот: работает ли без Sentry Symbolicator (FSL); если нет — свой символикатор на rust-minidump.
  2. Поддержка DPoP (RFC 9449) в Keycloak 26.x и точная версия — важно для плана Б в 3.1.
  3. Расширения Keycloak для Apple, Яндекс ID, VK ID — лицензии и сопровождение (для плана Б).
  4. Casdoor — история уязвимостей и качество кода (если его когда-либо рассматривать).
  5. Лицензии и активность: coset, p256, ciborium, etcetera, QWindowKit (сабмодуль SARibbon), dump_syms (Mozilla), KDDockWidgets (GPL/коммерческая), DocLayNet (CDLA-Permissive), Material for MkDocs и будущее MkDocs.
  6. Объёмы наборов иконок (Lucide ≈ 1 600, Tabler ≈ 5 900, Phosphor ≈ 1 500 × 6, Material ≈ 3 800) — по памяти.
  7. Условия Microsoft (верификация издателя), Dropbox (production-статус), Яндекс (модерация OAuth-приложения).
  8. Apache OpenOffice: наличие sd/xml/effects.xml/transitions.xml и разрядность Windows-сборок 4.1.x — сверить по исходникам при старте порта; клон AOO в oss-src/ не делался.
  9. cargo-packager: формат подписи апдейтера и поддержка rpm.
  10. rclone: размер бинарника и лицензии Go-зависимостей сборки (go-licenses report); поддержка rc-API на Unix-сокете.
  11. Univer Pro и grist-ee — какие функции закрыты (влияет только на ожидания от «референса»).
  12. Суммы по чужим областям в 3.10 взяты из выводов соседних отчётов (сверено 2026-10-04); при их правке пересчитать итог.
  13. go-webauthn — лицензия BSD-3-Clause взята из отчёта о зависимостях FlyType; сверить файл LICENSE перед портом.
  14. Модели в коде владельца: GigaAM-v3 и onnx-asr (MIT — по комментарию в requirements.txt AXEL), веса Silero TE (CC BY-NC-SA — по апстриму), FLUX/SDXL-модели TermitPro — сверить карточки моделей.
  15. Цифры по коду владельца сняты с рабочих деревьев с большими незакоммиченными изменениями (PasswordSafe, ScreenPrompt, FlyType, TermitPro) — после фиксации могут измениться; юридические выводы 3.9 — не заключение юриста.