Packages should not contain both tools and policies

July 21, 2009

If you install the Ubuntu mdadm package on a machine with no software RAID arrays, it will 'helpfully' email you every day to report:

checkarray: W: no active MD arrays found.
checkarray: W: (maybe uninstall the mdadm package?)

(The message comes from the /usr/share/mdadm/checkarray shell script.)

This is a terrible idea, for reasons beyond that it's not an error. (It might be an error if the script bothered to check to see if there were configured arrays that weren't active, but it doesn't.)

The larger issue is that it means that Ubuntu is forcibly joining together tools (the mdadm program and its manpage) with administrative policy (complaining if there are no active arrays). This is a serious mistake, because it forces your administrative policy down the throats of people who just want the tools. Administrative policies are not 'one size fits all'; they do not come anywhere near close to working for everyone. The more you forcibly join your administrative policies to the tools in your packaging system, the more you force people who want the tools but not your policy to step outside the packaging system, which is a terrible idea for all sorts of reasons.

(Also, you don't know all of the reasons that people have to install tools to start with. To feed my particular pet peeve, in a multi-machine environment there are any number of reasons to have 'inapplicable' packages installed on machines, starting with that it's nice to not have to worry about logging in to a specific machine just in order to read a manpage.)

The right way is to take one of two approaches: either put the tools in one package and your policies in a second one, or remove policy from your packages and just ship things that quietly work right. (Yes, you may miss some obscure corner cases, but people with obscure corner cases always have to do some work themselves.)

Written on 21 July 2009.
« Minimalistic spam, another annoyance to worry about
A peculiar change in Linux flock() and fcntl() behavior »

Page tools: View Source.
Search:
Login: Password:

Last modified: Tue Jul 21 01:30:17 2009
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.