{"id":19061978,"url":"https://github.com/illiliti/libudev-zero","last_synced_at":"2026-02-23T04:33:55.934Z","repository":{"id":42040764,"uuid":"277056641","full_name":"illiliti/libudev-zero","owner":"illiliti","description":"Daemonless replacement for libudev","archived":false,"fork":false,"pushed_at":"2024-08-10T12:22:12.000Z","size":152,"stargazers_count":245,"open_issues_count":15,"forks_count":30,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-12-11T10:52:07.336Z","etag":null,"topics":["embedded","libudev","linux","no-systemd","suckless","udev","unix-philosophy"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/illiliti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-07-04T06:55:43.000Z","updated_at":"2025-11-28T16:47:03.000Z","dependencies_parsed_at":"2025-10-21T13:02:58.784Z","dependency_job_id":"37f6108e-1dca-4f66-9988-6f6ee716254a","html_url":"https://github.com/illiliti/libudev-zero","commit_stats":{"total_commits":214,"total_committers":10,"mean_commits":21.4,"dds":0.07476635514018692,"last_synced_commit":"04a727df50fde3f69127aed4bc48e6cff5430175"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/illiliti/libudev-zero","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/illiliti%2Flibudev-zero","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/illiliti%2Flibudev-zero/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/illiliti%2Flibudev-zero/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/illiliti%2Flibudev-zero/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/illiliti","download_url":"https://codeload.github.com/illiliti/libudev-zero/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/illiliti%2Flibudev-zero/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29738079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T02:24:00.660Z","status":"ssl_error","status_checked_at":"2026-02-23T02:22:56.087Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["embedded","libudev","linux","no-systemd","suckless","udev","unix-philosophy"],"created_at":"2024-11-09T00:23:59.269Z","updated_at":"2026-02-23T04:33:55.906Z","avatar_url":"https://github.com/illiliti.png","language":"C","readme":"# libudev-zero\n\nDrop-in replacement for `libudev` intended to work with any device manager\n\n## Why?\n\nWe all know that systemd is very hostile towards portability. udev inherited\nthe same problem by exposing a very badly designed library interface. This\ndramatically reduces portability, user choice and basically creates vendor\nlock-in because the library interface highly tied to the udev daemon.\n\nAnother udev problem is the non-portable home-grown language called \"udev\nrules\".  The udev authors definitely don't know(or care) why it's better to\navoid reinventing the wheel. Strictly speaking, I think they did that on\npurpose to overcomplicate udev as much as possible. Why? So that only the\nauthors(RedHat/IBM) can rule and dictate the future of udev. The recent eudev\ndeath only proves that it's really hard to support such unmaintainable mess.\n\nThe udev hwdb is yet another illustration of a systemd-like approach. What the\nhell does \"userspace /dev\" have to do with parsing hardware database(pci.ids,\nusb.ids) and setting/remapping buttons? udev smells like systemd by trying to\nimplement all possible functionality in the single daemon/code base. Programs\nthat follow the UNIX philosophy is much better suited for such purposes.\n\n## Pros/Cons\n\nKeep in mind that libudev-zero isn't ideal. Here are some pros/cons:\n\n### Pros\n\n* Very portable. Doesn't depend on GNU features.\n* No lock-in. Any device manager can be used, even smdev and CONFIG_UEVENT_HELPER.\n* Source code is much cleaner than udev because of less abstractions and clever code.\n\n### Cons\n\n* Udev rules must be converted to shell script in order to work with any device manager.\n* Udev hwdb interface isn't implemented. pciutils and usbutils will not display any meaningful info.\n* Many functions and interfaces still aren't implemented, which may lead to breakage in some programs.\n\n## What doesn't work\n\n* dosfstools - requires udev_enumerate_add_match_parent()\n* PulseAudio - highly depends on udev internal properties. [workaround](https://gist.github.com/capezotte/03ee5548218e819b06459819bb120b4b#pulseaudio)\n* udisks2 - highly depends on udev internal properties\n* android-tools - requires udev rules for non-root usage\n* NetworkManager - needs investigation\n* libgudev - needs investigation\n* PipeWire - depends on udev internal properties. [patch](https://github.com/illiliti/libudev-zero/issues/26#issuecomment-1848802791)\n* ldm - depends on udev internal properties\n* lvm2 - uses deprecated `udev_queue` API\n* cups - needs investigation\n* ???\n\n## Dependencies\n\n* C99 compiler (build time)\n* POSIX make (build time)\n* POSIX \u0026 XSI libc\n* Linux \u003e= 2.6.39\n\n## Installation\n\n```sh\nmake\nmake PREFIX=/usr install\n```\n\n## Hotplugging\n\nNote that hotplugging support is fully optional. You can skip\nthis step if you don't have a need for the hotplugging capability.\n\nIf you're using an mdev-like device manager, refer to [mdev.conf](contrib/mdev.conf)\nfor a config example.\n\nIf you're using another device manager, you need to configure it to rebroadcast\nkernel uevents. You can do this by either patching(see below) the device manager\nor simply executing [helper.c](contrib/helper.c) for each uevent.\n\nIf you're developing your own device manager, you need to rebroadcast kernel\nuevents to the `0x4` netlink group of `NETLINK_KOBJECT_UEVENT`. This is required\nbecause libudev-zero can't simply listen to kernel uevents due to potential\nrace conditions. Refer to (but don't copy blindly) [helper.c](contrib/helper.c)\nfor an example of how it could be implemented in C.\n\nDon't hesitate to ask me about anything you don't understand. I'm usually hanging\naround in #kisslinux at libera.chat, but you can also email me or open an issue here.\n\n## Future directions\n\n1. Write a better cross-platform(*nix, maybe macos and windows) device enumeration library.\n2. Convince mainstream apps(libinput, wlroots, ...) to use a new library instead of libudev.\n3. Declare libudev as obsolete library and archive this project.\n\n## Donate\n\nYou can send a donation to `BTC: 1BwrcsgtWZeLVvNeEQSg4A28a3yrGN3FpK`\n\nThank you very much!\n","funding_links":[],"categories":["systemd-udev"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filliliti%2Flibudev-zero","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filliliti%2Flibudev-zero","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filliliti%2Flibudev-zero/lists"}