Обновить

Микросервисы(async single-threaded) в эмбеддед. OpenBMC и рефакторинг «кошмара на С++» с помощью ИИ

Уровень сложностиСложный
Время на прочтение10 мин
Охват и читатели5.8K
Всего голосов 1: ↑0 и ↓1-1
Комментарии2

Комментарии 2

Вот как нейросеть видит данный проект при анализе исходников (публикую только вывод, там большая портянка):

Сильные стороны:

  • Архитектура микросервисов на локальной шине — образцовая: IDL-first контракты, service discovery (mapper), подменяемые реализации, нулевая связанность демонов между собой. Для встраиваемого проекта это очень высокий уровень инженерной культуры.

  • Декларативность: платформа = JSON-конфиги entity-manager + выбор packagegroup-фич; логика последовательностей = systemd-таргеты. Порог входа для поддержки «ещё одной платы» низкий.

  • Безопасность продумана системно: разделение привилегий по D-Bus-политикам, mTLS, Redfish-привилегии, hardened-флаги компиляции, отдельные пользователи для демонов.

  • Живой процесс разработки: Gerrit + Jenkins CI, обязательные тесты и рецензии.

Слабые стороны и компромиссы:

  • Сложность кросс-репозиторной разработки: добавить одну фичу часто затрагивает 3–4 репозитория (YAML интерфейса → codegen → демон → Yocto-рецепт) с синхронизацией через Gerrit. Кривая обучения крута (нужно знать Yocto, D-Bus, корутины C++20, meson).

  • D-Bus брокер — единая точка отказа: при падении шины система слепнет (частично смягчено fail-monitor и рестартами systemd, но это узкое место по конструкции).

  • Ресурсная цена: модель «много мелких процессов» и Boost в bmcweb тяжеловаты для BMC с 128–256 МБ RAM; bmcweb на шаблонах C++20 ещё и очень долго компилируется.

  • Следы встраиваемости ощущаются буквально: пути конфигов hwmon повторяют devicetree и превышают 260 символов — при клонировании на Windows мне пришлось включать core.longpaths, checkout по умолчанию падает. Это не «баг», но показывает, что вне Linux с проектом работать тяжело.

Итог. OpenBMC — зрелый, строго модульный проект уровня инфраструктурного ПО: D-Bus играет роль, которую в облаках играют REST/gRPC, а systemd — роль оркестратора вроде Kubernetes (в миниатюре). Архитектура рассчитана на долгий жизненный цикл и массовое многовендорное переиспользование, и плата за это — высокая сложность разработки и требовательность к ресурсам целевой платформы.

По моему адекватная оценка.

После прочтения этого “плача Ярославны” у меня два вопроса:

  • хоспади, зачем это было написано?

  • хоспади, зачем я это все читал?

Человек увидел в реальном мире говнокод (еще и не самый страшный, скажем прямо) и побежал вайбкодить статью о том, что он нашел говнокод. И все.

Ладно бы показал, как этот говнокод привести в приличный вид и выиграть по всем параметрам. Так ведь нет. Просто поплакал о том, что говнокод есть, а ИИ не в состоянии пока сделать из говна конфетку.

Что до претензий к архитектуре, принятой в openBMC, то вот у авторов были свои идеи. Они их воплотили в жизнь. Видимо, им нужно было. Если у вас есть свои идеи, как вам кажется более правильные, то сделайте по-своему, выложите в OpenSource. Уверен, очень быстро найдутся другие вайб-кодеры, которые найдут в ваших архитектурных решениях фатальный недостаток, а то и не один.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации