== Packaging systems should support overlays One of the very common things that sysadmins do when dealing with more than one system is that we develop a common set of files that we slap on every system (or in large environments, on subsets of our systems). Sometimes this is done by hand, sometimes this is done with hand-built tools, and sometimes this is done with things like Cfengine or Puppet. If you accept that [[packaging systems should be comprehensive ComprehensivePackaging]], then packaging systems should also support this common need. Specifically, packaging systems should have the idea of 'overlays', packages that replace files from other packages; this would allow sysadmins to build one or more overlay packages that contained the various collections of their necessary customizations and localizations. (Ideally overlays would be slightly more general, allowing you to at least remove files as well.) There are several advantages of doing this through the packaging system. The first is that all of the package manager querying and verification tools will now work on your files as well; you can see that a particular file comes from this version of your localizations and has not been changed from what it should be, you can see what all of your localizations on this system are, and so on. (As far as I know, Puppet and Cfengine do not support this sort of state querying.) The next is that upgrading system packages can now be much more aware of your local customizations; the package manager does not have to guess what to do when upgrading things you've changed (or just ignore your changes). It becomes trivial to maintain your local overlays across base package upgrades and to block these upgrades if your local overlays aren't ready for them. Equally, you can use the power of the package manager when changing your local overlays, doing them as overlay package upgrades. Thus you can require base package upgrades, add and change dependencies, detect conflicts, and so on. (The implication of this is that the package manager can also show you the differences between the overlay-supplied version of a file and the base version, since the package manager needs to keep the base version around to restore it in case you remove your overlay or the next version of the overlay package does not overlay this particular file any more.)