linux

This magazine is from a federated server and may be incomplete. Browse more on the original instance.

nous, in What is the point of dbus?

Sockets are just streams of bytes - no defined structure to them at all. Dbus is about defining a common interface that everything can talk. That means when writing a program you don’t need to learn how every program you want to talk to talks over its own socket - just can just use a dbus library and query what is available on the system.

At least that is the idea - IMO its implementation has a lot to be desired but a central event bus IMO is a good idea. Just needs to be easy to integrate with which I think is what dbus fails at.

A great example is music player software - rather than every music player software creating its own socket and each having its own API to basically all do the same operations. So anything that want to just play/pause some music would need to understand all the differences between all the various different music applications. Instead with a central event bus system each music app could integrate with that and each application that wants to talk to a music app would just need to talk to the event bus and not need to understand every single music app out there.

platypus_plumba,

But isn’t this the reason why client libraries to talk to programs behind sockets exist? Kinda like an SDK library behind an HTTP protocol API?

WarmApplePieShrek,

The Linux kernel is already a central event bus of sockets, btw

renzev, (edited )

Wouldn’t this also be possible with plain sockets tho? To continue with your example of music players, the current standard is MPRIS, which uses dbus. But in an alternate universe, the people behind MPRIS could just have decided that music players shall create sockets at /run/user/1000/mpris/[player name] that all speak the same standardized protocol. If a player wanted to add functionality beyond MPRIS, it could accept nonstandard requests on its socket, or create a new socket altogether for extended control.

I just don’t see how this would require any more coordination between developers than the current solution. And I don’t see how dbus can save you from having to “understanding every single […] app out there”. If anything, it adds the overhead of learning how dbus itself works, on top of how a specific app’s dbus interface works.

AProfessional,

Many toolkits make dbus usage simple. It’s also introspectable so very easy to explore or generate bindings for dynamically.

It’s pretty nice to use IME.

WarmApplePieShrek,

this is the real answer - programming language bindings

atzanteol,

Wouldn’t this also be possible with plain sockets tho?

You keep using this phrase. Given time and money anything is possible. Technically we don’t need to use http - every server could implement their own standard using raw sockets. You then could download a simple client library for every site!

With a well defined dbus interface your application can talk to any number of applications that implement that interface. Even those you didn’t know about it at time of development. It provides a structure for ipc other than “go fetch libblah” and also “libblarg” and “libfloob” and read all of their docs and implement each one separately.

nous, (edited )

Anything is possible with sockets… and that is a meaningless statement. It is like saying you can build anything with bricks. Technically true, but missing all the important details of how.

In an alternative universe we could have done so many things differently to solve the same problems. But we don’t live there and in our universe dbus was the attempt to solve that problem among others. And yes you can create a standardization for music players easily enough - but what about notifications, and everything else? DBus tries to be a generic interface anything can talk over at a logical level - rather that just being the basic way two process can physically send bytes between each other.

grue, in What is the point of dbus?
Atemu,
@Atemu@lemmy.ml avatar

/thread

WarmApplePieShrek,

But it’s not. Why is it better to have a different degree distribution?

AVincentInSpace, (edited )

…and why is that…better?

Programs still have to be written to accommodate the specific protocol that the program on the other end speaks, and dbus paths could translate pretty directly to subdirectories of /run. All adding dbus in the middle does is add a daemon where there doesn’t need to be one and force the programs to talk to each other through that rather than directly to each other

chitak166,

No, you see, additional layers of abstraction are always a good thing. Haven’t you been paying attention to the latest software memes? /s

cbarrick, in What is the point of dbus?

With pipes/sockets, each program has to coordinate the establishment of the connection with the other program. This is especially problematic if you want to have modular daemons, e.g. to support drop-in replacements with alternative implementations, or if you have multiple programs that you need to communicate with (each with a potentially different protocol).

To solve this problem, you want to standardize the connection establishment and message delivery, which is what dbus does.

