MOffice

MOffice — основание проекта (библия)

Документ-источник истины для всех остальных документов, макетов и кода. Если что-то здесь противоречит другому документу — прав этот документ, а другой нужно исправить. Версия 0.1 · 2026-10-03 · язык документации — русский; идентификаторы, код, имена файлов — английский. Правообладатель: Орос Алексей Михайлович (ИП Орос А.М.). Весь код и материалы — собственность правообладателя (файл LICENSE).


1. Что мы строим

MOffice (по-русски тоже латиницей; прежнее рабочее название — Meridian Office, решение владельца № 41) — полный офисный пакет для Windows, Linux и macOS, который:

  1. Читает всё. Открывает любой распространённый формат документов, таблиц, презентаций, изображений, схем, заметок, почты и баз данных — Microsoft Office (включая устаревшие бинарные), OpenDocument, Apple iWork, Google-экспорт, PDF, растровые и векторные форматы — с точностью отображения не хуже оригинала.
  2. Имеет свои форматы. У каждого приложения есть собственный открытый формат семейства MOffice Open Package (MOP) — ZIP-контейнер с XML и ресурсами, по духу близкий к OOXML/ODF, но проще, строже и с встроенной историей изменений.
  3. Лучше, а не «тоже». Единое ядро (одна модель текста, одна модель таблиц, один движок рендера и формул во всех приложениях), современный интерфейс одного стиля, локальная работа без облака, совместное редактирование по желанию, скрипты вместо макросов, встроенный ассистент.
  4. Один код — три платформы. Это десктопные приложения (решение владельца, 2026-10-03): ядро на Rust, своя оболочка на Rust без Qt (решение № 39); одинаковое поведение и внешний вид на Windows 10/11, macOS 13+ (Intel и Apple Silicon) и Linux (Flatpak/AppImage/deb/rpm, X11 и Wayland). Полноценная работа офлайн, установка на компьютер, нативные диалоги, печать, интеграция с проводником/Finder. Веб-версия и мобильные клиенты — не цель проекта; архитектура их лишь не исключает (ядро компилируется в WebAssembly), и они могут появиться отдельным решением после фазы 7.
  5. Коммерческий продукт с первого дня. Система аккаунтов (MOffice ID), лицензионные ключи, активация, редакции и подписки закладываются в структуру проекта с фазы 0 — см. раздел 9.

1.1 Целевые пользователи

Сегмент Что им важно Как отвечаем
Частные пользователи и студенты бесплатно/недорого, открывает присланные .docx/.xlsx без искажений точный импорт OOXML, лёгкий интерфейс, Hub с шаблонами
Малый и средний бизнес привычный Word/Excel-подход, почта + календарь, формы, простые БД Write/Sheets/Mail/Forms/Base, ribbon-интерфейс, скрипты
Корпорации и госсектор офлайн-работа, контроль данных, свои серверы, совместимость, политики локальный режим, MOffice Cloud на своём сервере, подпись документов, групповые политики
Образование дёшево, кроссплатформенно, совместная работа Linux-первый класс, совместное редактирование, Forms
Творческие и технические специалисты Paint/Draw/Math/PDF, скрипты, большие таблицы слои в Paint, коннекторы в Draw, LaTeX-ввод в Math, миллионы строк в Sheets

1.2 Принципы продукта


2. Состав пакета

2.1 Приложения

# Приложение Аналоги Назначение Фаза
0 MOffice Hub стартовое окно Office, LibreOffice Start Center единая точка входа: недавние файлы, шаблоны, облако, поиск, аккаунт, настройки, обновления 1
1 MOffice Write Word, LibreOffice Writer, Pages текстовый процессор: документы, письма, отчёты, книги, рецензирование 1
2 MOffice Sheets Excel, Calc, Numbers электронные таблицы: формулы, сводные таблицы, диаграммы, данные 2
3 MOffice Slides PowerPoint, Impress, Keynote презентации: слайды, анимации, режим докладчика 3
4 MOffice Draw Visio, LibreOffice Draw, draw.io векторная графика, схемы, блок-схемы, планы, коннекторы 3
5 MOffice Paint Paint, Paint.NET, Krita-lite растровый редактор: слои, кисти, выделения, фильтры, скриншоты 4
6 MOffice PDF Acrobat Reader/Standard, Preview просмотр, аннотации, формы, редактирование, конвертация, подпись PDF 4
7 MOffice Math LibreOffice Math, Equation Editor редактор формул (визуальный + LaTeX/UnicodeMath), встраивается во все приложения 4
8 MOffice Notes OneNote, Evernote, Notion-lite записные книжки: свободный холст, разделы, рукописный ввод, вырезки 5
9 MOffice Mail Outlook, Thunderbird почта, календарь, контакты, задачи (PIM) 5
10 MOffice Base Access, LibreOffice Base настольные базы данных: таблицы, запросы, формы, отчёты, коннекторы к серверным СУБД 5
11 MOffice Forms Microsoft Forms, Google Forms формы и опросы, сбор ответов в Sheets 5
12 MOffice Publisher MS Publisher, Scribus-lite настольная вёрстка: буклеты, визитки, печатная продукция 7
13 MOffice Plan MS Project, Planner планирование проектов: диаграммы Ганта, ресурсы, задачи 7

2.2 Общие модули (не приложения, а библиотеки ядра)

