LINUX.ORG.RU

Система оркестрации чистых преобразований данных на основе графа зависимостей (идея)

 , , , ,


0

3

Система оркестрации чистых преобразований данных на основе графа зависимостей

1. Основная идея

  1. Система превращает приложения в набор запросов к пакетам, а пакеты — в чистые функции inputs → outputs.
  2. Для выполнения запросов система строит DAG (ориентированный ациклический граф) зависимостей пакетов.
  3. Каждое приложение не содержит кода пакетов. Оно:
    1. хранит локальное состояние приложения (например, переменные, настройки, промежуточные результаты для консольных приложений);
    2. формирует запросы к пакетам;
  4. Управляет историей DAG — графом преобразований данных, используемых приложением.

2. Пакеты

2.1 Содержимое пакета

  1. Набор бинарников для разных архитектур и конкретных процессоров, включая варианты с поддержкой инструкций (SSE, AVX, NEON и т.п.).
  2. Манифест, содержащий:
    1. UUID входных и выходных типов данных,
    2. описание пакета,
    3. контакты разработчиков,
    4. версию пакета.

2.2 Граф совместимости архитектур

  1. Определяет, какие бинарники могут запускаться на каких процессорах;
  2. Поддерживаемые наборы инструкций;
  3. Возможность запуска бинарника на более широкой архитектуре (например, x86 может выполняться на x86_64).

2.3 Принципы работы

  1. Чистота пакета:
    1. Пакет может только читать входные данные (inputs);
    2. Пакет может только записывать выходные данные (outputs);
    3. Пакет не имеет доступа к состоянию приложений или других пакетов;
    4. Каждый input и output имеет свой тип данных (UUID);
    5. Результат работы пакета полностью определяется входными данными и типом выходного значения;
    6. Общий кеш системы: outputs сохраняются в кеш, идентифицируемый комбинацией UUID всех входных данных и UUID типа выходных данных;
    7. Альтернативные реализации: при нестабильной или неэффективной работе система выбирает другую реализацию с теми же входными и выходными типами.

3. Входные и выходные данные

3.1 Типы данных

  1. Каждый тип данных имеет собственный UUID, описание и контакты разработчиков.
  2. Примеры типов: TextFile, Image, SensorReading, UIElement.

3.2 Экземпляры данных (inputs/outputs)

  1. Каждый вход и выход пакета связан с конкретным типом данных.
  2. Пакет может принимать несколько входов и создавать несколько выходов.
  3. Все входные данные доступны только для чтения.
  4. Выходные данные помещаются в общий системный кеш.
  5. Идентификация результатов: комбинация UUID всех входных данных и UUID типа выходного значения.

3.3 Особенности

  1. DAG зависимостей строится по связям между типами данных пакетов.
  2. Система автоматически управляет параллельным выполнением, когда одни выходы используются в нескольких ветвях графа.
  3. Кеш предотвращает повторные вычисления, обеспечивая высокую эффективность.
  4. Каждый пакет ведёт себя как чистая функция, без побочных эффектов.

4. Приложения

4.1 Состав

  1. Входные данные от внешних источников — драйверов, пользователя, сети, датчиков и т.п.
  2. Локальное состояние приложения, ассоциированное с экземпляром приложения: хранит привязки inputs → outputs, переменные, настройки, временные данные и другие параметры, необходимые только этому экземпляру.
  3. Принципы:
    1. Приложения не содержат кода пакетов, они лишь управляют потоками данных и вызывают нужные пакеты через систему.
    2. Для GUI используются пакеты визуализации, которые получают данные для отрисовки как обычные входные данные (UIElement и т.п.).
    3. Приложения различаются в основном по структуре запросов и набору используемых типов данных, а не по двоичному коду.

5. Общие черты системы

  1. Общий кеш промежуточных результатов: одинаковые входные данные и тип выходного значения дают один и тот же результат для всех приложений.
  2. Автоматический выбор реализации пакета на основе глобальной статистики стабильности и производительности.
  3. Параллельная обработка: результаты одного пакета могут одновременно использоваться многими другими.
  4. Автоматическая устойчивость к ошибкам: при сбоях система выбирает альтернативную реализацию.
  5. Детерминированность: каждый результат (output) однозначно определяется комбинацией входных данных и типа выходного значения.

