Каждое приложение должно иметь свою виртуальную структуру каталогов, в которой оно хочет иметь присутствие.
Для примера:
/Program1
|-bin
|-lib
|-doc
|-etcВсё это отображается на реальную файловую систему, например в такую:
/usr/local
|-bin
|-lib
|-doc
|-etc
При этом облегчается задача деинсталлятора — он просто удаляет виртуальную структуру каталогов приложения и всё!
Что касается разделяемых библиотек, то необходимо придумать механизм "обобществления" виртуальных подкаталогов /lib установленных приложений, подсчёт ссылок на нужные библиотеки, в том числе на зацикленных графах и т.д. При удалении приложений с разделяемыми библиотеками вопросы нужности/ненужности библиотек должны решаться.
Версионность библиотек должна быть совмещена с их именем в метаданных виртуальной системы каталогов, так как виртуальные каталоги подходят для хранения различных версий библиотек, файлы которых имеют одно и то же имя.