Bug#929296: libopenblas-base: is libopenblas.so needed?

Mo Zhou lumin at debian.org
Tue May 21 07:41:07 BST 2019


Hi Drew,

I didn't closely investigate into the scipy bug, but I can answer
some of your questions. BTW, does anything break in a clean chroot?
I mean, making sure a thing works fine in an unclean environment
is difficult.

On 2019-05-21 04:57, Drew Parsons wrote:
> Why is /usr/lib/x86_64-linux-gnu/libopenblasp-r0.3.5.so provided by
> libopenblas-base?

Julia links against libopenblas.so.0 instead of libblas.so /
liblapack.so .
Julia's linear algebra standard library is not quite ready for
library switching.

> The problem is that libopenblasp-r0.3.5.so contains exactly the same
> symbols as libblas.so and liblapack.so.  This seems to be confusing
> linkers, e.g. see Bug#914655 for python-scipy.

The Debian dependency template resolving of the BLAS / LAPACK family
is designed to work like this:

- linked against libblas.so.3 -> enable alternative,
  resolve to libblas.so.3 | libblas.so.3

- linked against libopenblas.so.0 -> tight requirement on openblas,
  resolve to libopenblas-base

Even if libopenblas.so.0 contains the same set of symbols as
(libblas.so.3 + liblapack.so.3 + some extended routines),
the SONAME matters for our dependency tree.

> If libopenblasp-r0.3.5.so is present then it is used preferentially to
> provide BLAS and LAPACK symbols, so the shared library
> (_flapack.x86_64-linux-gnu.so in the case of python-scipy) ends up with 
>   NEEDED libopenblas.so.0
> instead of
>   NEEDED liblapack.so.3
>   NEEDED libblas.so.3

libopenblasp-r0.3.5.so should never be used as BLAS / LAPACK provider
as it's SONAME unmatches the depencency template and would incur
breakage to our dependency tree.

If a program is really linked against libopenblas.so.0, liblapack.so.3,
and libblas.so.3, it is still problematic as symbol clashes between
(possibly) different implementations may lead to unexpected results.

> The official builds of scipy are fine since they build against the
> generic BLAS. But local builds can become confused, which is what I
> think happened with Bug#914655.  The package Depends: libblas3 |
> libblas.so.3 where in this case it would need Depends: libopenblas-base.
> 
> So, is libopenblasp-r0.3.5.so really supposed to be provided in
> /usr/lib/x86_64-linux-gnu by libopenblas-base, or this a bug which
> should be fixed when the various BLAS flavours are being expanded?

I'm sure libopenblasp-r0.3.5.so cannot be removed. Every OpenBLAS
flavor will ship 3 shared objects:

   openblas-flavor/libopenblas*.so.*  SONAME: libopenblas.so.0
   openblas-flavor/libblas.so.3       SONAME: libblas.so.3
   openblas-flavor/liblapack.so.3     SONAME: liblapack.so.3



More information about the debian-science-maintainers mailing list