6. Состояние приложения

  1. Приложение хранит своё локальное состояние как итеративное кольцо input → output, обновляемое на основе событий от драйверов (пользовательский ввод, сеть, датчики и т.п.).
  2. Каждое событие от драйвера добавляет новый input в кольцо, обрабатываемое через соответствующие пакеты системы.
  3. Результаты обработки (outputs) помещаются в локальное состояние приложения и/или в общий кеш системы, если они могут использоваться другими пакетами или приложениями.
  4. Состояние приложения является циклической структурой событий и их результатов, управляемой приложением и чистыми пакетами.
  5. Локальное состояние хранит:
    • переменные и настройки приложения;
    • промежуточные результаты вычислений для текущего экземпляра приложения;
    • историю DAG вызовов пакетов, связанных с этим приложением.

7. Сравнение с традиционными системами пакетов

ПризнакТрадиционные пакеты (rpm, deb)Система на графах
Что такое приложениеИсполняемая программа с зависимостямиНабор запросов к пакетам + локальное состояние
ЗависимостиЖёстко определены при установкеСтроятся динамически по типам данных
СостояниеМожет храниться внутри пакетаТолько в приложении
КешЛокальный для программыОбщий для всей системы
Выбор версииРучной, фиксированныйАвтоматический по статистике
UIВстроен в код приложенияЧерез пакеты отрисовки UI
Ошибки пакетаМогут нарушить работу приложенияАвтоматический выбор альтернативы
СовместимостьЗависит от архитектуры и сборкиГраф совместимости архитектур и инструкций
Множественные inputs/outputsОбычно отсутствуютПоддерживаются и описаны через UUID типов
Идентификация результатаПо имени файла или версииПо UUID входных данных + UUID типа результата

Краткое описание

Приложение — это набор запросов к пакетам и локальное состояние,
пакеты — чистые преобразователи данных,
результаты и кеш — общие для всей системы.

Система сама выбирает наиболее эффективные и стабильные реализации пакетов, управляет потоками данных, визуализацией и устойчивостью к ошибкам.



Последнее исправление: volodja- (всего исправлений: 2)

Ваши ученые были так увлечены вопросом, смогут ли они это сделать, что не подумали, стоит ли.©️

Я не вижу главного абзаца: объяснения нахера, собственно, оно нужно. Какую проблему традиционных систем управления пакетами оно решает?

Axon ★★★★★
()

по-моему, ты переизобрёл микросервисы, только в каком-то локальном исполнении. в теории красиво, на практике окажется жопой, которую сложно поддерживать в рабочем состоянии и отлаживать.

Iron_Bug ★★★★★
()

По-моему это текст из продвинутого бредогенератора. Очень много букв, а смысл практически отсутствует, если вообще есть.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

Да тут ещё круче: как если бы микросервисы за каким-то хреном знали о графе всех других микросервисов, с какими непосредственно они не взаимодействуют. Зачем - хз :)

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

ну, это избыточная информация, да. она им ни к чему. но суть весьма похожа: есть куча «чёрных ящиков» с интерфейсами, они обмениваются пакетами. но на практике это вырождается в кучу неуправляемой фигни и когда что-то пошло не так, очень сложно понять, где что конкретно сломалось.

Iron_Bug ★★★★★
()

Есть такое слово «оверинжиниринг», мне кажется это оно. Универсальные и сверхгибкие идеи замечательно работают для чего-то конкретного, узкого. А для комплекстного разбиваются об реальность, так как вообще не дружат с ней и не учитывают её.

Например

UI Встроен в код приложения Через пакеты отрисовки UI

Это фиаско прям сходу. Если это и появится то будет прогрызать себе путь десятилетиями.

Ошибки пакета Могут нарушить работу приложения Автоматический выбор альтернативы

Самые важные люди проголосуют против, а самые важные люди это пользователи которые вообще ничего не понимают, не хотят и не должны.

Идентификация результата По имени файла или версии По UUID входных данных + UUID типа результата

Уже есть nixos, спасибо, такого «добра» нам не надо

И так далее…


