All Projects → illiliti → libudev-zero

illiliti / libudev-zero

Licence: ISC license
Daemonless replacement for libudev

Programming Languages

c
50402 projects - #5 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to libudev-zero

jj
An evolution of the suckless ii(1) file-based IRC client
Stars: ✭ 80 (-49.04%)
Mutual labels:  suckless, unix-philosophy
xpub
POSIX Shell script to get user's display environment variables of any TTY from anywhere.
Stars: ✭ 36 (-77.07%)
Mutual labels:  udev
sfm
simple file manager
Stars: ✭ 163 (+3.82%)
Mutual labels:  suckless
lux
POSIX Shell script to easily control brightness on backlight-controllers.
Stars: ✭ 49 (-68.79%)
Mutual labels:  udev
st
Repatch repository of developed 'Vim Browse' and 'Alpha Focus Highlight' patches for simple terminal (st).
Stars: ✭ 25 (-84.08%)
Mutual labels:  suckless
batify
Only one udevrule file triggering plug and critical battery level notifications (multi-x sessions support)
Stars: ✭ 47 (-70.06%)
Mutual labels:  udev
dotfiles
My configuration files for Linux and macOS
Stars: ✭ 20 (-87.26%)
Mutual labels:  suckless
Nnn
n³ The unorthodox terminal file manager
Stars: ✭ 13,138 (+8268.15%)
Mutual labels:  suckless
android-tether
Autostart Android USB tethering with udev + systemd + adb
Stars: ✭ 30 (-80.89%)
Mutual labels:  udev
ssu
Extremely simple su utility
Stars: ✭ 56 (-64.33%)
Mutual labels:  suckless
chadwm
Making dwm as beautiful as possible!
Stars: ✭ 619 (+294.27%)
Mutual labels:  suckless
mpris-ctl
Basic mpris player control for linux command line
Stars: ✭ 31 (-80.25%)
Mutual labels:  suckless
usbmon
List and monitor USB devices connected to Linux host. Also as Collectd plugin.
Stars: ✭ 28 (-82.17%)
Mutual labels:  udev
smu
Simple MarkUp - markdown/commonmark like syntax
Stars: ✭ 21 (-86.62%)
Mutual labels:  suckless
sent
a simple plaintext presentation tool
Stars: ✭ 22 (-85.99%)
Mutual labels:  suckless
suckless-101
Guide on how to patch, compile and install suckless software.
Stars: ✭ 33 (-78.98%)
Mutual labels:  suckless
hmg
💝 My personal Gentoo/Linux configuration backup files
Stars: ✭ 16 (-89.81%)
Mutual labels:  udev
CleanDmenu
🚀 Floating and enhanced dmenu build
Stars: ✭ 25 (-84.08%)
Mutual labels:  suckless
dwm-vanitygaps
My dwm vanitygaps build (incl. individual patches)
Stars: ✭ 26 (-83.44%)
Mutual labels:  suckless
i3-workscreen
In i3wm compatible manner - dynamically re-configures your (multi)-monitor setup on the fly when you hotplug/unplug display cabel(s)
Stars: ✭ 29 (-81.53%)
Mutual labels:  udev

libudev-zero

Drop-in replacement for libudev intended to work with any device manager

Why?

We all know that systemd is very hostile towards portability. udev inherited the same problem by exposing a very badly designed library interface. This dramatically reduces portability, user choice and basically creates vendor lock-in because the library interface highly tied to the udev daemon.

Another udev problem is the non-portable home-grown language called "udev rules". The udev authors definitely don't know(or care) why it's better to avoid reinventing the wheel. Strictly speaking, I think they did that on purpose to overcomplicate udev as much as possible. Why? So that only the authors(RedHat/IBM) can rule and dictate the future of udev. The recent eudev death only proves that it's really hard to support such unmaintainable mess.

The udev hwdb is yet another illustration of a systemd-like approach. What the hell does "userspace /dev" have to do with parsing hardware database(pci.ids, usb.ids) and setting/remapping buttons? udev smells like systemd by trying to implement all possible functionality in the single daemon/code base. Programs that follow the UNIX philosophy is much better suited for such purposes.

Pros/Cons

Keep in mind that libudev-zero isn't ideal. Here are some pros/cons:

Pros

  • Very portable. Doesn't depend on GNU features.
  • No lock-in. Any device manager can be used, even smdev and CONFIG_UEVENT_HELPER.
  • Source code is much cleaner than udev because of less abstractions and clever code.

Cons

  • Udev rules must be converted to shell script in order to work with any device manager.
  • Udev hwdb interface isn't implemented. pciutils and usbutils will not display any meaningful info.
  • Many functions and interfaces still aren't implemented, which may lead to breakage in some programs.

What doesn't work

  • dosfstools - requires udev_enumerate_add_match_parent()
  • PulseAudio - highly depends on udev internal properties. workaround
  • udisks2 - highly depends on udev internal properties
  • android-tools - requires udev rules for non-root usage
  • NetworkManager - needs investigation
  • libgudev - needs investigation
  • PipeWire - depends on udev internal properties. patch
  • ldm - depends on udev internal properties
  • lvm2 - uses deprecated udev_queue API
  • cups - needs investigation
  • ???

Dependencies

  • C99 compiler (build time)
  • POSIX make (build time)
  • POSIX & XSI libc
  • Linux >= 2.6.39

Installation

make
make PREFIX=/usr install

Hotplugging

Note that hotplugging support is fully optional. You can skip this step if you don't have a need for the hotplugging capability.

If you're using an mdev-like device manager, refer to mdev.conf for a config example.

If you're using another device manager, you need to configure it to rebroadcast kernel uevents. You can do this by either patching(see below) the device manager or simply executing helper.c for each uevent.

If you're developing your own device manager, you need to rebroadcast kernel uevents to the 0x4 netlink group of NETLINK_KOBJECT_UEVENT. This is required because libudev-zero can't simply listen to kernel uevents due to potential race conditions. Refer to (but don't copy blindly) helper.c for an example of how it could be implemented in C.

Don't hesitate to ask me about anything you don't understand. I'm usually hanging around in #kisslinux at libera.chat, but you can also email me or open an issue here.

Future directions

  1. Write a better cross-platform(*nix, maybe macos and windows) device enumeration library.
  2. Convince mainstream apps(libinput, wlroots, ...) to use a new library instead of libudev.
  3. Declare libudev as obsolete library and archive this project.

Donate

You can send a donation to BTC: 1BwrcsgtWZeLVvNeEQSg4A28a3yrGN3FpK

Thank you very much!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].