LINUX.ORG.RU
ФорумTalks

Почему многие хейтят D-Bus?

 


1

3

Приветствую. Объясните пожалуйста бестолковому - почему так много людей ненавидят D-Bus, и люто плюются когда он является жёсткой зависимостью? Постоянно натыкаюсь на сообщения, что наличие D-Bus как зависимости это чуть ли не смертный грех. Чем он так плох?

  1. Отвратительный дизайн. XML во все поля.
  2. Паршивая производительность эталонной реализации. Раньше было ещё хуже, даже kdbus пытались под этим соусом продвинуть в ведро. Потом выяснилось, что можно в юзерспейсе гораздо лучшую производительность вытянуть, но это ж оптимизировать код надо.
  3. Очень многие тулзы выкинули нормальный API в библиотеках и воткнули dbus, забыв про документацию. Особенно BlueZ этим страдал. До сих пор флэшбеки бывают, когда я начал в документации видеть «запустите dbus-send …» и лапша параметров на 5 строк.
  4. Некоторые (кхе кхе Red Hat кхе кхе) используют dbus для обхода GPL. Т.е. библиотека под GPL оборачивается в dbus-обёртку и все вызовы идут через неё. Вроде как GPL не нарушен, т.к. линковки нет, но осадочек остаётся.
hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 2)

почему так много людей ненавидят D-Bus

Школьники, сэр.

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

Паршивая производительность эталонной реализации

Читал что dbus-broker эту проблему решил. Это так?

Sunderland93 ★★★★★
() автор топика

Потому что это какая-то непонятная муть, костыльная и ненужная.

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

Читал что dbus-broker эту проблему решил. Это так?

Честно говоря, понятия не имею. Тема с kdbus перестала быть такой срачегонной и я перестал следить за этим. У меня ванильный dbus на стандартном десктопе с KDE в основном в районе 1% CPU (прозреваю, что из-за пульсы и BT), поэтому мне по большей части плевать. Winamp жрёт больше :D

К слову, если мне не изменяет память, kdbus во многом продвигался редхатом из-за контрактов с Ford или кем-то ещё из автоиндустрии. Там хотели использовать dbus для сбора инфы с сенсоров в автомобильных компьютерах, но 10k сообщений в секунду ванильный dbus никак вообще не пережёвывал и дох. Что в принципе не очень удивительно для десктопной шины.

А так, общая плохая слава dbus вытекает во многом из-за того, что его внедряли как и всё остальное в мире лялекса: выкинув на помойку то, что dbus должен был заменить, до того как сам dbus был готов. Плюс это было параллельно с впердоливанием и сразу же последовавшим выпердоливанием HAL. Вот это реально редкостная срань была. Сам погугли если не помнишь/не знаешь.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 3)

Потеря контроля над системой - Хрен проссы как оно там работает. Протокол бинарный типа для скорости, но при том d-bus достаточно медленный т.к. код кривой, а он кривой из-за достаточно сложной (для опенсорса) спеки и дефолтной реализации . В общем на десктопе без подобных шин, наверно, никуда, но как-то хотелось бы что-нить по проще, по прозрачнее, по unixway-нутей.

А когда на этом делают какой-нить polkit (policykit), который с конфигами на js и сильно разделённый по версиям (в debian одно у других совсем другое), то становится немного жутко. d-bus как будто тут не причём, но хочется и в него запустить чего-нить тяжелое типа за компанию.

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

А когда на этом делают какой-нить polkit (policykit), который с конфигами на js

На опеннете ещё писали на днях, что он работает на движке ФФ, какой-то его упрощённой версии.

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

На опеннете ещё писали на днях, что он работает на движке ФФ, какой-то его упрощённой версии.

Там вполне ванильный Spidermonkey. Есть вариант ноды на нём, например. Просто браузер в комплекте не идёт.

А так да, PolicyKit – позор лютейший, который крутится с правами рута в системе.

К слову, PolicyKit и polkit – разные вещи. Polkit – замена PolicyKit, привязанная к systemd.

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

Потому что вместо того, чтобы сделать то, что отлично ложится на FS через FS, в dbus зачем-то навертели какого-то совсем не юниксвейного мутанта из виндовых registry и COM. Со всеми вытекающими костылями и массой кода которая требуется от клиентов чтобы реализовать минимальный интерфейс.

Интересно, можно сделать straightforward муляж dbus из виртуальной FS через FUSE и библиотечки c юзерспейсным демоном?

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)

Глючный. Вечно течёт.

fornlr ★★★★★
()
  • ООООчень тяжелый и медленный
  • требует много телодвижений на его интеграцию в свой код
  • примитивная сериализация с ним не сработает, надо городить огромное количество кода, враперов, класов, методов…
  • вот ето вот все - потом надо сопровождать
  • требует дополнительного софта на целевой платформе
  • является 3rd part component и фиг его знает как оно там работает

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

Jetty ★★★★★
()
Последнее исправление: Jetty (всего исправлений: 1)

Чем он так плох?