With dbus, you just write your message to the bus. Dbus will handle delivering the message to the right program. It can even start the receiving daemon if it is not yet running.

It’s a bit similar to the role of an intermediate representation in compilers.

renzev,

modular daemons

A message bus won’t magically remove the need for developers to sit down together and agree on how some API would work. And not having a message bus also doesn’t magically prevent you from allowing for alternative implementations. Pipewire is an alternative implementation of pulseaudio, and neither of those rely on dbus (pulse can optionally use dbus, but not for its core features). When using dbus, developers have to agree on which path the service owns and which methods it exposes. When using unix sockets, they have to agree where the socket lives and what data format it uses. It’s all the same.

It can even start the receiving daemon if it is not yet running.

We have a tool for that, it’s called an init system. Init systems offer a large degree of control over daemons (centralized logging? making sure things are started in the correct order? letting the user disable and enable different daemons?). Dbus’ autostart mechanism is a poor substitute. Want to run daemons per-user instead of as root? Many init systems let you do that too (I know systemd and runit do).

cbarrick,

Let’s say you want to write a GUI for connecting to networks.

In the backend, you have NetworkManager, systemd-networkd, ConnMann, netctl, dhcpcd, …

Dbus could be a good way to expose a common API surface for clients.

Ramin_HAL9001, (edited )

It can even start the receiving daemon if it is not yet running.

We have a tool for that, it’s called an init system.

The init system is for trusted system services that can talk directly to hardware. Unless you are working on a single-user system with no security concerns of any kind, you might consider using init to launch persistent user land or GUI processes.

DBus is for establishing a standard publish/subscribe communication protocol between user applications, and in particular, GUI applications. And because it is standard, app developers using different GUI frameworks (Gtk, Qt, WxWidgets, FLTK, SDL2) can all publish/subscribe to each other using a common protocol.

It would be certainly be possible to establish a standard place in the /tmp directory and a standard naming scheme for sockets and temporary files so that applications can obtain a view of other running applications and request to receive message from other applications using ordinary filesystem APIs, but DBus does this without needing the /tmp directory. A few simple C APIs replace the need for naming and creating your temporary files and sockets.

AVincentInSpace, (edited )

…systemd very much does use the init system to launch userland and GUI processes. That’s how GNOME works.

Dbus is for interprocess communication. The fact that its primary use case is communication between desktop applications is hardly relevant to its design. I don’t see how GUI frameworks are at all relevant, or how it would be possible to create an interprocess communication mechanism that only worked with one GUI framework without some heroic levels of abstraction violation (which I would not put past Qt, but that’s another story).

I don’t see why having an entire dbus daemon running in the background is better than having a cluttered /tmp or /run directory.

aport,

“Bro just use sockets lol” completely misses the point. When you decide you want message based IPC, you need to then design and implement:

  • Message formatting
  • Service addressing
  • Data marshalling
  • Subscriptions and publishing
  • Method calling, marshalling of arguments and responses
  • Broadcast and 1:1 messaging

And before you know it you’ve reimplemented dbus, but your solution is undocumented, full of bugs, has no library, no introspection, no debugging tools, can only be used from one language, and in general is most likely pure and complete garbage.

hglman,

Well said. There are so many details to making code work that can so often be avoided by using the right tooling. OP said it was harder to get started, which implies they did not handle the details and have code not actually robust to all kinds of edge cases. Maybe they don’t need it but they probably do.

AVincentInSpace, (edited )

Message formatting

still have to do that with dbus

Service addressing

They’re Unix sockets, dude, they’re file paths in /run

Data marshalling

Still have to do that with dbus, also that’s the same thing as message formatting

Pubsub

Again, sockets. One application binds and many can connect (how often do you really need more than one application to respond to a method call? That’s a valid reason to use dbus in lieu of sockets, but how often do you need it?)

Method calling, marshalling of arguments and responses

