Multilib and Multiarch: Are these two term just synonym ? If no, how they differ ?
If I want to run 32-bit and 64-bit application in same system then shall I call it Multiarch or Multilib ?
They’re different approaches to the same general problem, with somewhat different scopes: running binaries built for different architectures.
When you’re given a binary to run, you need three things: the libraries it needs (if any, including its dynamic loader), support for the system calls it makes, and the ability to interpret the machine instructions it contains. Multilib and multiarch address the first.
Multilib works with a table of known variants, per architecture. This originally addressed ABI variants, e.g. on MIPS, but its most common use nowadays is 32-bit support on x86: it typically defines lib32 as the 32-bit library directory (and this definition is x86-specific). So a multilib setup might provide the 64-bit loader in /lib and the 32-bit one in /lib32. On the compiler side, you specify -m32 to build a 32-bit binary using multilib.
Multiarch is more general: its definitions don’t depend on the host architecture. All libraries are found in a lib subdirectory corresponding to their target architecture; /usr/lib/x86_64-linux-gnu/, /usr/lib/i386-linux-gnu, etc. On the compiler side, you use the appropriate cross-compiler.
Which approach you use to run a 32-bit binary depends on the distribution. Debian and its derivatives now use multiarch, other distributions use multilib.