Модуль Назначение
MOffice Kernel модели документов, раскладка текста, движок формул, графика сцены, растр, undo/redo, история
MOffice Codecs импорт/экспорт всех форматов (OOXML, ODF, бинарные MS, PDF, RTF, HTML, изображения, …)
MOffice Render список отображения → Skia (CPU/GPU) → экран, печать, PDF, растровые снимки
MOffice Chart единый движок диаграмм (во всех приложениях)
MOffice Scene общая сцена фигур (геометрия prstGeom, стили заливки/обводки, группы, коннекторы) для Write, Sheets, Slides, Draw, Notes, Forms
MOffice Diagram «диаграммы-схемы» (аналог SmartArt): типы списков/процессов/иерархий/циклов с автораскладкой, во всех приложениях
MOffice Color управление цветом: ICC-профили (lcms2), sRGB/Display P3/CMYK, общий для Paint, PDF, Print, Chart
MOffice Crypto подписи и шифрование документов (XAdES/PAdES, AES-256-GCM, Argon2id), доверенные хранилища ОС, ГОСТ через плагин
MOffice Broker фоновый процесс пакета: единственный экземпляр, межпроцессное взаимодействие, глобальные клавиши, планировщик задач, восстановление; Hub — его окно
MOffice Lingo проверка орфографии, грамматики, переносы, тезаурус, автозамена, языковые данные
MOffice Script скрипты и автоматизация: JavaScript/TypeScript (QuickJS) с синхронной объектной моделью, запись макросов (recorder) как обязательная функция, Python (опц.), транслятор VBA
MOffice Sync совместное редактирование (CRDT), синхронизация с облаками и своим сервером
MOffice Print печать, настройки принтера, предпросмотр, PDF/A, PDF/UA
MOffice Assist ИИ-функции (локальные модели или облако): переписать, подытожить, формула по описанию, перевод
MOffice Shell общая оболочка: окна, ribbon, панели, диалоги, темы, доступность, локализация
MOffice ID клиент системы аккаунтов: вход, токены в хранилище ОС, организации, роли, устройства
MOffice License лицензионные ключи, активация (онлайн/офлайн), проверка подписанных лицензий, плавающие лицензии, пробный период, включение функций по редакции
MOffice Update каналы обновлений (stable/beta/nightly), дельта-обновления, подпись пакетов, откат

3. Имена, форматы, расширения

3.1 Семейство форматов MOffice Open Package (MOP)

3.2 Таблица расширений

Приложение Документ Шаблон Плоский XML Пространство имён
Write .mwx .mwt .mwxf urn:moffice:write:1
Sheets .msx .mst .msxf urn:moffice:sheets:1
Slides .mpx .mpt .mpxf urn:moffice:slides:1
Draw .mvx .mvt .mvxf urn:moffice:draw:1
Paint .mpi — — urn:moffice:paint:1 (ZIP: слои PNG/EXR + image.xml)
PDF .pdf (стандарт) — — аннотации по стандарту PDF; свой формат не нужен
Math .meq — — urn:moffice:math:1 (MathML + своя разметка)
Notes .mnx — — urn:moffice:notes:1 (одна книжка = пакет)
Mail .mmx (архив) — — архив писем/календаря/контактов (EML + ICS + VCF + индекс)
Base .mbx — — файл SQLite + служебные таблицы meridian_* (формы/запросы/отчёты как XML)
Forms .mfx .mft — urn:moffice:forms:1
Publisher .mpub .mpubt — urn:moffice:publisher:1
Plan .mpln — — urn:moffice:plan:1

Дополнительные расширения (решения 2026-10-03, см. раздел 10): .mvs — трафарет Draw (пакет библиотеки фигур), .mcht — шаблон диаграммы MOffice Chart, .mfr — пакет ответов Forms, .mnt — шаблон страницы Notes, .meqf — плоская формула Math, .mxt — пакет расширения/скрипта (подписанный ZIP с манифестом), .mkeys — схема горячих клавиш, .mlic/.mreq — лицензия и запрос офлайн-активации (раздел 9).

MIME-типы: application/vnd.moffice.<app> (например application/vnd.moffice.write), плоские — application/vnd.moffice.<app>+xml.

3.3 Чужие форматы — сводная матрица (R — чтение, W — запись, R* — чтение с ограничениями)

Приложение Полная поддержка (R/W) Чтение Экспорт
Write .docx .docm .dotx .doc .rtf .odt .ott .txt .md .html .fb2 .epub .pages .wpd .abw .wps .pub(R*, фаза 3–4) .xml(DocBook) .tex(подмножество) .pdf .pdf/a .epub .html .md .tex .png/.svg страниц
Sheets .xlsx .xlsm .xltx .xls .ods .ots .csv .tsv .xlsb .numbers .gnumeric .dif .sylk .dbf .parquet .json .xml .pdf .html .csv .json .parquet .png диаграмм
Slides .pptx .pptm .potx .ppt .odp .otp .key .sxi .pdf .mp4/.webm (видео) .png/.svg/.jpg слайдов .html
Draw .mvx .mvs .svg .odg .vsdx .vsd .vsdm .vssx(трафареты) .emf .wmf .dxf .drawio .pub(R*) .cdr(подмн.) .pdf .png .svg .emf .vsdx
Paint .png .jpg .webp .gif .bmp .tiff .ico .ora .psd .xcf .heic .avif .svg(растрирование) .raw(через libraw) .png .jpg .webp .gif(анимация) .bmp .tiff .ico .psd(базово) .pdf
PDF .pdf .xps .oxps .djvu .cbz .pdf/a .pdf/ua .png .jpg .txt .docx(через Write)
Math .meq .mml(MathML) .tex .odf(формулы) OMML(из docx) .mml .tex .svg .png
Notes .mnx .enex(Evernote) .one/.onepkg(OneNote, R*) .md-папки .html .pdf .md .html
Mail .eml .mbox .ics .vcf .pst .ost(R*) .msg .ldif .eml .mbox .ics .vcf .pdf
Base .mbx .sqlite .csv .accdb .mdb .odb .xlsx(импорт) ODBC/коннекторы PostgreSQL MySQL MS SQL .csv .xlsx .sql .pdf отчётов
Forms .mfx импорт вопросов из .docx/.xlsx ответы → .msx/.xlsx/.csv, форма → .pdf

4. Технологический стек (решение)