Итого, выкини из идеи 99,9% всего. И оставь, разрешение и отслеживание зависимостей через графы для пакетных менежеров. Ну, а что, автоматическое разрешение циклических зависимостей и прочих конфликтов, реализовать можно в виде независимой библиотеки, в которую просто присобачить к любому ПМ, он в неё данные суёт и извлекает, всё, может и скорость работы будет выше и так далее. Вот так имеет смысл, а идея «давайте прост возьмём и всё поменяем!», имеет смысл только в рамках какого-то независимого эксперимента, аля тот же nixos, в надежде найти поклонников и возможно уже только потом повлиять на других, так что бы они сами «списали домашку»


Хотя если это всё чисто в академическом русле, как задел на потом, то почему бы и нет, вперёд к реализации чего гадать!

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от Axon

ну например такой подход может решить проблему «ад зависимостей», изолированность исполняемого кода. Система сама ищет подходящую цепочку подпрограмм для получения нужного результата.

volodja-
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

тут фишка в том что пакеты улучшающие систему в целом будут более конкурентно способны по сравнению с комплексными продуктами. Этот подход немного только похож на nixos (то что можно несколько версий одного пакета иметь)

volodja-
() автор топика
Ответ на: комментарий от Iron_Bug

по задумке т к пакеты имеют простую структуру то отладить будет не сложно

volodja-
() автор топика
Ответ на: комментарий от Shadow

да это похоже на микросервисы, но более упрощенный вариант. В данной системе микросервис может быть реализован в целом для системы как пакет перенаправляющий данные в сеть, а что конкретно пренаправлять будет зависит от других пакетов и типов данных (uuid).

volodja-
() автор топика
Ответ на: комментарий от Axon

мне кажется такой подход сильно упростит и сдлелает гибким написание приложений т к система принуждает к повторному использованию существующего кода

volodja-
() автор топика
Ответ на: комментарий от wandrien

Спасибо OpenAI за возможность беспрепятственно деградировать.

Коротко: автор пытается превратить пакетный менеджмент в систему «чистых преобразований данных» с глобальным кешем и планировщиком DAG. Приложения — это только сценарии, которые просят систему выполнить цепочки преобразований; «пакеты» — чистые функции inputs → outputs; результаты кешируются и переиспользуются всеми. Идея близка к Nix/Guix + Bazel/BuildStream + Airflow/Dagster, но распространена с «времени сборки» на «время выполнения приложений» и дополнена автоматическим выбором реализации.

Что это пытается решить
- Детерминизм и воспроизводимость: если все «пакеты» чистые, то результат полностью определяется входами и типом выхода; это устраняет дрожь окружения.
- Дедупликация и кеш между приложениями: одинаковые вычисления выполняем один раз и переиспользуем (как Bazel remote cache, но для рантайма).
- Параллелизм из коробки: DAG позволяет автоматически распараллеливать.
- Устойчивость: при падении одной реализации можно подставить другую с тем же интерфейсом.
- Аппаратная адаптация: выбираем бинарь под x86/AVX/NEON и т.п. автоматически по графу совместимости.
- Разрыв «зависимостей по версиям»: приложения зависят не от конкретных библиотек, а от типов данных и операций (интерфейсов).

На что это реально похоже
- Nix/Guix: функциональный пакетный менеджмент, контент-адресное хранение артефактов, детерминизм.
- Bazel/Buck/BuildStream: граф задач, кеширование по входам, ремоут-исполнение.
- Airflow/Dagster/Dask/Spark: оркестрация DAG вычислений и повторное использование промежуточных результатов.
- Flow-based/Reactive: приложение как поток данных + чистые преобразования.
- WASM/WASI компонентная модель: унификация интерфейсов и песочница для «чистых» модулей.

Где это может быть полезно
- Научные/аналитические/ML пайплайны: тяжелые детерминированные этапы (декодирование, нормализация, фичи) повторяются во многих проектах — глобальный кеш экономит время и деньги.
- Медиасервисы: транскодирование, ресайз изображений/видео — много общих шагов для разных приложений.
- Сборка/CI: по сути это runtime-обобщение подходов Bazel/Nix.

Почему критика «зачем оно нужно» уместна
- Это не «улучшенная замена apt/rpm». Оно решает не классический «ад зависимости/версии/апдейты», а другую задачу — воспроизводимые вычисления и переиспользование результатов на уровне системы. Для повседневных приложений пользователя боль традиционных менеджеров тут не исчезает.

