Принцип тот же, только, обычно, зависимые библиотеки не таскаются вместе с программой, а устанавливаются как зависимости в общие каталоги (/usr/lib и т.п.).
Создается пакет для используемого в конкретном дистрибутиве пакетного менеджера, по правилам этого пакетного менеджера. В пакете описываются зависимости и при установке вашего софта, зависимости так же будут установлены, если, конечно, они существуют как пакеты в репозиториях дистрибутива.
Для своего софта можно сделать и поддерживать собственный репозиторий, который можно добавить в пакетный менеджер, или добиться включения в родной репозиторий дистрибутива, или распространять пакет каким-то другим образом (его можно поставить в ручном режиме с помощью того же пакетного менеджера, указав файл пакета).
Так же возможно распространять ПО в исходниках и пусть каждый желающий сам собирает, в readme описать все зависимости и как их установить в наиболее популярные дистрибутивы. Кстати в исходниках вместе со сборкой софта, вполне возможно сразу собирать пакет для используемого пакетного менеджера. В установке с помощью пакетного менеджера есть преимущества перед установкой с помощью make && make install