Bug#827704: udev is not portable and mandates kernel features
Pierre Ynard
linkfanel at yahoo.fr
Sun Jun 19 23:23:13 BST 2016
Package: udev
Version: 230-2
Severity: wishlist
When trying to upgrade udev from version 175-7.2 to 230-2, I get greeted
by the:
> Since release 198, udev requires support for the following features in
> the running kernel:
>
> - inotify(2) (CONFIG_INOTIFY_USER)
> - signalfd(2) (CONFIG_SIGNALFD)
> - accept4(2)
> - open_by_handle_at(2) (CONFIG_FHANDLE)
> - timerfd_create(2) (CONFIG_TIMERFD)
> - epoll_create(2) (CONFIG_EPOLL)
Thank you for the preinst check and documenting in more details in the
README. However, some of these requirements seem unwarranted, backwards
and frankly outrageous. Decent software should make a minimum effort at
portability, and not direct the underlying system around.
- accept4() can be trivially emulated on ENOSYS. Any portable software
will do that trivial job. I don't believe that SOCK_CLOEXEC race
conditions would be a crippling issue for udev.
- epoll is just one out of many polling APIs. Any portable software will
fall back onto more common APIs like poll() or even select(), and wrap
around them or emulate missing features. Frankly, mandating epoll like
there's no way around it is simply appalling. epoll has main scaling
and performance purposes, but polling performance does not seem to be
any relevant for udev, really.
- timerfd_create() and signalfd() are just convenience APIs around the
more pervasive mechanisms of timers and signal handling. Equivalent
functionality can be emulated with a handler that writes into a pipe;
at any rate, they do not seem required to do the job.
I don't need to delve into the other items because the point is already
clear.
I can understand mandating stuff like CONFIG_DEVTMPFS, since it's
actually a major feature core to udev business, and would even be a
paradigm shift. I can understand mandating CONFIG_SYSFS_DEPRECATED=n
since that's within core udev business too. But most of the items above
have nothing particular to do with udev, and are just generic APIs.
Generic API availability gets properly managed, detected, emulated or
gracefully handled in portable software, not mandated; and the more
generic and trivial the API, the less understandable it is.
For the sake of openness, the feature missing on my system is
CONFIG_FHANDLE. It's not hidden under CONFIG_EXPERT like some others,
and the current Linux kernel Kconfig help only mentions "userspace
file servers", not a system component like udev, so I did not think
much of it. I can vaguely imagine how it would be useful (although not
necessary) to udev, and I don't really mind enabling it, but this is not
this point of the bug report - the principle is.
Please improve the portability of udev and reduce or eliminate the above
list of required non-essential features.
udev is a basic package that would be installed on most systems. On
mine, it still remains depended on by X.Org (for very understandable
reasons); it cannot be removed, nor substituted by any alternative. As
such, anything the udev package imposes has consequences that take away
user choice on a distribution-wide scale. Please provide and/or document
the ability to remove udev or substitute alternatives for it.
As a last resort, please make this apparent lack of portability more
understandable for users. The information in the README is a very good
start already, I appreciate it, but please complete it to document
what requires the features in the above list and foremost why they
are essential. Lack of portability, and mandating features in other
system components from such a basic and pervasive package, set a bad
example for software; please document, explain and present in a more
understandable way this approach and its outstanding, exceptional
and/or discouraged character. Please improve the most visible part of
it, the output of the preinst check, to make it sound less entitled
and outrageous to upgrading users, especially in view of some of the
required features in the list.
After taking care of this bug report I'm looking forward to being
able to upgrade udev, I hope I won't run into any more hurdle. The
changelog looks good, and I'm looking forward to being able to disable
CONFIG_UEVENT_HELPER :)
Thanks,
-- System Information:
Debian Release: stretch/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Kernel: Linux 4.4.6-grsec (SMP w/4 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: sysvinit (via /sbin/init)
Versions of packages udev depends on:
ii debconf [debconf-2.0] 1.5.59
ii libc6 2.22-11
ii libselinux1 2.5-3
ii libudev0 175-7.2
ii lsb-base 9.20160601
ii procps 2:3.3.11-3
ii util-linux 2.28-5
Versions of packages udev recommends:
ii pciutils 1:3.3.1-1.1
ii usbutils 1:007-4
udev suggests no packages.
-- debconf information:
udev/title/upgrade:
udev/reboot_needed:
udev/new_kernel_needed: false
udev/sysfs_deprecated_incompatibility:
More information about the Pkg-systemd-maintainers
mailing list