Ключевые проблемы и противоречия
1) Чистота и побочные эффекты
- Огромный пласт ПО живет на I/O, сети, БД, времени, GPU/драйверах — это побочные эффекты. Автор уводит их в «драйверы», но тогда подавляющая часть реальных приложений станет «драйверами», а не «пакетами». Либо придется эмулировать мир как входы/выходы (сложно и дорого).

2) Идентичность результатов и «альтернативные реализации»
- Ключ кеша — «UUID входов + UUID типа выхода». Значит, любые две реализации должны выдавать бит-идентичный результат. На практике даже разные сборки libjpeg/FFTW/BLAS, разные SIMD-пути, порядок потоков дают различия на уровне битов/погрешностей. Тогда либо:
  - кеш перестает быть корректным (разные «правильные» ответы), либо
  - ключ должен включать идентичность реализации/окружения (ломая идею взаимозаменяемости), либо
  - вводить формальные спецификации и тесты эквивалентности результата (дорого и редко достижимо).

3) Типы данных с UUID
- Нужна строгая спецификация типов, эволюция схем, совместимость, адаптеры между версиями, семантика сравнения. Иначе «ад типов» заменит «ад версий». Лучше контент-адресные схемы (hash схемы), семантическая совместимость и автогенерация адаптеров.

4) Стоимость глобального кеша
- Хранение и индексирование крупных промежуточных данных (видео, массивы, модели) дорого, часто дороже повторного вычисления. Нужны политики TTL/GC, профилирование выгод, эвристики «кеш vs пересчет», дедуп и шифрование.

5) Безопасность и приватность
- «Общий кеш» между приложениями/пользователями — утечки данных, вопросы изоляции. Нужны неймспейсы, ACL, шифрование, мульти-тенантность.

6) Планировщик и масштаб
- Системный диспетчер DAG для всех приложений — по сути оркестратор задач уровня ОС. Это целая распределенная система: очереди, приоритеты, отмена, перезапуски, телеметрия.

7) Аппаратная совместимость
- Граф архитектур и SIMD — полезно, но сегодня это часто решается динамическим диспетчем в самих библиотеках или multi-arch артефактами (OCI/containers, fat binaries). Новизна умеренная.

8) UI как «чистый» вывод
- Концептуально красиво (UI — данные, а рендер — драйвер), практически сложно: латентность, интерактивность, поток событий, доступ к устройствам.

Что нужно, чтобы идея взлетела
- Формальная модель типов и версий: контент-адресные схемы, адаптеры, совместимость.
- Сильная песочница и герметичность исполнения: WASM/WASI/OCI + детерминированные рантаймы.
- Реалистичная модель детерминизма: включать в ключ кеша все существенные факторы (имплементация, флаги, аппаратные особенности) или гарантировать битовую стабильность.
- Умный кеш-менеджмент: профилировать стоимость, хранить только «горячее», дедуплицировать, шифровать.
- Доменные спецификации: начать с узких доменов (ML/ETL/медиа), где выгода от переиспользования огромна и побочных эффектов мало.
- Инструменты тестирования эквивалентности реализаций и политика выбора (не только «быстрее/стабильнее», но и «семантически корректно на этом классе входов»).

Вердикт
- Идея интересная как «системный dataflow + функциональный пакетный менеджмент + глобальный кеш» для детерминированных вычислений. В этих доменах она решает реальную боль: воспроизводимость, ускорение за счет кеша, автоматический параллелизм и устойчивость.
- Как ответ на проблемы традиционных пакетных менеджеров для общего ПО — нет. Она не устраняет основные боли «apt/rpm» (конфликты версий, обновления, ABI, жизненный цикл сервисов), а подменяет задачу другой парадигмой, которая для большинства приложений слишком тяжела и местами нереализуема (побочные эффекты, детерминизм, безопасность, стоимость кеша).
- Если автор сузит область применения (например, «системный кеш и оркестрация детерминированных преобразований для ML/медиа» на базе WASM/OCI + Nix/Bazel-подходов), это может быть практически полезным. В текущем виде — концептуальный манифест без четко сформулированной боли «зачем это обычному пользователю/админу пакетов».
wandrien ★★★
()
Ответ на: комментарий от wandrien

