В цифровую эпоху приватность и надёжность хранения данных важны как никогда.
Сетевое разделение и недоверенные посредники ломают взаимодействие: санкции, ковровые блокировки, атаки на инфраструктуру, глухомань.
Владельцы серверов владеют данными: могут их свободно читать, сливать, менять, удалять.
Наблюдается кризис доверия к софту и запрос на импортозамещение.
Техно-гильдия Giper.Dev приняла этот вызов, и вот что у нас получилось:
Свободные стандарты
MarkedText — разметка текста
Tree — сам себе AST
HARP — β графовый REST API
UCF — компактный юникод
VaryPack — компактные структуры
Свободные реализации
MAM — экосистема кода
mol — экосистема модулей
HyOO — экосистема $mol приложений
Giper Baza — β реактивная платформа
Giper Web — α экосистема Web4-сервисов
Далее мы пробежимся по эволюционному пути Гипер технологий, подсветим типичные проблемы на каждом уровне, расскажем про свои оригинальные подходы к их решению, и пофантазируем о светлом будущем, как его видим мы.
Видео запись
Это — слайды с 22 конференции разработчиков свободных программ. Можете глянуть видео запись:
Или читать далее, как статью...
Дмитрий Карловский

Программист, дизайнер, мечтатель 30 лет в разработке ... из них 20 в вебе, и 10 в оупенсорсе Библиотеки, Фреймворки, Экосистемы ... Cтатьи, Видео, Митапы, Сообщества Яндекс, Газпром, Дойче Банк, 1С ... Giper.Dev |
MAM управляет Абстрактными Модулями
Своя модульная система, основанная на соглашениях, форсирующих лучшие практики.
Абстрактный Модуль — это просто директория с модулями на разных языках.
/acme/taxi/map/
map.ts — программная логика
map.css — каскадные стили
map.glsl — шейдеры
map.view.tree — композиция компонент
MAM: Разрешение циклических зависимостей
Зависимости определяются не импортами, а по фактическому использованию имён в коде.
// /my/store/local/local.ts class $my_store_local extends $my_store {} // /my/store/store.ts class $my_store extends $my_object { static default() { return new $my_store_local } }
Сборщик учитывает приоритет зависимостей, чтобы разрезать циклы в самых слабых местах, что гарантирует корректный порядок файлов.
/my/object
/my/store
/my/store/local
MAM: Соответствие имени и расположения
$acme_taxi_map => /acme/taxi/map
/acme/taxi/map => $acme_taxi_mapГлобально уникальное имя
Понятная прикладная семантика
Явная иерархия владения кодом
Имя в ментальной модели
Токен в нейросети
Стабильная привязка стилей
Семантичная привязка аналитики
Тэг в сообщении коммита
Ключевое слово в поиске
MAM: Множественные слои сборки на основе тэгов
Теги в менах файлов как теги слоёв:
web.js =
/mol/store/local/local.web.ts
/acme/taxi/app/app.tsweb.test.js =
/mol/test/test.ts
/mol/store/store.test.ts
/mol/store/local/local.test.ts
node.js =
/mol/store/local/local.node.ts
/acme/taxi/app/app.tsnode.test.js = node.js +
/mol/test/test.ts
/mol/store/store.test.ts
/mol/store/local/local.test.ts
Фрактальные тесты страхуют друг друга и быстро исполняются с разными уровнями изоляции.
MAM: VerLess не ломает обратную совместимость
Есть только одна версия — актуальная, а если хочется сломать API, то создаётся новый модуль, что позволяет им сосуществовать.
Было старое API
/my/schema1000 SLOC
Новое API у старого кода
/my/schema1000 SLOC
/my/schema2100 SLOC
Старое API у нового кода
/my/schema100 SLOC
/my/schema21000 SLOC
Это даёт безболезненные автоматизированные обновления, плавные миграции и концентрацию усилий всего сообщества на актуальном коде, вместо поддержки кучи устаревших версий в разных комбинациях.
MAM: Фрактальная организация репозиториев
Мы берём всё лучшее из монорепо и полирепо миров: плавная фрактальная декомпозиция репозиториев без изменения API.
В корне только неймспейсы вендоров:
/
./.meta.tree
./giper => giper.git
./acme => acme.git
Вендор у себя полностью контролирует организацию своих репозиториев. Типичный подход — неймспейсы проектов:
/acme
./acme.meta.tree
./taxi => taxi.git
./foto => foto.git
Если какой-то проект разрастается, то легко выделить подпроект в отдельный репозиторий, не меняя имён и не ломая обратную совместимость. Сборщик сам выкачивает репозитории по мере необходимости.
/acme/taxi
./map
./pay/acme/taxi
./taxi.meta.tree
./map => map.git
./pay
Подробнее о MAM

