That's because of differences between the ELF and PE binary formats. For instance, each Windows dll is in its own namespace, while ELF dlls share a single namespace; so we need to do linker tricks to simulate the PE behavior.
Did anyone consider writing a different elf interpreter (normally ld.elf_so) so that a different method of handling the namespaces could be used?
I certainly found that (on netbsd) part of the reason for the slow start of programs like mozilla was the continual searching for symbols in all of the shared libraries that make up the program body (because they are searched for EVERY symbol).
David