.so's in devel packages...

Adam Williamson awilliam at redhat.com
Mon Jun 18 19:25:12 UTC 2012


On Mon, 2012-06-18 at 18:23 +0100, Nelson Marques wrote:
> Hi all,
> 
> 
> I have a doubt regarding the '.so's' in devel packages... From my
> understanding they go in devel packages to allow the installation of
> several packages with different versioning....

Not really, no. They go in -devel packages because the only time it's
actually appropriate to use a library by referring to its unversioned
name is when you're compiling another application against it. It's never
safe for anything to access a library at runtime via an unversioned name
because there is no guarantee of stability; you can't be at all sure
that the version of the library you're calling is actually capable of
doing what you're asking it to do. Since the only use of the unversioned
'instance' (symlink, in Fedora...) of a library is in development,
naturally it goes in the devel package. We can take advantage of this in
generating dependencies, and we do, which is why it's important not to
put the .so file in a runtime package, or that runtime package will get
a bunch of automatically generated dependencies on -devel packages.

The whole system of naming and versioning of shared libraries, and the
appropriate way of packaging them, is somewhat complex but very neat and
makes a lot of sense. It's worth reading up and understanding exactly
how it works and what it achieves. I don't know if there's a 'canonical'
reference for this, but a bit of Googling produces:

http://static.usenix.org/publications/library/proceedings/als00/2000papers/papers/full_papers/browndavid/browndavid_html/

Which seems like a rather good overview.

> Who defined this? Is this part of some standards (ex: LSB, etc) ?
> 
> Is there some written documentation about this ?

See above. Also
https://www.ibm.com/developerworks/linux/library/l-shlibs/index.html has
some good stuff.
http://netwinder.osuosl.org/pub/netwinder/docs/misc/GCC-HOWTO-html/GCC-HOWTO-6.html has more of the same, and explains the wrinkle of the 'soname' that's actually embedded in the library file quite well.

This isn't Linux-specific, note. Most *nixes use the same format (ELF)
and the same conventions with regard to linking and versioning shared
libraries.
-- 
Adam Williamson
Fedora QA Community Monkey
IRC: adamw | Twitter: AdamW_Fedora | identi.ca: adamwfedora
http://www.happyassassin.net



More information about the devel mailing list