Слой Выбор Почему
Ядро (модели, раскладка, формулы, кодеки, растр) Rust (стабильный toolchain, рабочее пространство cargo) безопасность памяти при разборе чужих файлов, скорость как у C++, компиляция в WebAssembly для веб-версии
Рендер Skia (skia-safe) с бэкендами Metal/Vulkan/D3D12/OpenGL + CPU; экспериментально vello (wgpu) лучший в индустрии растеризатор текста и векторов, печать/PDF из того же списка отображения
Шейпинг текста по решению № 40 заменяется своим кодом (docs/research/own-code-plan.md: свой разбор OpenType и шейпер — шаги 7–8, свои UAX #14/#9 — шаг 4); сейчас — harfrust (Rust-порт HarfBuzz, MIT) + skrifa/read-fonts, ICU4X icu_segmenter и unicode-bidi; переносы — свой движок Лианга (2026-10-04) с TeX-шаблонами как данными (лицензии по языкам: ru — LPPL-1.2+, kk — PD, cs — GPL → не встраивать); rustybuzz заархивирован (решение 2026-10-04) корректные арабский, иврит, индийские письменности, лигатуры, кернинг; все компоненты — классы 0–1 политики лицензий
Оболочка (UI) Своя оболочка на Rust (решения № 39 и № 40, 2026-10-04): набор компонентов ui/meridian-ui — компоненты дизайн-системы MDS, ввод, текст, иконки, диалог «Открыть» (CM-01) — свой код; растр — свой meridian-raster (общий с ядром); окно, ввод и вывод кадра — свой платформенный слой ui/meridian-platform без зависимостей (Cocoa через objc runtime, Win32/GDI, X11; Wayland — через XWayland, свой клиент — дальше); текст — свой meridian-font сессии A (с 2026-10-04, с кернингом из GPOS); дальше — доступность, IME, GPU-путь — своим кодом. Прототип на Qt 6.8 (shell/) — эталон для сравнения снимков до паритета, не распространяется один язык и одна сборка с ядром; нет лицензионных обязательств LGPL и зависимости от вендора (продажи Qt в РФ закрыты с 2022); поставка одним файлом; вид MDS — без компромиссов. Анализ — docs/research/own-shell.md
Холст документа Rust → список отображения → растр ядра (tiny-skia; GPU-путь — фаза 1) → кадр своей оболочки один код рендера для экрана, печати, PDF и веб
Скрипты QuickJS-ng (JavaScript/TypeScript через встроенный транспилятор), опционально CPython 3.12 (плагин), транслятор VBA→MOffice Script для простых макросов лёгкая песочница, типизированный API, знакомый язык
Совместная работа Yrs (Rust-порт Yjs, CRDT) + WebSocket-сервер «MOffice Cloud» (Rust, axum) офлайн-первый CRDT, конфликтов нет, работает с любым хранилищем
Локальные данные SQLite (Base, Mail, Notes, индекс Hub), sled/redb для кэшей один файл, транзакции, переносимость
Проверка языка свой движок meridian-spell на Rust, совместимый с форматом словарей Hunspell .aff/.dic (все движки Hunspell — MPL/LGPL, класс 2); в комплекте только словари с разрешительными лицензиями: ru, en (4 варианта SCOWL), pl, nl, tr; остальные — загрузка пользователем из первоисточника; грамматика — Harper (Apache-2.0) для английского и свои правила для русского; ICU4X для сортировки/чисел/дат офлайн; продукт остаётся целиком под лицензией MOffice
Шрифты в комплекте Liberation (метрически = Arial/Times/Courier), Carlito/Caladea (= Calibri/Cambria), Gelasio (= Georgia), Selawik (≈ Segoe UI), Noto (все письменности), PT Sans/Serif, Inter, JetBrains Mono, STIX Two Math + Noto Math (OFL) и Latin Modern Math (GUST Font License) для формул. Для Aptos (шрифт Office по умолчанию с 2024) найден открытый метрический клон Intos (OFL) — включать только после юридической проверки (в нём кернинг Aptos); запасной путь — таблица компенсации ширин в фазе 1 документы из MS Office выглядят одинаково без их шрифтов
PDF-рендер на старте — pdfium (BSD) в песочном процессе; собственный писатель PDF на Rust с первого дня; переход на собственный рендер поэтапно (см. docs/apps/pdf.md) скорость выхода без компромисса по лицензии (MuPDF/Poppler — AGPL/GPL)
Управление цветом lcms2 (MIT) через крейт meridian-color один движок ICC для Paint, PDF, печати и диаграмм
Видеокодеры (Slides) платформенные API: Media Foundation (Windows), VideoToolbox (macOS), GStreamer/VA-API (Linux); без встроенных H.264-кодеров лицензии кодеков не нужны
Qt-лицензия не нужна: своя оболочка (решение № 39). Qt-прототип фазы 0 не распространяется и удаляется после паритета своей оболочки
Минимальные ОС Windows 10 21H2+ и 11; macOS 13+; Linux с glibc 2.35+ (Ubuntu 22.04+, Fedora 36+), для старых — Flatpak
Сборка и CI cargo (ядро и своя оболочка; CMake — только для Qt-прототипа до паритета), just для задач, GitHub/Gitea Actions: windows-2022, macos-14 (arm64+x86_64), ubuntu-22.04; кросс-проверка Wayland/X11 матрица из трёх ОС на каждый коммит
Установка Windows: MSIX + MSI (WiX 4), подпись EV; macOS: DMG + нотаризация, universal binary; Linux: Flatpak (главный), AppImage, deb/rpm, Snap; автообновление — свой модуль (дельты, каналы stable/beta/nightly)
Тесты unit (cargo test), снимочные тесты рендера (корпус из 10 000+ реальных документов → PNG → сравнение), фаззинг парсеров (cargo-fuzz), UI-тесты — сквозные тесты своей оболочки в безоконном режиме (щелчки и клавиши) и сравнение снимков (SSIM), бенчмарки (criterion) точность импорта измеряется числом, а не ощущениями

Альтернативы, которые рассмотрены и отклонены (подробнее — в 03-architecture.md): Electron/Tauri с веб-UI (тяжелее, хуже IME и доступность на десктопе), Flutter (слабая поддержка сложного текстового ввода и a11y на десктопе), Avalonia/.NET (меньше экосистема рендера), чистый C++ без Rust (риски безопасности в парсерах).


5. Стиль компании и дизайн-система (MOffice Design System, MDS)

5.1 Идея бренда

MOffice — короткое имя пакета (решение владельца № 41, 2026-10-04). Метафора прежнего рабочего названия сохраняется в знаке: меридиан — линия отсчёта, точность, навигация; карта, компас, штурманский стол. Бренд спокойный, инженерный, без «игрушечности»; цвета глубокие, акценты тёплые.

5.2 Токены (единые для Qt-темы, веб-версии и макетов)

Цвета бренда и приложений (светлая тема; в тёмной — те же оттенки на 1 ступень светлее):

Токен Значение Применение
--m-ink / --app-hub #0B3C5D бренд, Hub, заголовки
--m-sun #F2A541 тёплый акцент (выделения, «звёздочки», прогресс)
--app-write #3B5BDB Write
--app-sheets #1E8E5A Sheets
--app-slides #E25C3D Slides
--app-draw #0E8A8A Draw
--app-paint #C2309B Paint
--app-pdf #C92A2A PDF
--app-math #495057 Math
--app-notes #7048E8 Notes
--app-mail #1C7ED6 Mail
--app-base #A61E4D Base
--app-forms #5C940D Forms
--app-publisher #D6336C Publisher
--app-plan #E67700 Plan

Нейтральные: светлая тема — фон окна #F5F6F8, поверхность #FFFFFF, граница #E1E4E8, текст #1A1D21, вторичный текст #5C636E; тёмная — фон #16181D, поверхность #1F2228, граница #2E3238, текст #E6E8EB, вторичный #9AA1AB. Контраст текста к фону ≥ 7:1 (AAA) для основного, ≥ 4.5:1 для вторичного.

Геометрия: сетка 4 px (компоненты) / 8 px (раскладка); радиусы 6 px (кнопки, поля), 10 px (карточки, панели), 14 px (всплывающие окна); толщина обводки 1 px; фокус — кольцо 2 px цвета приложения с 2 px отступом.

Типографика интерфейса: Inter (резерв: Segoe UI / SF Pro / Cantarell), размеры 11/12/13 (основной)/15/18/24/32 px, моноширинный — JetBrains Mono. Шрифты документов по умолчанию: «Carlito» 11 pt (= Calibri) для совместимости, «PT Serif/Sans» в русских шаблонах, «Liberation Serif» для академических.

Иконки: набор MOffice Glyphs — контурные, 20 px (ribbon — 20 и 32 px), штрих 1,5 px, скругления 2 px; активное состояние — залитая версия. Основа на этапе прототипа — Lucide/Fluent (MIT), затем свой набор.

Движение: 120–200 мс, ease-out; уважение к системному «уменьшить движение».

5.3 Каркас окна (одинаков для всех приложений)

┌───────────────────────────────────────────────────────────────────────┐
│ Заголовок: [значок] Имя документа — MOffice Write  [поиск ⌘⇧P] [☁][👤] │  ← на macOS нативный, на Win/Linux свой (CSD); вкладки документов в одном окне (P0)
├───────────────────────────────────────────────────────────────────────┤
│ Файл  Главная  Вставка  Дизайн  Макет  Ссылки  Рецензирование  Вид  Скрипты │  ← вкладки ribbon (+ контекстные)
│ [группа команд] [группа] [группа] ...                     [⌄ свернуть] │  ← лента 92 px; компактный режим 40 px
├────────┬──────────────────────────────────────────────┬───────────────┤
│ Навиг. │                                              │ Боковая панель│
│ панель │           Холст документа                    │ (свойства,    │
│ (опц.) │                                              │ стили, исправ-│
│        │                                              │ ления, …)     │
├────────┴──────────────────────────────────────────────┴───────────────┤
│ Стр. 3 из 12 · 1 254 слова · Русский · [режимы] [масштаб ───●─── 100%] │  ← строка состояния 24 px
└───────────────────────────────────────────────────────────────────────┘

6. Архитектура — верхний уровень

┌──────────────── MOffice Shell (Rust: meridian-ui, решение № 39) ─┐
│ Hub │ Write │ Sheets │ Slides │ Draw │ Paint │ PDF │ Notes │ Mail │ Base │ Forms │
├──────────────── FFI (C ABI meridian-ffi, stable) ─────────────────┤
│                      MOffice Kernel (Rust)                        │
│  text-model · text-layout · grid-model · calc-engine · scene       │
│  raster · chart · math · undo/crdt · styles · fields · search      │
├─────────────── MOffice Codecs (Rust) ────────────────────────────┤
│  ooxml · odf · msbinary(doc/xls/ppt) · rtf · pdf(read/write) ·     │
│  html/md · images · svg · vsdx · pst/eml · accdb · iwork · …       │
├─────────────── Platform (Rust + C++) ─────────────────────────────┤
│  render(Skia) · fonts · print · ime · a11y · fs/cloud · script(QuickJS) · sync(Yrs) │
└───────────────────────────────────────────────────────────────────┘

Процессная модель: один процесс на документ-окно (как у браузеров) + общий «брокер» (Hub) для буфера, недавних, облака и обновлений; парсеры чужих форматов — в отдельном песочном процессе (crash ≠ потеря документа). Автосохранение — журнал операций каждые 2 с, восстановление после сбоя.


7. Фазы (сводно; подробно — 08-roadmap.md)

Фаза Название Срок (от старта) Результат
0 Основание 0–3 мес библия, дизайн-система, прототип ядра текста + рендера, репозиторий, CI, корпус тестовых файлов, схема лицензирования и редакций, каркас MOffice ID / License (клиент + сервер)
1 Ядро и Write 3–12 мес MOffice Hub + Write 1.0: .mwx, импорт/экспорт docx/odt/rtf/pdf, исправления и сравнение документов, печать; отображение (без редактирования) формул OMML и диаграмм из docx; вкладки документов; журналы операций моделей сразу CRDT-совместимые; вход в аккаунт, активация ключом, пробный период, портал аккаунта, продажа лицензий (биллинг)
2 Sheets 6–16 мес движок формул (500+ функций), сводные, диаграммы (MOffice Chart), xlsx/ods
3 Slides и Draw 12–22 мес презентации с анимациями и режимом докладчика (экспорт видео — P1); Draw с коннекторами; pptx/vsdx; Business «стартовый»: консоль администратора v1, SSO OIDC, Education
4 Paint, PDF, Math 16–26 мес растровый редактор со слоями; PDF-редактор; формулы во всех приложениях
5 Notes, Mail, Base, Forms 22–34 мес записные книжки, почта/календарь, базы данных, формы (сбор ответов офлайн/PDF/почта; веб-сбор — в 3.5 вместе с облаком); виртуальный принтер «Печать в Notes/PDF»
6 Совместная работа и облако 28–40 мес MOffice Cloud (свой сервер и on-prem для Enterprise), CRDT-редактирование между десктопными клиентами, корпоративная консоль администратора, плавающие лицензии
7 Экосистема 36–48 мес магазин скриптов и шаблонов, Assist (ИИ), Publisher, Plan; веб-просмотрщик (WASM) — только если будет решение владельца

Фазы перекрываются: команды Sheets и Slides стартуют, когда ядро стабилизировано (конец фазы 0 / середина фазы 1).


8. Соглашения для документов этого репозитория


9. Лицензирование, аккаунты и редакции (закладывается с фазы 0)

Требование владельца (2026-10-03): система аккаунтов и лицензионных ключей — часть структуры проекта с самого начала, а не надстройка «потом». Подробно — docs/10-licensing-accounts.md; здесь — решения верхнего уровня.

9.1 Редакции

Редакция Для кого Что входит Модель
Free личное использование Hub, Write, Sheets, Slides, Math (с 2.5; до этого — только отображение формул); все форматы чтения/записи этих приложений; локальные скрипты и запись макросов; просмотр (режим «только чтение») файлов Draw/Paint/Notes/Forms; PDF: просмотр, поиск, печать, заполнение форм, простые комментарии; инструмент «Снимок»; без облака, совместной работы, Assist, Base, Mail, редактирования PDF, магазина скриптов бесплатно, без аккаунта
Home дом (до 5 устройств одного владельца; аккаунт не обязателен, перенос через ключ) всё из Free + Paint, Draw, Notes, Mail (IMAP/POP3/CalDAV, без Exchange), PDF-редактор, Forms (все каналы, кроме веб-сбора), экспорт видео в Slides, Base в режиме выполнения готовых баз (BaseRuntime) разовая покупка (вечная лицензия: версия + 12 мес. функциональных обновлений + 5 лет обновлений безопасности) или подписка
Pro фрилансеры, специалисты (до 5 устройств) всё из Home + Base (конструктор), Assist, MOffice Cloud 100 ГБ, совместная работа, веб-сбор ответов Forms, приоритетная поддержка, Publisher/Plan (фаза 7) подписка (месяц/год) или разовая покупка без облака; после 12 оплаченных месяцев подписки — право на вечную версию годичной давности (fallback)
Business компании, за рабочее место всё из Pro + консоль администратора (v1 — фаза 3, v2 — фаза 6), SSO (OIDC — фаза 3, SAML/SCIM — фаза 6), политики, централизованная раздача ключей, аудит, Exchange/Graph в Mail, 1 ТБ на организацию, Home Use Program для сотрудников подписка за место/год
Enterprise крупные компании, госсектор всё из Business + on-prem сервер лицензий и облака, офлайн-активация, плавающие лицензии, SLA, собственные сборки/политики, поддержка 152-ФЗ/ГОСТ-подписи договор, объёмные ключи
Education школы, вузы как Business с ограничениями (без облачного Assist по умолчанию, облако 100 ГБ/пользователь), лицензии на класс/кампус; бесплатный уровень для школ (Hub, Write, Sheets, Slides, Forms) — предварительно, требует подтверждения владельца подписка/грант
Trial все Pro на 30 дней, без карты автоматически при первом запуске (по желанию)

9.2 MOffice ID (аккаунты)

9.3 Лицензионные ключи и активация

9.4 Серверная часть (Rust/axum + PostgreSQL, Docker-образы, on-prem вариант для Enterprise)

Сервис Назначение
id-service аккаунты, сессии, OAuth/OIDC/SAML, 2FA, организации, устройства, аудит
license-service выпуск/активация/проверка/отзыв ключей и лицензий, плавающие аренды, объёмные ключи
billing-service тарифы, подписки, платежи (адаптеры: ЮKassa, CloudPayments, Stripe), счета для юрлиц, НДС, промокоды, реселлеры
portal (веб) личный кабинет: покупки, ключи, устройства, подписки, счета; консоль администратора организации
update-service манифесты обновлений по каналам и редакциям, дельты, подпись
cloud-service (фаза 6) хранилище, совместная работа (CRDT-сервер), общий доступ
telemetry-service только по согласию: анонимные метрики и отчёты о сбоях

Домены (план): id.meridian-office.<tld>, license.…, account.… (портал), update.…, cloud.…. Enterprise получает тот же набор как docker compose для своей сети.

9.5 Как это живёт в структуре кода

kernel/crates/meridian-license/   ← проверка лицензий, отпечаток, аренда, флаги функций (Rust, без сети)
kernel/crates/meridian-id/        ← клиент аккаунтов: OAuth-поток, токены, хранилище ОС (Rust)
shell/src/account/                ← диалоги входа/активации, менеджер лицензий, значки состояния (QML/C++)
services/id-service/ services/license-service/ services/billing-service/ services/portal/ services/update-service/
tools/keygen/                     ← выпуск ключей и подпись лицензий (только у владельца, HSM/YubiKey)

Все функции, зависящие от редакции, в коде включаются через один механизм Features::has(Feature::X), а не разбросанными проверками; интерфейс показывает «замок» и предложение перейти на редакцию выше.


10. Решения по вопросам из документов (журнал, 2026-10-03)

Каждый документ заканчивается разделом «Вопросы к библии». Здесь — принятые решения; документы приводятся в соответствие постепенно, при расхождении действует этот раздел.

№ Вопрос (откуда) Решение
1 Ctrl+K: палитра или гиперссылка (write, sheets, slides) Гиперссылка — Ctrl+K/⌘K, как в Office. Командная палитра — Ctrl+Shift+P/⌘⇧P, псевдоним Alt+Q. Раздел 5.3 и макеты исправлены
2 Единицы длины (formats, write, notes, architecture) Целые EMU (914 400 на дюйм) и в файлах MOP, и во внутренней арифметике раскладки (Length = i64 EMU в meridian-core); детерминизм без плавающей точки. Write переводит Lu = 1/64 pt на EMU при реализации; Notes хранит координаты холста в EMU
3 Где лежат документы ядра (sheets, chart) Папка docs/algorithms/ — модули ядра (chart-engine.md, kernel-core.md); docs/03-architecture.md — скрипты, синхронизация, процессы. Ссылки исправлены
4 Business/SSO: фазы 2–3 или 6 (roadmap, licensing) Двухступенчато: Business «стартовый» в фазе 3 (консоль v1, OIDC, Education), Enterprise в фазе 6 (on-prem, плавающие и объёмные лицензии, SAML/SCIM, консоль v2). Таблица фаз обновлена
5 Платные форматы (draw, slides, licensing) Форматы внутри приложения никогда не платные. Платными бывают приложения (Draw, Paint, Mail, Base…) и функции (облако, совместная работа, Assist, экспорт видео = Home+, веб-сбор Forms = Pro+). Флаги DrawVsdxExport и подобные удалить из матрицы лицензирования
6 Free и просмотр чужих приложений (paint, pdf, draw, mail) Free открывает файлы Draw/Paint/Notes/Forms в режиме просмотра (без сохранения изменений), включает инструмент «Снимок», просмотр/печать/заполнение/простые комментарии PDF. Mail в Free отсутствует полностью. Раздел 9.1 обновлён
7 Скрипты в Free (sheets, market) Локальные скрипты, запись макросов и редактор — во всех редакциях, включая Free (как VBA). Магазин и Python-плагин — Home+. Синхронная объектная модель и recorder — требования P0 (раздел 2.2)
8 Лимиты Sheets (market, sheets) Минимум 1 048 576 × 16 384 (совместимость с Excel); «большой режим» 16 777 216 строк — P1, с предупреждением при экспорте в xlsx
9 Шрифт Aptos (market) Таблица компенсации ширин (фаза 1), заказ OFL-клона (фаза 2). Раздел 4 обновлён
10 Вкладки документов в одном окне (market) P0 для Shell (фаза 1); PDF — вкладки в одном процессе окна
11 Publisher и .pub (market) Publisher остаётся в фазе 7; чтение .pub (R*) в Write/Draw — фазы 3–4
12 Home: число устройств, Family, fallback, HUP, безопасность вечных лицензий (market, licensing) Home — 5 устройств; вечная лицензия = версия + 12 мес. функциональных обновлений + 5 лет обновлений безопасности; fallback после 12 месяцев подписки; Home Use Program для Business/Enterprise. «Family» и бесплатный Education для школ — предварительно да, подтверждает владелец
13 Лицензия исходного кода (architecture) Открытый вопрос владельца: проприетарный код или open core (ядро форматов под MPL-2.0). До решения — проприетарный монорепозиторий
14 Qt LGPLv3, магазины, минимальные ОС (architecture) LGPLv3 с динамической линковкой; App Store/Microsoft Store — отдельные песочные сборки в фазе 7, основной канал — прямая загрузка; минимальные ОС — раздел 4. Часть о Qt заменена решением № 39
15 Совместная работа в Paint; WebView для расширений; телеметрия в Trial (architecture) Paint — без CRDT (только файл); расширения — декларативные QML-панели, WebView-панель в песочнице — P2; телеметрия всегда по согласию, в Trial — один запрос согласия при первом запуске
16 Фокус, тёмные цвета, --text-3, выделение, тени, радиусы, высоты, HC-акцент, 32 px, стиль «Обычный», заголовок 36 px, минимум окна (design-system) Принято всё: фокус — кольцо 2 px цвета приложения с отступом 2 px (CSS макетов — приближение); тёмная тема — ступень 500 цветов приложений; --text-3 только для необязательных подсказок; выделение — единое indigo; 5 уровней теней; токены --r-xs 4px, --r-pill; высота контролов 30 px — зафиксированное исключение из сетки 4 px; hc.accent #FFD400; стиль «Обычный» — Carlito 11 pt, интервал 1,08, после абзаца 8 pt; заголовок окна 36 px; минимум окна 960 × 600
17 Значки-буквы и эмодзи в макетах (design-system) В макетах допустимы как заглушки; в продукте — глифы из mockups/assets/icons.svg и набор MOffice Glyphs
18 Вечная лицензия и мажорные версии; pdfium; CRDT-журналы с фазы 1; Forms-веб; видео Slides; Math в Free; Education-консоль (roadmap) Приняты предложения плана: pdfium как временный рендер; журналы операций CRDT-совместимы с фазы 1; веб-сбор Forms — в 3.5; экспорт видео — P1; до 2.5 Free показывает формулы без редактирования; Education-консоль — 3.6. GA за 3–4 недели до конца фазы — норма
19 Ключ: 28 бит MAC + 5 бит контрольного символа; «мягкий режим» 7 дней; регионы; CRL через update-service (licensing) Принято
20 Кэш значений формул в .msx; comments.xml; порог строк; ShapeSheet; усечение history/ (formats) Кэш значений — для всех формульных ячеек (быстрое открытие, просмотрщики); comments.xml — для потоковых обсуждений, заметки — в листе; порог строк проверить на корпусе; «живое» подмножество ShapeSheet — решение фазы 3; history/ усекать автоматически после 50 МБ с сохранением снимков-вех
21 .mcht, геоданные, 3D (chart) .mcht добавлен; карты — P2 с отдельными загружаемыми пакетами геоданных; объёмные диаграммы и 3D-фигуры — вне 1.0 и вне критерия «не хуже оригинала»
22 BaseRuntime для Home; единый язык выражений; пространство имён; SQLCipher (base) Принято: Feature::BaseRuntime в Home; выражения Base = движок формул Sheets; urn:moffice:base:1 для XML-частей в .mbx; SQLCipher статически
23 .mvs, meridian-scene, .vssx (draw); Diagram-модуль, кодеки (slides) Принято: расширения и модули добавлены в разделы 2.2, 3.2, 3.3, 4
24 forms-service до фазы 6; .mfr; forms:// в Sheets (forms) .mfr добавлен; веб-сбор — 3.5; источник forms:// описать в документе Sheets при реализации
25 Брокер; глобальные клавиши; .mxt/.mkeys; каталог шаблонов (hub, notes) Брокер — отдельный процесс meridian-broker, Hub — его окно (раздел 2.2); глобальные клавиши регистрирует брокер; расширения добавлены; домен templates.meridian-office.<tld> добавить в 9.4 при реализации
26 Exchange/Graph — Business+; регистрация OAuth-клиентов; .msg запись (mail) Принято; регистрации OAuth — организационная задача фазы 1–2 в плане
27 .meqf; шрифты Math; общий реестр клавиш; формулы в Sheets; PDF/UA-теги формул (math) .meqf и шрифты добавлены; docs/shell/keymap.md — результат фазы 0 (единый реестр сочетаний для всех приложений); формулы-дроби в Sheets — P2; теги формул PDF/UA — P1
28 Шаблоны Notes; виртуальный принтер (notes, pdf) .mnt добавлен; виртуальный принтер «MOffice» (Windows — подписанный драйвер, macOS — PDF-служба, Linux — бэкенд CUPS) — фаза 5, общий для Notes и PDF
29 ICC-движок; 32-бит float; .mpi; общий диалог экспорта (paint) lcms2 через meridian-color (раздел 4); 32-бит float — P2; .mpi оставляем (MIME решает конфликты); общий диалог экспорта изображений — в Shell
30 meridian-crypto; tessdata; печать в PDF (pdf) Крейт meridian-crypto добавлен (раздел 2.2); языковые пакеты OCR загружаются по требованию через update-service; печать в PDF — см. п. 28
31 Бинарные части MOP для больших листов; INDIRECT/OFFSET (sheets) Столбцовые бинарные части data/*.bin в .msx — P1, описать в 04-file-formats при реализации; динамические зависимости вместо волатильности — принято, задокументировать как отличие с тем же результатом
32 Вкладка «Дизайн»; сравнение P0; «Исправления»; history/snapshots; subdoc/ (write) Вкладка «Дизайн» добавлена в 5.3; сравнение документов — P0; термин UI — «Исправления» (как в Word RU); снимки истории и subdoc/ — дополнить 04-file-formats при реализации
33 Юридическая проверка ленты (market) Задача фазы 0 для юриста: патенты Microsoft на ribbon (большинство истекли/истекают 2026–2027), программа Office UI Licensing закрыта; зафиксировать отличия реализации

11. Повторное использование открытого кода (решения 2026-10-04)

С 2026-10-04 действует решение № 40 «весь код свой»: перечисленные ниже проекты — образцы алгоритмов и временные зависимости до замены своим кодом (порядок — docs/research/own-code-plan.md для ядра, docs/research/own-shell.md §8 для оболочки). Данные (шрифты, словари, шаблоны переносов, таблицы Unicode) — отдельные решения владельца.

Требование владельца: весь продукт — под собственной лицензией MOffice. Правила — docs/12-license-policy.md (классы 0–1 — без обязательств или только атрибуция; класс 2 — только по решению владельца; класс 3 — запрет). Полный отчёт и карта «что куда» — docs/11-open-source-reuse.md, реестр 669 проверенных компонентов — docs/research/oss-verified.tsv. Основные принятые решения:

Модуль Решение
MOffice Kernel / формулы форк IronCalc (MIT OR Apache-2.0) сделан (2026-10-04, A1): крейты meridian-calc и meridian-calc-xlsx — 492 работающие функции из 518 каталога Sheets, парсер A1/R1C1 с локалями, LET/LAMBDA, spill, импорт/экспорт xlsx. formualizer (MIT/Apache) — только образец алгоритмов, не зависимость. Порядок доработок: граф зависимостей → инкрементальный пересчёт с порогом полного прохода → кэш агрегатов диапазонов и индекс точного поиска → многопоточность по слоям (ADR-A1, docs/research/spikes/A-calc.md)
MOffice Codecs порт Apache POI (HWPF/HSSF/HSLF, Apache-2.0) для doc/xls/ppt; calamine (MIT) — быстрый импорт xls/xlsb/ods; rust_xlsxwriter; outlook-pst от Microsoft (MIT) — PST; jetdb (MIT/Apache) + порт Jackcess — Access; office-crypto — шифрование Office; OneNote — onenote_parser (MPL, решение владельца) или своя реализация по [MS-ONESTORE]
Шейпинг и Unicode harfrust + skrifa + fontique, ICU4X; переносы — форк hypher
Рендер и PDF Skia (skia-safe), tiny-skia, kurbo, lyon, i_overlay, lcms2; просмотр PDF — pdfium (pdfium-render); экспорт PDF/A и PDF/UA — krilla (MIT/Apache); подписи, шифрование и аннотации PDF — свои
Правописание свой meridian-spell (формат Hunspell); словари ru, en, pl, nl, tr — в комплекте
Paint кисти libmypaint (ISC) + 196 кистей mypaint-brushes (CC0); эффекты — порт Pinta (MIT, без иконок Paint.NET); стабилизатор — ink-stroke-modeler (Apache-2.0)
Draw трафареты общих наборов draw.io (Apache-2.0 + запрет для продуктов Atlassian; иконки вендоров не берём); раскладки и маршрутизация — порт mxGraph (Apache), dagre (MIT), WebCola (MIT)
Math порт раскладки формул typst (Apache-2.0); озвучивание и Брайль — MathCAT (MIT)
Mail mail-parser/mail-builder/mail-auth, imap-codec/imap-next, calcard, libdav, rPGP; санитайзер HTML — свой на html5ever
Script QuickJS-ng + rquickjs, oxc (TypeScript), tree-sitter, плагины — wasmtime/Extism; отладчик и Intl — свои (в QuickJS-ng их нет)
Sync и поиск Yrs (порядок элементов — дробные индексы, операции перемещения в Yrs нет), сервер — на основе y-sweet; поиск — tantivy
MOffice ID свой сервис на Rust с переносом сервера аккаунтов FlyType (код владельца); SAML/SCIM — Ory Polis (Apache-2.0); passkeys — порт проверки go-webauthn (BSD-3); Keycloak — эталон для тестов и план Б
Обновления, сбои, облака velopack (MIT); crash-handler + minidump-writer + rust-minidump + сервер GlitchTip (MIT); облака — OpenDAL (Apache-2.0) в брокере и rclone отдельным процессом
Собственный код владельца PasswordSafe (шифрование, синхронизация, IPC), ScreenPrompt (захват экрана), FlyType (диктовка, аккаунты), Formulник/AXEL (OCR, таблицы из PDF, инструменты формул)
Оболочка своя, без Qt (решение № 39): winit (Apache-2.0), softbuffer (MIT/Apache), rfd (MIT), растр и текст — общие с ядром; компоненты MDS, ввод, иконки, лента (алгоритмы сворачивания групп — по образцу SARibbon, MIT, код свой), докинг — свои. До паритета Qt-прототип — только эталон, модули Qt только под GPL не использовались

11.1 Решения по спайкам A8 (перенесено из журнала A, с поправкой на решение № 40)

Область Решение
Шейпинг текст документов шейпит один шейпер, одинаково на Windows, macOS и Linux; системные шейперы (CoreText, DirectWrite, Pango) в раскладку не допускаются (те же глифы, но в 4–7 раз медленнее и зависят от версии ОС). До своего шейпера (план, шаг 8) — harfrust закреплённой версии (ADR-A8, docs/research/spikes/A-shaping.md)
PDF растеризатор чужих PDF — свой; до него образец и временная зависимость — hayro (зеркало meridian-oss/hayro); расшифровку защищённых PDF делает ядро; pdfium — только запасной путь за флагом сборки после замера (docs/research/spikes/A-pdf.md)
Кисти Paint порт алгоритмов libmypaint (ISC) своим кодом на Rust в meridian-raster с побитной сверкой с C в тестах; C-код в продукт не входит; растр кистей детерминирован между ОС: без FMA, без rand() libc (docs/research/spikes/A-mypaint.md)

12. Решения владельца от 2026-10-04

№ Решение
34 Правообладатель MOffice — Орос Алексей Михайлович; продажи и договоры с пользователями — от ИП Орос А.М. В репозитории — файл LICENSE «все права защищены»; продукт распространяется только по EULA. Заявление о правах на собственный код (FlyType, ScreenPrompt, PasswordSafe, AXEL) — docs/legal/code-rights-statement.md, заполнено на правообладателя
35 «Полностью свой код под своей лицензией»: сторонний код допускается только классов 0–1 политики (общественное достояние, MIT/BSD/Apache и т. п.) — после переноса он становится частью нашего кода, от авторов остаётся только обязательная строка в «О программе». Класс 2 (MPL, LGPL, EPL) не используем: OneNote — своя реализация по спецификации Microsoft [MS-ONESTORE]/[MS-ONE] (4–7 чел.-мес.); словари под MPL/LGPL — только загрузка пользователем из первоисточника; GStreamer, libheif, libraw — только как системные библиотеки ОС, не в установщике
36 Qt: целевой вариант — коммерческая лицензия (без обязательств LGPL). В фазе 0 запросить предложение Qt «лицензии только на команду оболочки»; до покупки — прототипы на Qt без распространения кому-либо. Модули Qt только под GPL не используем ни в каком варианте. Заменено решением № 39 (своя оболочка); запрос в Qt Sales не нужен
37 Разрешение на доработки: в ходе работ сессии вправе улучшать и дорабатывать документы, макеты, код и сайт без отдельного согласования, соблюдая политику лицензий, правила серверов и протокол двух сессий (docs/sessions/README.md). Необратимые действия (удаление чужих данных, смена правообладателя, покупки) — только по слову владельца
38 Незафиксированный код PasswordSafe сохранён снимком в ветке wip/snapshot-2026-10-04 (GitHub Linx72/PasswordSafe), рабочая копия и main не тронуты
39 Своя оболочка без Qt (владелец, 2026-10-04: «сделать такую же оболочку и использовать свою оболочку»): интерфейс всех приложений — собственный набор компонентов ui/meridian-ui на Rust с видом и поведением прототипа на Qt (сравнение снимков SSIM 0.97–0.996); зависимости — только классы 0–1. Qt-прототип shell/ — эталон до паритета, затем удаляется; решения № 14 (Qt LGPL) и № 36 (коммерческая Qt) больше не действуют. Анализ, оценка ≈ 8–11 чел.-мес. до продуктового паритета и план — docs/research/own-shell.md
40 «Весь код свой» (владелец, 2026-10-04; для оболочки подтверждено напрямую сессии B — «переписать всё»): продукт коммерческий — чужие решения не подключаем, а пишем своим кодом; чужой проект — только образец алгоритма. Ядро — docs/research/own-code-plan.md (Кнут–Пласс, переносы, ZIP/DEFLATE, XML уже свои; дальше UAX, PNG/JPEG, растеризатор, OpenType, шейпер, PDF, формулы); оболочка — docs/research/own-shell.md §8 (свои диалог «Открыть» и растеризатор meridian-raster уже готовы; дальше платформенный слой окна/ввода/вывода и текст на meridian-font). Данные (шрифты, словари, UCD) — решения владельца по рекомендациям плана. Уточняет решение № 35: классы 0–1 допускаются только как временные зависимости до замены
41 Переименование: «Meridian Office» → «MOffice» (владелец, 2026-10-04: «переименуй на MOffice, делай»). Этап 1 — видимые имена: продукт «MOffice» (и в русском тексте латиницей), приложения «MOffice Write/Sheets/…», модули «MOffice Kernel/…», «MOffice Script», «MOffice Design System (MDS)», «MOffice Glyphs», «MOffice Open Package (MOP)»; знак — «M»-глобус (§5.1). Этап 2 — внутренние имена (крейты meridian-*, C ABI meridian_*/MERIDIAN_*/meridian.h, URN urn:moffice:*, MIME application/vnd.moffice.*, ключи MRDN-, домены, репозиторий) — только по отдельному слову владельца. Риск смешения с «МойОфис/MyOffice» и «MS Office» — поиск поверенного по ФИПС/WIPO, классы 9 и 42
42 Эталоны из Microsoft Word: разрешено управлять Word на Mac владельца для эталонных рендеров корпуса (сравнение точности рендера; задача сессии A)
43 Шрифты в комплекте: разрешены шрифты с разрешительными лицензиями по списку §4 — Liberation, Carlito, Caladea, Gelasio, Noto, PT Sans/Serif, Inter, JetBrains Mono, STIX Two Math, Latin Modern Math; файлы кладёт сессия A в kernel/fonts, записи в third_party.toml — сессия B
44 Этап 2 переименования (владелец, 2026-10-04, ответ «MOffice» на вопрос «делать этап 2?»; подтверждено сессии B напрямую): префикс лицензионных ключей MRDN- → MOFC- (метки MOFC-KEY-v1, MOFC-KEY-FP-v1, MOFC-LIC-v1, MOFC-TIME-v1; старый префикс при разборе — понятная ошибка, выпущенных ключей не было), URN пространств имён форматов urn:meridian:office:<app>:1 → urn:moffice:<app>:1, MIME application/vnd.meridian.<app> → application/vnd.moffice.<app> (и зашифрованный пакет), домены стендов moffice.24oros.ru, moffice-api.24oros.ru (прежние адреса работают), видимые пути данных программы — «MOffice». Остаются кодовым именем: крейты meridian-*, C ABI meridian_*/MERIDIAN_*/meridian.h, репозиторий, организация meridian-oss, образы ghcr.io/meridian-office/*