Linux allows an application to either be "very specific" as to what library-version it wants, or very general. Let's say for the sake of example that you have versions 5.1, 5.7, and 4.9 of libcurses on your system, all at the same time. First of all, Linux is capable of handling that, "with grace and style." If an application simply asks for "libcurses," one of those symlinks will define what it will get. If it wants "libcurses 5" or "libcurses 4," ditto. And so on. The very-simple mechanism of symlinks provides the flexibility, and the loader cache (ldconfig) provides the speed.