Archive:PackagingDrafts/DirectoryOwnershipImprovement

Current Text from Packaging/Guidelines for the FileAndDirectoryOwnership subsection
Your package should own all of the files that are installed as part of the %install process. Packages must not own files already owned by other packages. The rule of thumb here is that the first package to be installed should own the files that other packages may rely upon. This means, for example, that no package in Fedora should ever share ownership with any of the files owned by the filesystem or man package. If you feel that you have a good reason to own a file or that another package owns, then please present that at package review time.

In general, your package should own all of the directories that it creates but the situation is more complex than in the case of files because many packages put files into the same directories. The rule of thumb is that your package should own all of the directories it creates except those owned by packages which your package depends on. However, there are exceptions to this. If the directory hierarchy your package is located in may change due to updates of packages you depend on, then you need to take care to own those pieces of the hierarchy.

One common example of this is a Perl module. Assume perl-A-B depends on perl-A and installs files into /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/A/B. The base Perl package guarantees that it will own /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi for as long as it remains compatible with version 5.8.8, but a future upgrade of the perl-A package may install into (and thus own) /usr/lib/perl5/vendor_perl/5.9.0/i386-linux-thread-multi/A. So the perl-A-B package needs to own /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/A as well as /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/A/B in order to maintain proper ownership.

Draft Addition to above text
Another exception for directory ownership in packages is when there is no clear dependency hierarchy.

An example:

Foo-Animal-Emu puts files into /usr/share/Foo/Animal/Emu Foo-Animal-Llama puts files into /usr/share/Foo/Animal/Llama

Neither package depends on the other one. Neither package depends on any other package which owns the /usr/share/Foo/Animal/ directory. In this case, each package must own the /usr/share/Foo/Animal/ directory.