Hi guys, I wrote a short script that calls "apt-file find 'bin/'", filters results to include only stuff from /bin:/sbin:/usr/bin:/usr/sbin, and looks for basename clashes. Turns out, in Stretch, there are 97 hits. (If you also include /usr/games, 126.)
(Of couse, I'm counting all packages, regardless of whether they specify "Conflicts:" or not, and regardless of whether the full name is shared, or just the basename.) For example, packages "389-ds-base" and "dmucs", both provie a command called "monitor". The former's command is located in /usr/sbin, the latter's in /usr/bin. Neither package conflicts with the other. I think this has at least two implications: 1. Which exact executable gets called using a given command, depends entirely on $PATH, which, let's face it, is sometimes a mess (as scripts, .profile's, .bashrc's, third-party installers, automagic pasta, etc like to redefine and manipulate it). Some of these commands are obviously compatible (or at least are well-known, and have a lowest common denominator) and work fine as drop-in replacements, like newaliases or mailq. Some however, have different behavior (like rm from coreutils vs from safe-rm), or are actually completely unrelated (like ztest from zfsutils-linux and from zutils). Scripts that rely on the existence of a command, will usually just look for it in $PATH and assume it's the one they're expecting - I doubt many people care to parse "foo --version" for all 17 possible implementations of foo (including GNU Coreutils, all the BSDs, etc). I've seen this in the wild a lot, I'm guilty of this myself, and I honestly wouldn't expect "arcstat" to do two completely different things on a system with ZFS, and on a system with Nordugrid (and what happens when both are installed is entirely up to $PATH...). 2. (I know this is crazy, unsupported, violates FHS, kills kittens, and I'm actually Asking For Trouble by doing this, but whatever.) I can't safely symlink /sbin to /bin, and I can't do a /usr -> / either. Which kinda sucks, as some Other Distros have done it and are happily rolling with it. I know some programs will attempt weird things, or outright freak out if this happens (I know VirtualBox used to freak out when /usr was a symlink at all), but at least theoretically (or at least as long as no other filename clashes happen), this should be totally possible and kinda safe. So, is this a bug? Is this of concern? Am I making sense? Should I file bugs against packages that don't supply "Conflicts:"? Should we embark on a renaming crusade? Or just leave it be? In any case, if anyone is interested in further research, this is the script and results for Stretch: https://gist.github.com/rollcat/382ce16287daa03aec632aabacacd55e Please CC me in replies, I'm not a subscriber. Cheers! Kamil