They’re called “unix doors”, and that’s the third time you’ve said marshalling. As for that, language agnostic data marshalling is kind of a solved problem. I’m personally a fan of msgpack but JSON works too if you want to maximize compatibility. Or XML if you really want to piss off the people who interact with your API.

Broadcast and 1:1 messaging

Sockets and doors can only do 1:1, and that’s true enough, but it occurs to me that 99% of use cases don’t need that and thus don’t need dbus. dbus can still be used for those cases, but less load on dbus daemon = less load on system. Also you said that already with pubsub.

As for that blob at the bottom, again, who said anything about there not being a language agnostic library? It’d be a lot of work to make one, sure, but that doesn’t mean it’s impossible. Besides, most of the work has been done for you in the form of language agnostic marshalling libraries which as you said are like 50% of the problem. The rest is just syscalls and minor protocol standardization (how to reference FDs passed through the door in the msgpack data etc.)

And what I’ve just described isn’t a reimplementation of dbus without any of the good parts, it’s a reimplementation of dbus on top of the kernel instead of on top of a daemon that doesn’t need to be there.

WarmApplePieShrek,

You still have to do this with dbus

Tiuku,

This reminds me of QT’s signal/slot system. I.e. instead of calling functions directly, you just emit a signal and then any number of functions may have the receiving slot enabled.

Lot’s of similar systems in other frameworks too I’m sure.

AVincentInSpace,

It occurs to me that sendmsg() is already kind of a standard, and the problem of drop in replacements could be solved by just making the replacement bind to the same file path and emulate the same protocol, and the problem of automatically starting the daemon could be handled by a systemd socket (or even inetd if you wanna go old school). The only advantage that I can see dbus really having over Unix sockets is allowing multiple programs to respond to the same message, which is a definite advantage but AFAIK not many things take advantage of that.

mcepl, (edited ) in What is the point of dbus?
@mcepl@lemmy.world avatar

Yes, of course, the sockets are the answer to everything (and BTW, d-bus uses sockets as well, e.g. /run/dbus/system_bus_socket on my current system), but the problem is no standard for the communication over these sockets (or where is the socket located). For example, X11 developed one system of communicating over their socket, but it was used just by few X11 programs, and everybody else had their other system of communication. And even if an app found some socket, there was absolutely no standard how exactly should programs communicate over it. How to send more than just plain ASCII strings? Each program had to write their own serialization/deserialization code, their own format for marshalling binary data, etc. Now there is just one standard for those protocols, and even libraries with the standard (and well tested) code for it.

WarmApplePieShrek,

There’s still no standard on how to use dbus so I don’t get your point

DarkGamer, (edited ) in Linux Boomers
@DarkGamer@kbin.social avatar

I really hate this usage of the term, Boomer. Words mean things!

mogoh,

It’s so stupid. Everything is boomer now.

upt, in Is anyone using awk?

No, but I heavily use perl still… I feel like you can’t really call yourself a Linux person without knowing perl and python both. Knowing awk can’t hurt though.

sping,

Really? I disliked Perl for 3 decades on unix and Linux and I’ve never felt like I have been held back by not knowing or using it. I don’t remember the last time I saw a Perl script, let alone needed to understand one.

eestileib, in Is anyone using awk?

Perl kinda killed awk and sed.

Then python kinda killed perl.

AnUnusualRelic,
@AnUnusualRelic@lemmy.world avatar

I used awk until perl, then there was no going back.

bizdelnick, (edited ) in Is anyone using awk?

Yes, but for a very specific case. I used to write highly portable scripts that could be executed in different environments (various linux distros, including minimal containers, freebsd and even solaris 10). I couldn’t use bash, perl, python and even gawk. Only POSIX shell (I always tested my scripts with dash and ksh93, for solaris 10 compatibility - with its jsh), portable awk (tested with original-awk, gawk and mawk) and portable sed (better forget it if you need to support solaris).

