On Tue, Aug 11, 2020 at 03:11:03PM +0100, Dave Love wrote:
Is there the possibility of building packages with dummy shims for
proprietary dynamic libraries that could be substituted at runtime
(i.e. a package BRs dummy-libthing-devel, and dynamic linker paths
provide the nasty real libthing at runtime)? Obviously there are
potential technical and legal issues involved. I'm interested in
packages which are useful without the proprietary bits (such as parallel
performance tools with multiple targets or computational programs that
otherwise run on the CPU).
I'm thinking specifically about CUDA and NVIDIA management and
performance stuff, but also more generally. Unfortunately, at least
until AMD GGPUs get well established, NVIDIA support is pretty much de
rigeur in HPC and machine learning application (if that isn't an HPC
subset). I thought about offload in libgomp as an example, but I found
what's involved difficult to follow; it's not immediately clear to me
what interfaces are used, and how.
I suppose the first question is whether dummy libcuda etc. already
exists that could be used for packaging. I've looked without luck, but
maybe someone here knows.
nbdkit provides a plugin[1] that uses VDDK if available. VDDK is a
proprietary library with a poisonous license, exactly like the sort of
thing you describe.
The way it works is to dlopen the library and call the APIs via dlsym.
This is hidden somewhat nicely so the plugin[2] looks like it's just
calling the functions directly, but in fact it calls them through a
function pointer indirection. Depending on how extreme your
performance requirements are this might not be suitable, but for VDDK
it's fine.
There's essentially no packaging requirement at all. nbdkit RPM
doesn't contain any proprietary code, doesn't depend on VDDK either at
compile or run time, no dummy library is needed, etc.
Second, is the legal position on producing such a thing from header
information clear? I guess that would be a question for the legal
list, but I've failed to get mail to that in the past, and I guess
the answer is generally known. Thanks.
You'll need to ask a lawyer (or Fedora legal list) but header files
that simply describe APIs are not normally regarded as copyrightable,
certain unusual and hopefully temporary judgements in the USA not
withstanding.
Rich.
[1]
https://libguestfs.org/nbdkit-vddk-plugin.1.html
[2]
https://github.com/libguestfs/nbdkit/tree/master/plugins/vddk
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v