Мне в своё время HAL нанес психологическую травму и теперь при виде xml и d-busа всплывают эти травмирующие воспоминания в памяти. А так, только xml в нём вызывает отторжение. Не видел, чтобы на него часто жаловались.

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

В общем на десктопе без подобных шин, наверно, никуда,

Глупости. Какую проблему оно вообще решает? Только без пустой болтовни общими словами.

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

polkit и PolicyKit — это одно и то же (проект был переименован), и ни один из них не привязан к systemd. Это так, для справки.

intelfx ★★★★★
()

вроде бы шина для десктопа нужна, но... бывает разная фигня...

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

* какой-нибудь Fedora Gnome Desktop просто падает, если остановить dbus...

* какой-нибудь чисто серверный-консольный софт в сборке от RH тянет dbus в серверную инстанс, хотя казалось бы при огромном числе vm, это уже заметные расходы...

* какой-нибудь gnome-system-monitor чего-то там глюканет, подвиснет и выдаст кучу сообщений в этот dbus... и этот dbus грузит минут 10 ядро (к счастью одно!), разгребая все это...

а так, конечно, уже стандарт...

crypt ★★★★★
()

Лично у меня вызывает неудовольствие, когда бывает обязательная зависимость от Dbus. Потому что я могу использовать DE без DBus, и за ненадобностью отключить последнюю. Причём системе норм, всё работает, X-Server, GTK, Fontconfig, Freetype2, печать, сканирование, сеть. И вдруг находится одна прога на всю систему, которая без DBus не работает вообще. И как уже сказали выше, предыдущая версия этой же проги - работает.

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

> Winamp жрёт больше :D

Это что за винамп такой? Третий что ли? Версия 2.8x или 2.9x даже на первом Пентиуме работает прекрасно, и это странно, когда он отжирает 12% от современного процессора.

> Polkit – замена PolicyKit, привязанная к systemd.

Ну, не знаю, в до-systemd-шном линуксе, таком как Ubuntu 8.10, он вроде был. Или это был PolicyKit?

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

> Интересно, можно сделать straightforward муляж dbus из виртуальной FS через FUSE и библиотечки c юзерспейсным демоном?

Типа как apulse. А что, было бы забавно ) Работает у тебя такой GNOME, а DBus нет, вместо него - stub-библиотека, только чтобы слинковаться и всё )

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

К слову, PolicyKit и polkit – разные вещи. Polkit – замена PolicyKit, привязанная к systemd

Блэт. Как всё сложно

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

казалось бы, почему бы не продумать случай, если dbus в системе нет

А почему бы разработчикам Firefox не продумать случай, если в системе нет графического тулкита? Или почему бы разработчикам Linux не продумать случай, если в системе нет MMU?

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

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

А почему бы разработчикам Firefox не продумать случай, если в системе нет графического тулкита? Или почему бы разработчикам Linux не продумать случай, если в системе нет MMU?

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

Глупый вопрос.

это не вопрос глупый... но за самокритичность хвалю.

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

Абстракции и фреймворки существуют для того, чтобы ими пользоваться

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

в итоге у нас аконади для KDE (без которой не запускается их почтовик), какая-то похожая приблуда для Gnome для индексации, которая любит грузить систему... три варианта настройки тем для GTK... как там, твой новый GTK уже умеет выглядеть единым образом с QT/KDE?

и вот выходит вся эта лажа из абстракций от редхат, которые все должны использовать. причем каждый раз, когда у редхата зачешется выпустить новую абстракцию (avahi/polkit/hal/pulseaudio...) ... создавать дизайн на века - это ведь не наше. мы будем фигачить по новой абстракции в год. а ты должен ее использовать. не уж, спасибо. я срулил, а вы там тестируйте без меня.

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

https://wiki.debian.org/PolicyKit

While PolicyKit has been replaced by polkit (which rewrote system component, breaking backwards compatibility) in many distributions

Сорри, я вот тут другое прочитал. Но если доебановцы врут, то и пофиг. Один чёрт JS-машину под рутом пускать – это рак.

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

Это что за винамп такой? Третий что ли? Версия 2.8x или 2.9x даже на первом Пентиуме работает прекрасно, и это странно, когда он отжирает 12% от современного процессора.

Последний самый, 5.8 Beta. Я прозреваю, что это в Wine где-то косяк.

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

А почему бы разработчикам Firefox не продумать случай, если в системе нет графического тулкита?

Про «нет тулкита» не скажу, но вот в DirectFB Firefox успешно работал :D

hateyoufeel ★★★★★
()
Ответ на: комментарий от papin-aziat

не суди всех по себе. я тебе просто ответил, что имхо немного смешно выглядят твои подколы с учетом разницы между нами.

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

По умолчанию на spidermonkey, но можно и другие движки использовать тот же duktape... Но это не в debian ... в нём всё по другому т.к. версия старая! Отсюда и желание чего-нить кинуть т.к. читаешь всякое, пробуешь, а оно не работает ...

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

какая-то похожая приблуда для Gnome для индексации