Before that I didn’t understand why should I need awk if I know perl. And awk really sucks. Once I had to replace a perl one-liner with an awk script of ~30 lines for portability.

P.S. I never use awk just for print $1 as many do. It’s an overkill.

bionicjoey,

P.S. I never use awk just for print $1 as many do. It’s an overkill.

cut is better for this use-case IMO. Awk is good for when cut won’t cut it.

WeLoveCastingSpellz, in Linux Boomers

Your dissapointment about your own existence bleeds into the article, just shut the fuck up at this point :/

JaneTheMotherfucker,

Where does that come from? I’m awesome.

kittykittycatboys, in Linux Boomers
@kittykittycatboys@lemmy.blahaj.zone avatar

hey u sound a bit angy, is everything allgoods?

JaneTheMotherfucker,

Yes, I’m just the best.

Guenther_Amanita, in Spending a few days with Hyprland made me realize how awesome Gnome is

Try Forge. It’s a Gnome extension that provides you a tiling window mode, just like the one from the Pop shell. You will love it!

wfh, (edited )

Haha I’ve already been using Forge for weeks :D

I like the concept of it, but it lacks Hyprland’s smoothness.

Guenther_Amanita,

Yep, I see it the same.

I didn’t use Hyprland, or any other TWM, yet, due to the same reasons as you.
I just want something preconfigured that “just works”. Hyprland seems to be very very smooth, but barebones.
I’m not that much into ricing and don’t want to spend many weekends DIYing my desktop.

I wish Forge would implement some animations, then it would be perfect.

There is a Hyprland-Silverblue-image called Hyprgreen that provides that sort of, maybe you could test that? It is a rather small project and still on F38, but should still work fine.

shartworx, in I've started building a TUI for Lemmy

Have you looked at Textual? It probably has more functionality than blessed.

bloopernova,
@bloopernova@programming.dev avatar

+1 for Textual. It’s great stuff!

crunchpaste,
@crunchpaste@lemmy.dbzer0.com avatar

I did, but i was going for something really small and simple, more like an ebook reader than a webui.

krash,

Textual is great, and the community at discord is very helpful and welcoming.

independantiste, (edited ) in Does Wayland really break everything? (Nate Graham's OG post ref'd in the Phoronix article)
@independantiste@sh.itjust.works avatar

Quite literally, the only problem or “stuff broken because or Wayland” is some old ass apps or lazy companies that won’t update their electron version. Looking at you discord, screen sharing COULD WORK if you managed your stuff

Grass,

They make enough money off nitro and shit to not care. Everything becomes worse when they start making money

oversea,

KDE gui scaling problems too?

independantiste,
@independantiste@sh.itjust.works avatar

Idk I use gnome on 200% scaling on my laptop and on desktop gnome at 100%

leopold,

Kinda. The problem was fixed in Qt6 and current KDE is Qt5. It’ll be fixed once Plasma 6 releases in February.

oversea,

Great news. Thank you for the headsup

chitak166, (edited ) in Experience with KDE on Fedora?

I’d recommend Mint or Manjaro for family computers.

Probably Mint, just because Pamac still has issues.

Fedora is a bad choice because you’re stuck in the dnf ecosystem with no real benefit.

I’m a firm believer that the only value in Fedora is for Red Hat. Their shills are the ones who promote it over more practical options.

fschaupp,
@fschaupp@lemmy.ml avatar

In case you really want/need some more modern drivers/software,… Nobara is also recommendable stable.

LiveLM, in Gentoo goes Binary (packages)

Hm? Didn’t they already offer binary packages for a while now?

ace,
@ace@lemmy.ananace.dev avatar

The official binhost project has been an experimental thing until now, I’ve personally been using it for the year on multiple machines, but it’s not been something that you can just enable. And it’s definitely not been something that’s come pre-prepared in the stage 3.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • linux@lemmy.ml
  • localhost
  • All magazines
  • Loading…
    Loading the web debug toolbar…
    Attempt #