Tree — сам себе AST
Tree — простой формат представления абстрактных синтаксических деревьев в читаемой форме, как основа для различных прикладных языков.
XML | JSON | YAML | TOML | Tree | |
Размер в читаемом виде | 195% | 140% | 125% | 110% | 100% |
Сложность синтаксиса | 90 | 30 | 210 | 90 | 10 |
Однозначность синтаксиса | ✅ | ✅ | ❌ | ✅ | ✅ |
Удобочитаемость | ❌ | ❌ | ✅ | ✅ | ✅ |
Не нужно экранирование | ❌ | ❌ | ❌ | ❌ | ✅ |
Точные координаты узлов | ❌ | ❌ | ❌ | ❌ | ✅ |
Поточная обработка | ❌ | ❌ | ✅ | ✅ | ✅ |
Расширяемая модель данных | ✅ | ❌ | ✅ | ❌ | ✅ |
Широкая распространённость | ✅ | ✅ | ✅ | ❌ | ❌ |
Его невозможно плохо отформатировать и при этом он куда компактней альтернатив.
Разные Tree языки на базе единого формата
Из XML позаимствовано разделение на единый формат и множество языков, что позволяет легко создавать свои языки, используя единую инфраструктуру.
! doctype html html head meta @ charset \utf-8 script @ src \web.js body h1 \Hello & Bye p \Forget < and >
server port 8000 client name \Client1 address \192.168.1.100 client name \Client2 address \192.168.1.101
Грамматика Tree на grammar.tree
Вот все 10 паттернов грамматики формата на языке формальных грамматик:
tree .optional .list_of line line .sequence .optional indent .optional nodes new_line nodes .sequence .optional .list_of name .with_delimiter space .optional data .with_delimiter space name .list_of .byte .except special
data .sequence data_prefix .optional .list_of .byte .except new_line special .any_of new_line data_prefix indent space new_line .byte \0A indent .list_of .byte \09 data_prefix .byte \5C space .list_of .byte \20
Tree код - это буквально список строк из опциональных отступов табами, опционального списка имён разделённых пробелами и опциональными сырыми данными без экранирования до конца строки, предварёнными бэкслешем.
Подробнее о Tree

На диаграмме вы видите, как мы из 2 файлов сгенерировали 1 путём 3 трансформаций, которые что-то вырезали, что-то добавили, а что-то перемешали. Но привязка к исходным кодам никуда не потерялась, так что в отладчике будут отображаться исходные коды, а не сгенерированные.
$mol — реактивный конструктор
Фактически фреймворк $mol — это просто множество готовых компактных модулей, где каждый делает лишь одну вещь, но делает её хорошо и легко стыкуется с остальными. В энциклопедии можно найти много статей об инновациях в его архитектуре.

$mol_view — гипер настраиваемые виджеты
Свои компоненты создаются комбинацией и глубокой кастомизацией существующих: настраивается как визуал, так и поведение, и даже компоновка.
Вот весь код компонента профиля пользователя, который берёт имя из модельки и рисует форму его редактирования и вывода актуального результата:
$acme_profile $mol_page User $my_user name? => name? sub / <= Edit $mol_string value? <=> name? <= View $mol_view sub / <= name
А вот весь код приложения, которое рендерит профиль, подменяя модельку и выводя в нужно месте дополнительные данные.
$acme_taxi_app $mol_book2 pages / <= Profile $acme_profile User <= User $my_taxi_user sub / ^ <= Role
Возможно всё это благодаря тому, что каждое имя тут — это не просто свойство класса, а точка расширения, которую можно кастомизировать. Этакие автоматические слоты на максималках.
$mol: Гарантированная отзывчивость
Другая уникальная фича — возможность вывалить кучу данных в сложной вёрстке и не париться над оптимизациями, так как всё будет летать благодаря...
То, что не попадает в видимую область не то что рендериться не будет, а даже и загружаться. Возможно всё это благодаря...
$mol_wire — эффективная реактивная система
Реактивная система как связующие артерии даёт эффективную динамическую коммуникацию.
В отличие от других реактивных систем, наша понимает не только зависимости по данным, но и учитывает владение.