Я не встречал приложений, которые не работают без tracker, но запоминать recent files они не будут, да.

papin-aziat ★★★★★
()
Ответ на: комментарий от crypt

не суди всех по себе

Дык я ж тебя процитировал, не то.

с учетом разницы между нами

Бро, обрести полноту в себе и тогда осознаешь, что мы больше похожи, чем наоборот.

papin-aziat ★★★★★
()
Ответ на: комментарий от hateyoufeel

Они смешали два никак не относящихся друг к другу события (переименование проекта и смену формата записи правил в polkit 0.105).

Один чёрт JS-машину под рутом пускать – это рак.

А кто, собственно, сказал, что под рутом?

$ ps -ef | grep polkit
polkitd     2137       1  0 янв11 ?     00:00:00 /usr/lib/polkit-1/polkitd --no-debug
polkitd  2260676    4490  0 11:05 ?        00:00:00 /usr/lib/polkit-1/polkitd --no-debug
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

А кто, собственно, сказал, что под рутом?

Как оно тогда права на всё подряд раздаёт? Через suid-бинарник или привилегии? Один чёрт, это слишком сложная и уязвимая штука для такой казалось бы важной роли.

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

Один чёрт, это слишком сложная и уязвимая штука для такой казалось бы важной роли.

а правильно тебе казалось. Privilege escalation with polkit: How to get root on Linux with a seven-year-old bug. 2021.

It’s used by systemd, so any Linux distribution that uses systemd also uses polkit.

https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with...

crypt ★★★★★
()

Еще чуть-чуть и тема потянет на 4.3 :)

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

Один хрен через эту жопу можно словить local privilege escalation, как правильно @crypt заметил.

Даже ты вряд ли будешь спорить с тем, что критичные к безопасности компоненты системы должны быть как можно проще в плане реализации, чтобы быть менее подверженными ошибкам. Я не говорю про внедрение MISRA-C и подобных стандартов, но хоспидя, хотя бы движок JS из браузера туда не надо тащить.

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

Даже ты вряд ли будешь спорить с тем, что критичные к безопасности компоненты системы должны быть как можно проще в плане реализации

вот именно intelfx постоянно и спорил со мной на эту тему:)

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

Через всё что угодно при должном старании можно словить LPE, даже через sudo. Как раз новость недавно была. JS только тут совсем ни при чём.

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

Через всё что угодно при должном старании можно словить LPE, даже через sudo.

Слови мне пожалуйста LPE через hello world на C. Можешь под рутом запустить. Главное, старайся сильнее, сам же говоришь что можно.

JS только тут совсем ни при чём.

JS как язык – действительно не причём. Интерпретатор JS – очень причём. Почему, ты наверное спросишь? Потому что чем больше кода, тем больше потенциальных ошибок. Я не знаю, как можно с этим спорить.

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

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

Интерпретатор JS – очень причём. ... Тьюринг-полный язык.

12.01.2022, Уязвимость в eBPF, позволяющей запускать обработчики внутри ядра Linux в специальной виртуальной машине с JIT... позволяющая выполнить код на уровне ядра Linux

я сегодня за какого-то echo бота, сорри...

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

Через всё что угодно

Слови мне пожалуйста LPE через hello world

я думаю, он хотел сказать, что это их ... ну не то чтобы цель... но данность в той парадигме программирования, которую выбрал поттеринг... т.е. intelfx как systemd админ готов с этим сталкиваться как угодно часто и в качестве ответа предпочитает использовать другие меры защиты уровнем выше... selinux, отказоустойчивые кластерные конфигурации с горячими резервами и т.д. Так сказать перекладывает проблему на уровень выше. В ущерб производительности и трудоемкости, конечно. Плюс «быстро поднятое упавшим не считается». Зато больше фишек из коробки. Эдакий Windows-way в мире OpenSource.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 4)
Ответ на: комментарий от tiinn

А qmmp вас чем не устраивает?

Не умеет в библиотеку, не поддерживает скины от Winamp 5.

@crypt

12.01.2022, Уязвимость в eBPF, позволяющей запускать обработчики внутри ядра Linux в специальной виртуальной машине с JIT… позволяющая выполнить код на уровне ядра Linux

eBPF – это вообще ад и холокост. Засунуть JIT в ведро – это блин я не знаю кем надо быть, особенно когда это всё можно было нормально в юзерспейсе делать с минимальными привилегиями.

@sudopacman

Хорошая аватарка.

Спасибо!

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

вот я тебе к тому же. ты пугаешься jit-машины в инсталяторе, а ее уже засунули в ядро:) поэтому когда я перехожу на FreeBSD, то один из аргументов - более консервативная и маленькая кодовая база.

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

В Haiku обмен сообщений работает безо всяких шин, серверов и брокеров. Просто отслылаешь сообщение на порт с заданным номером (есть такой системный вызов). Запрос к серверу нужен разве чтобы узнать номер порта у запущенного приложения.

Почтему в D-Bus так не смогли?

X512 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.