It is good article, but I wish it discussed the differences in dynamic symbol resolution, which is often a source of subtle compatibility issues when porting between POSIX OSes.<p>Linux uses a flat namespace for linking, where each bind lists the symbol name, and then at runtime ld.so searches for that symbol based on the library search order.<p>macOS uses a two level namespace for linking, where each bind lists both the symbol name and the installname of the library that provides the symbol. This means at runtime the dynamic linker does not need use a library search path. This has a number of performance and binary compatibility benefits, though it can make building software a bit more complex.<p>Solaris uses a flat namespace, but retrofitted two levelnamespace semantics via Direct Binding[1][2]. I am not sure how pervasively they are used.<p>I know there were some efforts to port Solaris Direct Binding support to Linux maybe 15 years ago[3][4], but it is a very hard change to make without breaking bin and source compatibility for projects that depend on insert libraries in the search path for partial refinements via interposing symbols.<p>1: <a href="https://en.wikipedia.org/wiki/Direct_binding" rel="nofollow">https://en.wikipedia.org/wiki/Direct_binding</a>
2: <a href="http://www.linker-aliens.org/blogs/ali/entry/the_cost_of_elf_symbol/" rel="nofollow">http://www.linker-aliens.org/blogs/ali/entry/the_cost_of_elf...</a>
3: <a href="https://lwn.net/Articles/192624/" rel="nofollow">https://lwn.net/Articles/192624/</a>
4: <a href="https://bugs.gentoo.org/114008" rel="nofollow">https://bugs.gentoo.org/114008</a>