MOffice — основание проекта (библия)
Документ-источник истины для всех остальных документов, макетов и кода. Если что-то здесь противоречит другому документу — прав этот документ, а другой нужно исправить. Версия 0.1 · 2026-10-03 · язык документации — русский; идентификаторы, код, имена файлов — английский. Правообладатель: Орос Алексей Михайлович (ИП Орос А.М.). Весь код и материалы — собственность правообладателя (файл LICENSE).
1. Что мы строим
MOffice (по-русски тоже латиницей; прежнее рабочее название — Meridian Office, решение владельца № 41) — полный офисный пакет для Windows, Linux и macOS, который:
- Читает всё. Открывает любой распространённый формат документов, таблиц, презентаций, изображений, схем, заметок, почты и баз данных — Microsoft Office (включая устаревшие бинарные), OpenDocument, Apple iWork, Google-экспорт, PDF, растровые и векторные форматы — с точностью отображения не хуже оригинала.
- Имеет свои форматы. У каждого приложения есть собственный открытый формат семейства MOffice Open Package (MOP) — ZIP-контейнер с XML и ресурсами, по духу близкий к OOXML/ODF, но проще, строже и с встроенной историей изменений.
- Лучше, а не «тоже». Единое ядро (одна модель текста, одна модель таблиц, один движок рендера и формул во всех приложениях), современный интерфейс одного стиля, локальная работа без облака, совместное редактирование по желанию, скрипты вместо макросов, встроенный ассистент.
- Один код — три платформы. Это десктопные приложения (решение владельца, 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.
- Коммерческий продукт с первого дня. Система аккаунтов (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 Принципы продукта
- Точность важнее скорости релиза. Открытый документ должен выглядеть так же, как в приложении-источнике.
- Локально по умолчанию. Всё работает без интернета и аккаунта. Облако и ИИ — опциональные модули.
- Одна модель — много представлений. Таблица в Write, диаграмма в Sheets, текст в Slides — это один и тот же код.
- Не ломать привычки. Горячие клавиши, расположение команд и терминология — знакомые пользователям Microsoft Office; но с «компактным режимом» для тех, кто любит минимализм.
- Расширяемость — часть продукта. Скрипты (JavaScript/TypeScript и Python), плагины, темы, шаблоны, магазин.
- Безопасность по умолчанию. Скрипты в песочнице, подписи документов, отсутствие «макро-вирусов» как класса.
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)
- Контейнер: ZIP (deflate; большие медиа — stored),
первый элемент
mimetypeбез сжатия (как в ODF), чтобы тип определялся по первым байтам. - Содержимое: XML с пространством имён
urn:moffice:<app>:1(схемы — XSD + RELAX NG), манифестmanifest.xml, метаданныеmeta.xml(Dublin Core + свои), стилиstyles.xml, настройкиsettings.xml, медиа вmedia/, встроенные объекты вobjects/, миниатюраthumbnail.png, история измененийhistory/(журнал операций CRDT, опционально), скриптыscripts/, подписиsignatures/. - Плоский вариант (один XML-файл без ZIP) для систем
контроля версий: суффикс
f→.mwxf,.msxf, … - Шаблоны: последняя буква
tвместоx. - Скрипты внутри документа не меняют расширение (в
отличие от
.docm): наличие скриптов видно по значку и по манифесту, скрипты не запускаются без явного разрешения, подписанные — по политике. - Версионирование:
manifest.xml/@version, обратная совместимость в пределах мажорной версии; неизвестные элементы сохраняются при пересохранении (round-trip extension elements).
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; свой формат не нужен | |
| Math | .meq |
— | — | urn:moffice:math:1 (MathML + своя разметка) |
| Notes | .mnx |
— | — | urn:moffice:notes:1 (одна книжка = пакет) |
.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 |
| .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 |
| .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). Метафора прежнего рабочего названия сохраняется в знаке: меридиан — линия отсчёта, точность, навигация; карта, компас, штурманский стол. Бренд спокойный, инженерный, без «игрушечности»; цвета глубокие, акценты тёплые.
- Логотип пакета — «M»-глобус: окружность (глобус), внутри которой два меридиана, сходящиеся к экватору, и центральная засечка складываются в букву «M»; сверху — короткая засечка, как у компаса. Монохромный вариант — кольцо с «M» из линий. Так знак читается и как буква имени, и как глобус с меридианами.
- Словесный знак: «MOffice» одним словом, «M» и «O» прописные; в русском тексте не переводится.
- Риск смешения: имя близко к «МойОфис/MyOffice» и
«MS Office» — до регистрации нужен поиск патентного поверенного по ФИПС
и WIPO в классах МКТУ 9 и 42
(
docs/legal/trademark-check.md). - Значки приложений: скруглённый квадрат (радиус 22 % стороны) цвета приложения, белый глиф-символ (не буква, как у MS, а знак сути: Write — перо-строка, Sheets — сетка 2×2, Slides — прямоугольник с треугольником «play», Draw — узел-коннектор, Paint — капля-кисть, Notes — закладка, Mail — конверт, Base — цилиндр, Forms — список с галочкой, PDF — лист с загнутым углом, Math — ∑, Hub — логотип).
- Голос интерфейса: коротко, по делу, во втором лице («Сохраните файл…» → «Сохранить»), без восклицаний.
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 |
|
--app-math |
#495057 |
Math |
--app-notes |
#7048E8 |
Notes |
--app-mail |
#1C7ED6 |
|
--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
└───────────────────────────────────────────────────────────────────────┘
- Вкладка Файл открывает «backstage» на весь экран (Создать/Открыть/Сохранить/Экспорт/Печать/Поделиться/Сведения/Параметры).
- Командная палитра
Ctrl+Shift+P/⌘⇧P(псевдонимAlt+Q, как «Что вы хотите сделать» в Office) — поиск любой команды, стиля, файла, функции.Ctrl+K/⌘Kостаётся за гиперссылкой, как в Microsoft Office (решение 2026-10-03). - Контекстная мини-панель при выделении (как в Office) + контекстные вкладки ribbon (Таблица, Рисунок, Диаграмма).
- Три режима плотности: «Лента», «Компактная панель» (одна строка), «Фокус» (только холст).
- Горячие клавиши — как в Microsoft Office; схема LibreOffice и своя — в настройках.
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. Соглашения для документов этого репозитория
- Язык документов — русский; термины интерфейса даём по-русски с английским в скобках при первом упоминании.
- Имена приложений пишем латиницей: MOffice Write, MOffice Sheets (не «Врайт»). Ядро — MOffice Kernel.
- Каждый документ приложения (
docs/apps/<app>.md) имеет разделы: Назначение и аналоги → Функции (по группам, с приоритетами P0/P1/P2) → Экраны (список всех окон/панелей/диалогов с описанием) → Модель данных → Алгоритмы и скрипты (псевдокод/Rust/TypeScript) → Форматы (чтение/запись, особенности) → Горячие клавиши → Критерии готовности → Риски. - Приоритеты: P0 — без этого нельзя выпустить 1.0; P1 — в 1.x; P2 — позже.
- Макеты (
mockups/*.html) используютmockups/assets/mds.css, одна страница на приложение, каждый экран — блок<section class="screen">с подписью; не изобретать свои цвета — только токены. - Код в примерах: Rust для ядра, TypeScript для MOffice Script и веб,
C++/QML для оболочки. Комментарии в коде — двуязычные:
// Пересчёт зависимостей / Recalculate dependencies.
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 (аккаунты)
- Вход: e-mail + пароль (Argon2id), ссылка-вход по почте, OAuth (Google, Apple, Microsoft, Яндекс ID, VK ID), корпоративный SSO (OIDC/SAML 2.0), 2FA (TOTP, passkeys/WebAuthn), восстановление доступа.
- Сущности: пользователь → устройства (ограничение по редакции) → организации (владелец/админ/участник/гость) → группы → политики. SCIM-провиженинг для Business/Enterprise, журнал аудита, регионы хранения данных (РФ / ЕС), удаление аккаунта и экспорт данных (152-ФЗ, GDPR).
- Аккаунт не обязателен для Free/Home-офлайн; обязателен для подписок, облака, совместной работы, Assist.
- Токены: короткоживущий access (15 мин) + refresh (90 дней, ротация); хранение — Keychain (macOS), DPAPI/Credential Manager (Windows), Secret Service (Linux). Никаких токенов в файлах настроек.
9.3 Лицензионные ключи и активация
- Формат ключа:
MOFC-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX(25 символов Crockford Base32 без неоднозначных букв; внутри — редакция, тип (вечная/подписка/объёмная), число мест, серия, дата выпуска, контрольная часть). Ключ сам по себе ничего не «разблокирует»: он обменивается на лицензию. - Лицензия — подписанный (Ed25519) файл
license.mlic(CBOR): владелец, редакция, функции (features), устройства/отпечаток (хэш: ОС, ID машины, серийник диска/платы, без персональных данных), сроки, льготный период, канал обновлений, ограничения. Проверяется офлайн при каждом запуске; ключ подписи зашит в приложение, резервный — для ротации. - Способы активации: онлайн (ключ → сервер →
лицензия), через аккаунт (покупка привязывается к
MOffice ID, устройства активируются входом), офлайн
(файл запроса
.mreq→ портал/администратор →.mlic), плавающая (on-prem сервер лицензий выдаёт аренду на 1 ч, продлевается в фоне, 24 ч офлайн-резерв), объёмная (Enterprise: один ключ на N мест + политика автоактивации через MDM/GPO). - Подписка: онлайн-проверка раз в 7 дней, льготный период 30 дней без сети, затем режим «только чтение и печать» (документы никогда не блокируются). Вечная лицензия: обновления в пределах мажорной версии.
- Деактивация и перенос устройств — из портала и из приложения; отзыв ключа — списком отзыва при проверке.
- Защита — разумная: подписи, проверки в нескольких местах ядра, целостность сборки; никакого DRM, который мешает честным пользователям; взлом не предотвратить полностью — цель «честным удобно, пиратам неудобно».
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-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 — свой; до него образец и временная
зависимость — 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/* |