As time goes by the D runtime will have it's place on Unix systems next to the C runtime. The upcoming support for PIC is the next step. Now I just want to quickly raise awareness for "sonames". For any library, there may be several incompatible versions installed, since new features are added and old features a deprecated. This happens in Phobos as well, no doubt :). So the solution is to put the version in the library name as well, so they can coexist in the same directory (/usr/lib).

Here is an example for the two versions of libunique I have installed:
/usr/lib64/libunique-1.0.so (link to /usr/lib64/libunique-1.0.so.0.100.6) /usr/lib64/libunique-1.0.so.0 (link to /usr/lib64/libunique-1.0.so.0.100.6)
        /usr/lib64/libunique-1.0.so.0.100.6
/usr/lib64/libunique-3.0.so (link to /usr/lib64/libunique-3.0.so.0.0.2) /usr/lib64/libunique-3.0.so.0 (link to /usr/lib64/libunique-3.0.so.0.0.2)
        /usr/lib64/libunique-3.0.so.0.0.2
As you can see there is actually the full version down to the tiniest minor version appended to the file name and several layers of coarser versioning. An application can now link against libunique-1.0.so to get the old API and /usr/lib64/libunique-3.0.so to get the new API.

The same has to happen with druntime and Phobos2 or otherwise our programs will break with every new release that deprecates or changes non-template functions. That would probably be *every* release at the moment, so it could look like this:
/usr/lib64/libphobos2.so     (link to /usr/lib64/libphobos2.so.060)
/usr/lib64/libphobos2.so.058
/usr/lib64/libphobos2.so.059
/usr/lib64/libphobos2.so.060
/usr/lib64/libdruntime.so     (link to /usr/lib64/libdruntime.so.060)
/usr/lib64/libdruntime.so.058
/usr/lib64/libdruntime.so.059
/usr/lib64/libdruntime.so.060

There are two steps involved in getting this out of the door now:
1) I'm not an expert with these things, but from the looks of it, I think the Makefile should handle appending the version string 2) The runtime should be downloadable as a separate package (like the famous MSVC Runtime Redistributables)
Developers have three choices then:
- static linking
- packaging the so/dll with their application (always using the tested-works version) - use the system installation of druntime/Phobos2 (benefit from patches (as far as WinSxS doesn't intervene))

-- Marco

Reply via email to