Hi everybody,
i’m a long time Debian user and, while i’ve always loved the Linux experience, the bluetooth side of things was always a little bit… painful.
Lately, i’ve been digging on how bluetooth on Linux works (i knew about BlueZ, but i didn’t know about HCI sockets, standard protocols for bluetooth controllers, …). Seeing how Android manages to work fine with bluetooth (yes, i know, money and company support, blah blah blah), i was thinking about re-writing the bluetooth daemon, in order to be modern, modular, safe (written in Rust), stable and retro-compatible (exposes the same D-Bus APIs as BlueZ) I already found some documents about HCI socket in Linux, HCI communication with bluetooth controllers, HID standards for Bluetooth, etc…
My questions are:
- is this a good idea?
- does somebody want to collaborate?
Thanks for reading.
EDIT: The repository is https://github.com/djtech-dev/reblued but at the moment is pretty much empty, just the project’s skeleton, license, README and disussions for collaborators.
i was thinking about re-writing the bluetooth daemon, in order to…
The NIH is strong with this one.
IMO you’d be better off putting that enthusiasm into fixing BlueZ - you might actually be able to fix some real issues and improve things for a great number of users relatively quickly.
Writing a new, competing, piece of software is going to take a while to achieve both feature parity and see any adoption by major distros.
retro-compatible (exposes the same D-Bus APIs as BlueZ)
Is there any reason for this? I can’t think of anything off the top of my head that would require it. It’s an admirable goal but make sure it’s worthwhile doing this and that there aren’t actual benefits that could be achieved by breaking compatibility.
you’d be better off fixing the existing project
by breaking its API compatibility
wut
You have conflated two statements.
- You’re better off not fragmenting the ecosystem
- If they decide to go ahead with the rewrite, consider whether or not maintaining API compatibility with BlueZ is actually required / desirable.
It’ll be a tough rewrite, but a lot of the hard work will have been done for you. Android’s Gabeldorsche Bluetooth stack is a Rust rewrite of the old system, so your Rust rewrite can probably borrow a lot from there. I’m not sure how much Gabeldorsche and Bluez overlap in terms of API exposure, but it could be a start!
Be sure to read up on past Bluetooth vulnerabilities, though. A lot of old Bluetooth specs are bad and implementing them like described in the standard can lead to some nasty security risks.
The biggest problem you’ll probably run into rewriting the entire Bluetooth stack is firmware, and there’s no way around that problem at the moment. You’ll have to please the firmware gods and their assumptions to interact with hardware properly, and that can include some kernel level DMA that you’ll need to somehow wrap inside Rust’s security mechanism.
Thanks for your reply; i won’t work with firmware-level aspects of the stack, as my plan is to write the userspace daemon, while keeping the kernel-levels modules identical and to communicate to them via HCI sockets, as they are implemented by Linux and with them I can talk directly to the bluetooth controllers.
I’ll check out Android’s project and double-check for security vulnerabilities in older version of the protocols tho, so thank you again for replying.
double-check for security vulnerabilities
triple-check is better.
I’m not smart enough to collaborate but if you recall popular projects such as pipewire started this way
To me it’s hard to say if BlueZ actually has some technical debt and is hard to fix, or is it just lacking some maintenance. Are bluetooth issues actually due to BlueZ, or is it more about finky drivers? My Bluetooth experience on Linux systems is mostly good, but it might vary a tiny bit depending on the hardware.
I’d say, if you see some architectural benefits then try and go for it. To really make sense it should do BlueZ’s job better than BlueZ. Being drop-in replacement is good for desktops integration, but maybe the API could be improved providing some benefits to how desktop integrations work (like provide more status info or prevent some situations from blocking), but again I know nothing about BlueZ internals so just guessing
I think it can be good attempt to reimplement it and make it work stable and normal.My hesdphones sometimes randomly dropping connection and need to restart bluez to make them connect again.Also have to say about audio profiles for bluetooth headphones. While A2DP can deliver can good high quality sound but cannot work in duplex mode and can noy record ur headphones microphone and it would be nice if u share link for ur git :)
The repository is https://github.com/djtech-dev/reblued but at the moment is pretty much empty, just the project’s skeleton, license, README and disussions for collaborators.
To me that seems like a good idea, alternatives are always great. Sadly I can’t help as my computer doesn’t have Bluetooth and I don’t know rust.
I wish you the best wishes. I am unfortunately not yet at a stage where i can help :(. out of curiosity what is wrong with how it currently works on Linux, I don’t really have issues with it.