There are several directory layout standards and conventions, some more sensible than others. For the highest stability, factors such as being able to install multiple versions of a package simultaneously, dependency tracking, repeatability and so on have to be considered. The following references describe some of these issues.

The OFA Standard – Oracle7 for Open Systems, by Cary V Millsap, Oracle Corporation. This paper is specifically about configuring Oracle systems, but the ideas are general enough to be applied to almost all systems, especially the concepts related to consistent mount point and directory naming.

File Hierarchy Standard. This standard describes the /usr/local and /opt directory hierarchies, among other things.

Why LD_LIBRARY_PATH is bad, by David Barr. This paper has a good description of the right and wrong uses of LD_LIBRARY_PATH and LD_RUN_PATH.

LD_LIBRARY_PATH Considered harmful

LD_LIBRARY_PATH is not the answer

/usr/local Considered Harmful [broken], by Tinaa Technologies This page enumerates some of the weaknesses of the typical /usr/local installation methods and describes a solution based on /opt.

Software Design for Installability, by Steve Simmons.

DJB Filesystem Layout], by D J Bernstein

Soft: A Software Environment Abstraction Mechanism, by Remy Evard and Robert Leslie. An excellent solution to the problem of managing PATH and MANPATH when many applications are installed on a host.

syncopt - A Flexible and Simple Approach to Package Install [broken], by Cameron Simpson.

Public software at cs.unm.edu [broken], by Jon Stearley. This page describes a system where /usr/local/bin contains symlinks to a very organized package installation tree.

The Encap Package Management System [broken]. Another system which creates symlinks in /usr/local/bin.

And another: Stow [broken]. Hmm. Symlink generating programs seem to be a popular solution. How do they manage name collisions and PATH priority prefrences? See “Soft” above for a better way.

Bruno Haible has developed a system for building relocatable packages. Install a package and be able to copy or move it anywhere else and it will still work!