В этом примере, мы переключились с поста, к которому у нас есть доступ, на пост, к которому доступа нет, и вместо того, чтобы пытаться обновить отображение, получив ошибки, $mol_wire сперва поймёт, что отображение нужно вообще уничтожить.
Наша реактивная система сама контролирует время жизни объектов: на лету лениво создаёт зависимости и автоматически их уничтожает разрушая ссылки на них. Это делает GC не нужным, и это интересный вектор исследования для компилируемых языков без GC.
VaryPack — компактные произвольные структуры
Бинарная компактная упаковка произвольных структур данных без ломающих совместимость расширений для дедупликация значений. Базово поддерживает лишь юниты, числа, ссылки, строки, массивы и кортежи, а остальные типы уже представляются через них.

VaryPack: прямая и обратная совместимость
Любой объект представляется кортежем, где вначале идёт шейп (массив имён полей), а затем все значения.
[ Coord( 12, 34 ), Coord( 56, 78 ), ]
А так как у одинаковых структур одинаковые шейпы, то они легко дедуплицируются, заменяясь на ссылки.
[ ( [ "x", "y" ], 12, 34 ), ( #2, 56, 78 ), ]
А даже если для какого-то шейпа не реализована отдельная структура, то используется обобщённый объект.
[ { x: 12, y: 34 }, { x: 56, y: 78 }, ]
Таким образом разные реализации могут взаимодействовать друг с другом, не ломая ни прямую, ни обратную совместимости.
UCF: компактная кодировка юникода
Текст хранится до 2 крат эффективней благодаря UCF-кодировке, что особенно актуально при упаковке небольших значений перед шифрацией.
Язык | UCF | UTF-8 | UTF-16 |
Английский | 🟢 | 🟢 | 🟡🟡 |
Русский | 🟢 | 🟡🟡 | 🟡🟡 |
Китайский | 🟡🟡 | 🟠🟠🟠 | 🟡🟡 |
Эмодзи | 🟡🟡 | 🔴🔴🔴🔴 | 🔴🔴 🔴🔴 |
Подробнее про VaryPack
Giper Baza — децентрализованное хранилище
Наконец, самое пока что амбициозное — децентрализованная СУБД, написанная на $mol, с использованием VaryPack.
🎡 Граф данных на графе узлов
🎓 Каждый узел — мастер
🤝 Согласие без согласования
🔑 Сквозное шифрование
✍ Тотальные цифровые подписи
💯 Максимальная доступность
🚀 Синхронизация на лету
Giper Baza: Строгая доступность

Гипер База ориентированна на самые строгие гарантии без компромиссов с доступностью при разделении сети — Strict Available. Это позволяет ей работать даже полностью оффлайн, и даже прямо в браузере без доступа к серверу.
Giper Baza: Консенсус через беспорядочную конвергенцию
При восстановлении соединения внесённые локально изменения начинают в фоне синхронизироваться в реальном времени с бесконфликтным слиянием правок. Возможно это благодаря хранению всех данных в виде конвергентных структур.
Классификация подходов обеспечения согласия между параллельными агентами

Giper Baza: Графовая модель данных
Модель данных - граф с эфемерными узлами и материальными рёбрами, сгруппированными в так называемые ленды — атомарные кластеры графа, с независимым набором прав доступа.

Так же у нас есть графовый REST API на базе HARP позволяющий одной короткой строчкой получать нужные срезы данных.
Giper Baza: Реактивное состояние
Ключевая особенность архитектуры микровервисов на Гипер Базе — работа через реактивное локальное состояние, вместо коммуникации через события, сообщения, команды, запросы, ответы.
Краевой случай | Реактивное состояние | Целевые сообщения |
Подписался после изменения | 🟢 Актуальное значение | 🔴 Потерял данные |
Упал при обработке | 🟢 Поднялся и продолжаешь | 🔴 Событие потеряно |
Повторил обработку | 🟢 Идемпотентный результат | 🔴 Дублирование эффектов |
Реакция после серии изменений | 🟢 Актуальное значение | 🔴 Обработка старых событий |
Обработка в разном порядке | 🟢 Единый результат | 🔴 Разные эффекты |
Нет прямой связи | 🟢 Дойдёт потом / через других | 🔴 Ошибка доставки |
В традиционной событийной модели приходится лепить кучу костылей с материализацией событий, чтобы достигнуть идемпотентности, актуальности, персистентности и наблюдаемости.
Ну ас же микросервисам не нужна прямая коммуникация — они реагируют на изменение одних состояний и сами меняют другие. А взаимодействие микросервисов происходит неявно, через синхронизацию Гипер базы, даже если она идёт опосредованно, асинхронно и через не доверенные промежуточные узлы.
Giper Baza: Нулевое доверие
Нулевое доверие между узлами, дающая независимость от изолированности периметра. А так как у нас нет доверенных узлов, то сеть работает по принципу децентрализованной хореографии вместо централизованной оркестрации.
Сквозное шифрование и цифровые подписи всех данных, что позволяет даже восстанавливать данные на сервере с клиентских устройств.

На диаграмме пример рабочего процесса с хакатона по безопасному управлению ТЭЦ. Тут админ приносит на флешке пакет обновления от вендора в виде кусочка Гипер Базы. Оно доходит до контроллера, который проверяет лицензию, и накатывает обновление. В данном случае лицензия истекла.
А так как поведение системы не зависит от истории сообщений, а зависит лишь от текущего состояния базы, то админ всегда понимает, что происходит в системе.
Baza Pack — универсальный срез базы
И протокол синхронизации, и модуль хранения в файлах, используют единый формат пакетов. Он же может использоваться и в качестве универсального формата документов, которые можно мёржить обычным склеиванием, без потери правок.

Giper Baza: Атомарность через Тик-Ток Зеркала
Для атомарной записи данных мы используем оригинальный алгоритм, гарантирующий мгновенное восстановление базы после перезагрузки.
Свойство | TTM | REDO WAL | UNDO WAL | COW | LSS |
FSync / Write | 🟢 1 | 🟢 1 | 🟠 2 | 🔴 2+ | 🟢 1 |
Total Write Amp | 🟠 2 | 🟠 2 | 🟠 2 | 🔴 ×Path | 🟢 |
Over Size | 🟢 0 | 🟠 +News | 🟢 0 | 🟢 0 | 🔴 +History |
Fragmentation | 🟠 Write | 🟠 Write | 🟠 Write | 🔴 Read/Write | 🟠 Read |
Regular Tasks | 🟢 — | 🔴 Apply | 🟢 — | 🟢 — | 🔴 GC |
Recovery | 🟢 Just | 🟡 Fast | 🟡 Fast | 🔴 Slow | 🟡 Fast |
GiperBaza: Области применения
🟢 Коллаборативные системы
🟢 Гео распределённые системы
🟢 Универсальный формат документов
🟢 Система контроля версий файлов
🔴 Криптовалюты — нужен консенсус
🔴 Соревновательные игры — нужен оракул
За исключением криптовалют (где важна лениаризуемость) и соревновательных игр (где нужен оракул), применять это можно практически везде. Вот несколько ярких примеров:
OnLine Transaction Processing: коммуникация микросервисов через общее состояние.
Client-Server API: двусторонняя синхронизация состояния в реальном времени.
Open Documents: универсальный формат документов с бесконфликтным слиянием.
Decentralized Version Control System: бесконфликтное слияние версий файлов.
Giper Baza: Статус и планы
Успехи
✅ Реализации на TS для браузера/ноды
✅ Автоматический интерфейс с формами
✅ Общедоступные сервера синхронизации
✅ Несколько коммерческих внедрений
✅ Сообщество гипер разработчиков
Ряд технологий, доказавших своё превосходство на деле.
Сообщество разработчиков, уверенных, что за этим всем будущее.
Множество внедрений в коммерческих продуктах.
Прототипы некоммерческих продуктов, которые уже можно пощупать.
Планы
💤 Giper Web — экосистема Web4-сервисов
💤 Giper Drive — контроль версий файлов
💤 Giper Space — коллаборативные сервисы
💤 Giper Fleet — хореография серверов
💤 Giper Cartel — экосистема организаций
✨ Giper Like — цифровая экономика без денег
✨ Jack.Tree — язык мета-программирования
✨ Giper OS — реактивная операционная система
✨ Giper Net — меш сеть из IoT-девайсов
Гипер Веб — экосистема веб-сервисов на Гипер Базе, закрывающих все цифровые потребности человечества: от безопасного мессенджера, до конструктора магазинов.
Гипер Драйв — система реального времени для контроля версий и доставки файлов.
Гипер Спейс — децентрализованная соцсеть для совместного творчества, общения, документооборта и тд.
Гипер Флот — управление контейнерами и серверами через хореографию на Гипер Базе.
Гипер Картель — экосистема организаций, занимающихся обучением Гипер Технологиям и внедрением их в различных продуктах и сервисах.
Гипер Лайк — личные микрофонды и потребительские сообщества.
Джек — язык мета-программирования, компилирующийся в компактные WASM бинарники для публикации в Гипер Вебе.
Гипер Ось — реактивная операционная система для приложений из Гипер Базы.
Гипер Сеть — меш сеть, интернет вещей, умный дом и тп, но на Гипер Базе.
Двигаемся мы хоть и медленно, но верно, присоединяйтесь и вы, чтобы светлое будущее поскорее наступило!