Правильно, натравим на выхлоп бредогенератора ещё один бредогенератор, вероятно они окажутся родственными и смогут пообщаться друг с другом.

firkax ★★★★★
()

Это не система управления пакетами. Название вводит в заблуждение, поэтому тебя, @volodja- не понимают) Слово «пакет» тут вообще бы не стоило употреблять, упомянутые «преобразователи данных» куда лучше.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 2)
Ответ на: комментарий от volodja-

Если честно, описанное выглядит как реальный ад зависимостей. Добротный такой clusterfuck зависимостей, я бы сказал.

Axon ★★★★★
()
Ответ на: комментарий от firkax

отнюдь. текст ТС-а вполне читаемый, в нём есть идея и попытка описания её реализации. она не лишена недочётов, но это вполне сознательно написанный текст.

а выхлоп бредогенератора - это чистая шизофазия. там нет ни малейшего намёка на смысл.

Iron_Bug ★★★★★
()

Общий кеш промежуточных результатов: одинаковые входные данные и тип выходного значения дают один и тот же результат для всех приложений.

вот здесь у тебя описан конечный автомат без контекстов. простая обработка тоже бывает, но в общем случае это не всегда так. данные - это данные. а контекст выполнения - это контекст выполнения. одни и те же данные в разных контекстах могут вести к разной обработке и прочее. но если ты контекст включишь в данные, у тебя придётся заменять все отсылки к «типам данных» и прочее и будет ненужный оверхед. а это нерационально. потому что контекст относится к потоку выполнения, а не к данным. в теории конечных автоматов давно придумали контекст и в твоей идее контекстов явно не хватает.

Iron_Bug ★★★★★
()
Ответ на: комментарий от wandrien

Ключевые проблемы и противоречия

  1. Чистота и побочные эффекты
  • Огромный пласт ПО живет на I/O, сети, БД, времени, GPU/драйверах — это побочные эффекты. Автор уводит их в «драйверы», но тогда подавляющая часть реальных приложений станет «драйверами», а не «пакетами». Либо придется эмулировать мир как входы/выходы (сложно и дорого).

Да, эта система не совместима с текущими подходами и прослойку совместимости будет сложно сделать. Мне кажется в конечном итоге такая платформа / дистрибутив на десктопе, например, выглядела бы как графический интерфейс, управляемый голосом, в котором окна для ввода каких то данных появляются по запросу не привязанно к конкретному приложению. Приложений в привычном понимании бы вообще не было, а было бы одно большое приложение с разным, динамически меняющимся функционалом.

volodja-
() автор топика
Последнее исправление: volodja- (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

С контекстом есть проблема. Пока что можно предложить такое решение: хранить контекст как данные / объект в петле inputs -> outputs. Такой объект будет идентифицировать экземпляр запущенного приложения / задачи.

volodja-
() автор топика
Последнее исправление: volodja- (всего исправлений: 1)
Ответ на: комментарий от wandrien

это одна из фич, чтобы пакеты можно было просто копировать без разных скриптовых надстроек

volodja-
() автор топика
Ответ на: комментарий от volodja-

выглядела бы как графический интерфейс, управляемый голосом,

На этом месте я бы ТС-а отправил в биореактор.

Какой, блять, интерфейс управляемый голосом? Обсмотряться своих железных человеков с джарвисом и тащат эту херню в мир!

Почитайте уже про эргономику букварь какой-нидь.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

Кошмар. Но ок, обычно в рекомендация по размещению элепментов в UI предлагается какойто алгоритм на основе приоритетов. Возможно такой алгоритм можно создать, оформив его в виде пакета и статистики действий польщователя переработанное ИИ (тоже в рамках пакета).

volodja-
() автор топика
Ответ на: комментарий от volodja-

Кошмар.

Я стриггерился на голосовой интерфейс.

Сама идея чего-то там на графах вполне достойна рассмотрения. Конечно, нужна экспертиза решения и убедительные доводы, что это решение будет заметно лучше во всем существующих. Тут я не готов нырять по самые ноздри.

yax123 ★★★★★
()
Последнее исправление: yax123 (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)