From elw at stderr.org  Wed Sep  7 21:09:25 2016
From: elw at stderr.org (elijah wright)
Date: Wed, 7 Sep 2016 14:09:25 -0500
Subject: [Rd] Building R under Linux - library dependencies
In-Reply-To: <3092aed4.f96460.57d06171.56abc@tlen.pl>
References: <62ff6ef3.6e95b7a5.57d031ed.7e18d@tlen.pl>
	<22480.20131.781988.142009@max.nulle.part>
	<3092aed4.f96460.57d06171.56abc@tlen.pl>
Message-ID: <CANQ3A2PnKHqoueQDfHbmhOiXahFLOzZ=MShroNboYsFODpNb+Q@mail.gmail.com>

On Wed, Sep 7, 2016 at 1:50 PM, Pawe? Pi?tkowski <cosi1 at tlen.pl> wrote:

> > | Is there a way to overcome this problem? Precompiled versions of R can
> be installed on various system configurations, so I guess that there should
> be a way to compile it in a version-agnostic manner.
> >
> > Yes, for example by
> >
> >   -- using a Docker container which is portable across OSs (!!) and
> versions
>
> Docker R containers are north of 250 MB. I have checked experimentally
> that you can trim R down to 16 MB (!) and you'll still be able to execute
> it (though with warnings). That *is* quite a difference, especially when
> deploying small applications.



... I would guesstimate the libraries required to run R with any useful set
of libraries is quite a bit bigger than the cited 16M .......



> >   -- relying on package management which is what every Linux distro does
> >
> > (...)
> >
> > PS For the latter point, our .deb based R package currently shows this:
> >
> > (...)
> >
> > Depends: zip, unzip, libpaper-utils, xdg-utils, libblas3 | libblas.so.3,
> libbz2-1.0, libc6 (>= 2.23), libcairo2 (>= 1.6.0), libcurl3 (>= 7.28.0),
> libglib2.0-0 (>= 2.12.0), libgomp1 (>= 4.9), libjpeg8 (>= 8c), liblapack3 |
> liblapack.so.3, liblzma5 (>= 5.1.1alpha+20120614), libpango-1.0-0 (>=
> 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libpcre3, libpng12-0 (>=
> 1.2.13-4), libreadline6 (>= 6.0), libtcl8.6 (>= 8.6.0), libtiff5 (>=
> 4.0.3), libtk8.6 (>= 8.6.0), libx11-6, libxt6, zlib1g (>= 1:1.1.4), ucf (>=
> 3.0), ca-certificates
>
> Sure, package dependencies would be great as well - at least you'd be sure
> that users of, say, Debian-based distros will be able to run this portable
> R, as long as they've installed the required libraries. But notice that in
> your example package versions equal *or greater* than listed are required -
> so if someone has upgraded their system, they still will be able to run
> that R. With a version built from source you need *exactly* the same
> version as on the machine where R was compiled. Hence my question: how come
> the precompiled distribution of R has "less strict" library requirements
> than manually compiled versions?
>

Package managers don't usually cite 'less than' versions for packages -
because how do you assert a version that won't work when it hasn't been
released yet?

You could go on a tear and build statically linked versions of
R-with-everything-you-need, and maybe avoid the library madness... but this
is sort of a fool's errand and a huge consumer of time.  OS vendors and
compiler developers have stopped doing things that way for reasons.... it's
much simpler to reduce duplication and make everything work - while
allowing for patching out security issues - when you are *just slightly*
more flexible.

ABI compatibility and library versioning are, I think, fairly well
understood....

Doing this stuff with a container is very much the easiest route, if you
actually want it to be completely portable.  You're certainly welcome to
start with an Alpine Linux base and add R on top and then start paring...
but I start to not understand the point, somewhere in there....  it's a lot
of time spent on something that doesn't seem that beneficial when you've
got (even fairly reasonably modern) hardware that can deal with a tiny bit
of extra bloat.  SD cards and USB sticks are pretty cheap everywhere, now,
aren't they?

I could say, maybe, putting time into this as some kind of retrocomputing
project... but probably not otherwise.

best,

--e

	[[alternative HTML version deleted]]



[Rd] Building R under Linux - library dependencies
elijah wright