On Mon, 2013-02-11 at 18:11 -0800, Linda Walsh wrote:
linux people don't seem to get run-time dynamic linking that much. Unix people did it -- and windows does it "delayed loading libraries"...but linux -- not so much...and it's a shame. those systems that use such are generally more flexible and resilient to problems in the field -- because they know enough not to expect things, but are written to check for things being there -- and if not, then not using them.
Hmm. I would suggest that the Linux understanding of run time dynamic linking is rather the opposite of what you think. When I make a library on Linux (GNU tools), I can leave things undefined. All functions do not need to be resolved when the library is made. They will be resolved (hopefully) when the process using the library loads the library. At that time, any remaining dynamic linking is done. This is in strict opposition to my experience on, say, Windows (GNU and MS tools act the same), where libraries need to have all symbols resolved before the library will be made. The Windows process loader will not resolve things dynamically. The DLL, AND the location in the DLL (a bane to all Windows developers) must be determined when libraries and apps are made. There is no run time dynamic linking when the process loads. Of course, you can do your own dynamic linking after the app loads, but the process loader will not do this to get the app started. This is one reason why Windows apps load faster. They are not dynamic at this stage in their life. The Linux method in fact allows run time dynamic linking to have great flexibility in how the symbols get resolved, while the Windows method allows no such flexibility. This also means that Linux has a greater chance of a mistake when library versions do not match. In your case, the problem is surely as stated: Perl is doing a crap job of maintaining application binary compatibility - which is a non-optional required property if the libraries expect to provide backward compatibility. The different versions of their libraries are not backwards compatible (read as 'new versions do not provide old features'). This lack of ABI compatibility in the Perl libraries results in the app developer being forced to require that certain versions of the library are used. The fact that earlier version of openSUSE software worked was perhaps luck. It depends on what Perl choose to change. The extent of non ABI compatibility is their decision. I think that openSUSE should instead be encouraged to find these ABI compatibility violations (which are seldom documented by the developer and thus lots of work to discover) and take the corrective actions to make openSUSE better. I am sure that they would be happier if Perl had some sort of ABI compatible method. But if Perl don't, then they must take the next best action. Complaints should surely be directed to the cause of the problem (Perl) and not the victim (openSUSE). Yours sincerely, Roger Oberholtzer Ramböll RST / Systems Office: Int +46 10-615 60 20 Mobile: Int +46 70-815 1696 roger.oberholtzer@ramboll.se ________________________________________ Ramböll Sverige AB Krukmakargatan 21 P.O. Box 17009 SE-104 62 Stockholm, Sweden www.rambollrst.se -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse+owner@opensuse.org