Distribution package dependency radii, or why distros may be doomed
By joe
- 4 minutes read - 828 wordsI am a sucker for a good editor. I like atom. Don’t yell at me. Its pretty good for my use cases. It has lots of nice extensions I can and have used. Atom is not without its dependencies though. Installing it, which should be relatively simple, turns out to be … well … interesting.
[root@centos7build nyble]# rpm -ivh ~/atom.x86_64.rpm
error: Failed dependencies:
libXss.so.1()(64bit) is needed by atom-1.26.0-0.1.x86_64
In searching the interwebs for what Xss is, I happened across this little tidbit
While you might think, hey great, he found something that worked, let me briefly describe this machine to you, so we can decide if it is really “great”. This is a HVM, running KVM, with no display. It is a build machine I set up for building my NyBLE stack. Its running locally on one of my 10 year old boxen. I wanted to put atom on there, as it is on my gigabit lan, and I don’t mind remote X here at home. The editor performs nicely from my laptop. That is, in order to use a text editor, I had to install a screensaver on a headless VM. Ok, this isn’t quite the worst of it. While I was researching what the minimal installation of CentOS I could get away with and have something fully functional for my purposes, I started looking into the package groupings. Take the “Minimal Install” grouping, which I would assume, would install the bare minimum I need to get an operational system.
[root@centos7build ~]# yum group info "Minimal Install"
...
Environment Group: Minimal Install
Environment-Id: minimal
Description: Basic functionality.
Mandatory Groups:
+core
Optional Groups:
+debugging
Ok, it is build upon the core group. Lets look at that.
[root@centos7build ~]# yum group info "core"
Loaded plugins: fastestmirror
...
Group: Core
Group-Id: core
Description: Smallest possible installation.
Mandatory Packages:
audit
basesystem
bash
+btrfs-progs
coreutils
cronie
curl
dhclient
e2fsprogs
filesystem
+firewalld
glibc
hostname
initscripts
iproute
iprutils
iptables
iputils
irqbalance
kbd
kexec-tools
less
man-db
ncurses
openssh-clients
openssh-server
parted
passwd
plymouth
policycoreutils
procps-ng
rootfiles
rpm
rsyslog
selinux-policy-targeted
setup
shadow-utils
sudo
systemd
tar
+tuned
util-linux
vim-minimal
xfsprogs
yum
Default Packages:
+NetworkManager
+NetworkManager-team
+NetworkManager-tui
+NetworkManager-wifi
+aic94xx-firmware
+alsa-firmware
biosdevname
dracut-config-rescue
+ivtv-firmware
+iwl100-firmware
+iwl1000-firmware
+iwl105-firmware
+iwl135-firmware
+iwl2000-firmware
+iwl2030-firmware
+iwl3160-firmware
+iwl3945-firmware
+iwl4965-firmware
+iwl5000-firmware
+iwl5150-firmware
+iwl6000-firmware
+iwl6000g2a-firmware
+iwl6000g2b-firmware
+iwl6050-firmware
+iwl7260-firmware
+iwl7265-firmware
kernel-tools
libsysfs
linux-firmware
microcode_ctl
+postfix
Optional Packages:
dracut-config-generic
dracut-fips
dracut-fips-aesni
dracut-network
initial-setup
openssh-keycat
rdma-core
selinux-policy-mls
tboot
Look at all that nice firmware I don’t need/want. As part of core. Which is part of “Minimal Install”. And NetworkManager. And postfix. The problem is, when you install other packages, they will pull often large additional swaths of dependencies in to provide a library or a function which isn’t really used or needed. Like the libXss with atom. What I want, as a user, is to be able to build/install a minimal sized effectively appliance OS. I don’t want/need massive dependency radii. In fact, such a thing is an anti-pattern. It is the opposite of what I need. Assume I am building minimal sized installations as appliances I can deploy quickly and easily. Do I really need LaTeX in, because of an obscure tertiary or worse dependency graph? No. And, to make matters worse, if you try to excise the unneeded packages, you invariably risk the integrity of the package set you are attempting to install. As that dependency graph is unforgiving. If I were a conspiracy theorist (I am not), I might follow a flight of fancy over distro lockin with extended dependency radii. I am, or like to think of myself as, pragmatic, which means I try not to let things like this get in the way of doing what I need to get done. And please understand, these dependency radii are inhibitors, barriers to be overcome in many cases. They aren’t helpful. I don’t see distros adding much value beyond bug databases and some packaging/tooling. When the latter gets in the way of the former, I’ll do what I can to contain the damage. I know some people are as wedded to their distros as others are to OSes. Distros, OSes, etc. are details of an instance. Not the purpose of the instance. They are tools to be used, changed when they don’t work for something that does work. No one tool is perfect, no one distro, OS, kernel, toolchain is beyond question. This is one of the reasons I question the longevity of distros that attempt to enforce their world view on wide package radii. There is a long tail of users for everything, and the ardent defenders of a particular way of thinking will defend it to the last developer. Even as the world moves on and leaves them behind. Lets encourage the distro people to rethink what it is they deliver. So minimal is really minimal. There is far more value in that, than in trying to tie everything through package management and package dependency graphs that thwart peoples attempts to reduce footprint and increase efficiency.