From 1be510f9529cb082f802408b472a77d074b394c0 Mon Sep 17 00:00:00 2001 From: Nicolas Vigier Date: Sun, 14 Apr 2013 13:46:12 +0000 Subject: Add zarb MLs html archives --- zarb-ml/mageia-dev/2012-December/020439.html | 147 +++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 zarb-ml/mageia-dev/2012-December/020439.html (limited to 'zarb-ml/mageia-dev/2012-December/020439.html') diff --git a/zarb-ml/mageia-dev/2012-December/020439.html b/zarb-ml/mageia-dev/2012-December/020439.html new file mode 100644 index 000000000..3611940d6 --- /dev/null +++ b/zarb-ml/mageia-dev/2012-December/020439.html @@ -0,0 +1,147 @@ + + + + [Mageia-dev] Utter frustration + + + + + + + + + +

[Mageia-dev] Utter frustration

+ Frank Griffin + ftg at roadrunner.com +
+ Sat Dec 1 03:04:53 CET 2012 +

+
+ +
Op vrijdag 30 november 2012 12:59:25 schreef Anne Wilson:
+>> On 30/11/12 12:26, Frank Griffin wrote:
+>>> On 11/30/2012 07:13 AM, Anne Wilson wrote:
+>>>> Before doing all that, can you explain the significance of the
+>>>> suffixes here?
+>>>>
+>>>> ls /usr/lib/ | grep powerdevil
+>>>> libpowerdevilconfigcommonprivate.so.4@
+>>>> libpowerdevilconfigcommonprivate.so.4.10.0*
+>>>> libpowerdevilcore.so.0@ libpowerdevilcore.so.0.1.0*
+>>>> libpowerdevilui.so.4@ libpowerdevilui.so.4.10.0*
+>>> Library naming conventions use several, actual version, e. g.
+>>> 4.10.0, major version, e. g. 4, and a generic name, e. g.
+>>> libxxx.so.  The last two are usually symlinked to the first.
+>>>
+>>> The major version usually signals an ABI difference or some other
+>>> major difference, e. g. new function, from the previous version.
+>>> The actual version changes whenever any change is made.  Developers
+>>> use the major version if their code is dependent on that major
+>>> version, but just use the generic name if any version will do.
+>>>
+>>> In this way, the majority of packages using the library just ask
+>>> for libxxx.so, and don't have to be rebuilt or have their makefiles
+>>> or spec modified when the library changes.  A few packages, which
+>>> are dependent on a specific version, ask for libxxx.so.N (or
+>>> higher), and these have to be changed when the major version they
+>>> require is released.  A very very few packages are dependent on the
+>>> actual version, and these may have to change more often.
+>> I assume the starred ones are actually in use - what's the
+>> significance of '@'?  I'm not sure I've really understood this.
+>>
+OK, say libXXX provides functions funcA, funcB, and funcC.  The library 
+developer releases version 1.0.0, and the package installs 
+libXXX.so.1.0.0 and symlinks libXXX.so.1.0, libXXX.so.1.0, and libXXX.so 
+to this.
+
+Now, the library developer fixes some minor bugs.  They don't involve 
+any changes to the binary interface (ABI), e. g. they don't change the 
+datatypes of any of the parameters to the three functions, and they 
+don't change the number of parameters to any of them.  So any 
+application that used version 1.0.0 should work with the new version.  
+The developer calls this version 1.0.1, and when the libXXX package 
+installs, it adds libXXX.so.1.0.1, and changes the libXXX.so.1 and 
+libXXX.so symlinks to point to that. Applications which used 1.0.0 by 
+asking for libXXX.so or libXXX.so.1 don't see any difference.  If an 
+application specifically asked for libXXX.so.1.0, it gets the older 
+version (provided you didn't unistall it).  Same goes for an application 
+that specifically asks for libXXX.1.0.0.
+
+Now, suppose the library developer adds funcD to the library, and 
+doesn't change the ABI (Application Binary Interface) of A/B/C.  He 
+calls the new package 1.1.0, and when it installs, it installs 
+libXXX.so.1.1.0, adds a libXXX.so.1.1 symlink to it, and changes the 
+linXXX.so symlink accordingly.  Applications that used 1.0.0 or 1.0.1 
+could only use funcA/B/C, and will work exactly as they always did with 
+the new version.  But a new application that uses funcD won't work with 
+the older versions, so its package has to say that it requires 1.1.0 or 
+later.
+
+Now the library developer finds a serious day-zero bug in funcA. Maybe 
+one of the parameters was originally an int when it should have been a 
+time_t, and the library doesn't work with newer system libraries because 
+time_t has changed from an int to an int64.  This means that the ABI 
+changes.  Applications compiled to use the older libraries won't work 
+with the newer versions.  Applications written to use the newer version 
+won't work with the older versions.
+
+So the library developer bumps the major version and releases 2.0.0, 
+along with an advisory that any applications with dependencies on the 
+ABI changes from 1.x.x. -> 2.0.0 must either be modified to use the 
+newer ABI (in which case they can continue to use libXXX.so and 
+requiring >=libXXX.so.2) or must have their spec file modified to 
+require =libXXX.so.1 or <=libXXX.so.1.1.
+
+Any app that just asks for libXXX.so has to be modified to use the new 
+funcA ABI whether it uses funcD or not.  Any app that uses libXXX.so and 
+uses funcD and the original ABI for funcA has to be changed to use 
+libXXX.so.1.1 and require <=1.1 or else be changed to use the the new ABI.
+
+As time goes on, either the source code or the makefiles/specfiles for 
+old apps have to be changed in one way or the other.  But the intent is 
+that as many old apps as possible can use libXXX.so until circumstances 
+make that impossible.  At that point. the makefile/specfile has to 
+change in a minor way, if you're willing to have multiple versions of 
+libXXX installed.  Or, if the app is under active development, the 
+developer can choose to update the source to conform to the newer ABI 
+and update the makefile/specfile to require at least the version that 
+supports that ABI.
+
+ + + + + + +
+

+ +
+More information about the Mageia-dev +mailing list
+ -- cgit v1.2.1