How about this:<br><br>We leave the linking policy as it is now (the linker links against sonames, each soname points to a real name) BUT there a table in the system that maps real names to recursively-real names. This table is updated each time you compile, recompile or relink something. When you want to update a library, the system takes the real name of the proposed new minor version, it looks up the corresponding R-R name (generated during compilation of the new minor vesion library) and then checks in the compatibility database that the new R-R name has been tested with all the applications currently installed in your system. If not, you may ask which applications might break, and then decide what to do. If you compile and run and get no problems, that's more info for the online database. It wouln't be as slow as it sounds, since most of the times this information would be cached by the database ("are all currently installed apps tested-compatible with this R-R name? yes/no").
<br><br><div><span class="gmail_quote">On 12/2/06, <b class="gmail_sendername">Martin Baldan</b> <<a href="mailto:firstname.lastname@example.org">email@example.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<span class="q"><br><br><div><span class="gmail_quote">On 12/2/06, <b class="gmail_sendername">Michael Homer</b> <<a href="mailto:firstname.lastname@example.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
email@example.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>There may also be problems if a dependent library of Foo is linked<br>against a different version of Bar than Foo is. That means library<br>compatibility couldn't be updated until every dependent (and<br>co-reliant) program was verified as well.
<br></blockquote></div><br></span>I think I've just seen this point of yours, and the answer is that, when a library itself depends on other libraries, its real name is not enough for compatibility purposes. You also need to know what it has been linked against in your system. This information should be stored locally and uploaded to the database as well. So, if a library's real name is
libfoo.so.3.1 , then we could say that its "recursively real name" is something like libfoo.so.3.1-linkedagainst-libbar.so.4.2- -linkedagainst-libwatever.so.5.3. Knowing the recursively real names of every library an application has been tested with should be safe.