The Linux Standard Base project is an effort to create a binary compatibility between different Linux distributions. But why would this be necessary? The implication is that the source code for the package works on any distribution, but when compiled, it would no longer work on any except that for which it is compiled. I thought the Linux kernel was monolithic and did not change from distribution to distribution. Why would the binary hooks to the kernel be any different on one distribution than they are on another?


After doing some more research on this question, I found that there are basically two reasons why a binary sometimes will not work on a different distribution (with the same hardware) and both involve shared libraries. Since the other similar questions have rather obtuse accepted answers that do not make this clear, I am posting a simplified answer here.

(1) The first issue is that shared libraries may be located in a different places on different distributions. This should not matter because applications should always look for libraries on the LD_LIBRARY_PATH. However, apparently some badly written applications do not use LD_LIBRARY_PATH, but instead use a hardcoded path to a library, resulting a distribution-level incompatibility.

(2) The second issue is that shared libraries can vary from distribution to distribution. Usually it is only relatively obscure or advanced functions that are different, but if the application uses an API call that for some reason is in the .so of one distribution, but not present in that of another, then there will be an incompatibility. It's sort of analogous to "DLL hell" on a PC.

Not the answer you're looking for? Browse other questions tagged or ask your own question.