Дистрибутивы могут быть несовместимы по многим причинам. Да и само понятие "несовместимость" может означать разное. Включив модуль телепатии, можно догадаться, что вы имеете ввиду совместимость, когда пакет от одного дистрибутива не ставится в другой, или ставится, но после этого не работает.
Причины этого типа несовместимости могут быть следующие:
- Различаются сами форматы пакетов - например .deb и .rpm. Безусловно, можно поставить в RPM-систему .deb-пакет, но при этом от зависимостей пакета придется отказаться.
- Формат пакетов совпадает, но различаются имена зависимостей. Например, пакет требует для работы другой пакет с именем A, но в дистрибутиве, куда он ставится, этот же пакет называется B. Правила наименования пакетов и генерации зависимостей различаются между дистрибутивами.
- Даже если пакеты называются правильно, в дистрибутивах может различаться положение некоторых программ, например в одних дистрибутивах KDE в /opt, в других - в /usr, бывают и в /usr/local тоже. Поэтому программы из пакета могут не найти нужных шрифтов/иконок/скриптов/других программ/etc. Это также касается всяческих скриптов, выполняющихся до или после установки пакета.
- В разных дистрибутивах также может различаться система инициализации - SysVinit/upstart/initng/etc или другие способы интеграции в систему. Поэтому пакет, рассчитанный на один дистрибутив, не сможет правильно интегрироваться в другой.
- У C++ есть различия в ABI в зависимости от компилятора. Поэтому программа скомплированная с одной версией компилятора С++ может не работать с библиотекой, скомпилированной другой версией компилятора. Но это достаточно экзотический случай, возникающий при очень большом различии между версиями компиляторов.
- Апстримы многих библиотек не знают или не умеют вести контроль за ABI библиотек, и часто добавляют или удаляют функции из библиотек без смены SONAME. Это может привести к тому, что поставленная программа, которая использует новые символы, не сможет запуститься, так как библиотеки, установленные в системе, даже при совпадении SONAME могут не содержать этих новых символов.
Бывают еще другие причины, но эти, на мой взгляд, главные. Если вам интересно - почитайте чего-нить про Linux Standard Base (LSB). Гугль вам в помощь.