Shared libraries use version numbers to allow for upgrades to the libraries used by applications while preserving compatibility for older applications. This article reviews what’s really going on under the book jacket and why there are so many symbolic links in /usr/lib on a normal Linux system.
Thanks for the link. (pun intended?
Though, I think the article would’ve been more clear if the author had differentiated more explicitly between the linker that gets used when you’re building your app (the so-called “link editor”) and the linker that gets used when you run your program and the system runs it to go hunting around for libs that your program requires (which he refers to correctly as the “dynamic linker” (ld-linux.so)).
The word “linker” is overloaded in GNU/Linux/Unix a most unfortunate way. Almost as bad as how the word “server” gets used for the server program as well as the server-class computer it runs on.