root-system should be single package and outside default paths
Philipp Klenze
hq.ks at web.de
Thu Feb 25 19:51:13 UTC 2016
Hello,
I would like you to ask to reassess the organization of CERNs ROOT
framework in the Debian package system.
Currently, it is split into around 96 packages and gets installed all
over the system, e.g. in /usr/bin/, /usr/lib/$ARCH/root5-34,
/usr/include/root/ and /etc/root.
I humbly suggest that you consider moving it into one package and
placing it in its own directory, e.g. /usr/lib/root/root5.34/.
My reasoning regarding the package splitting:
(0) Just because you can split a package from upstream into multiple
interdependent packages, it does not mean that it is a good idea. Take,
for example, iceweasel. This package contains some 18 interdependent
shared objects. However, it has not been split into 18 different
packages, because it is assumed that a user installing iceweasel wants
the browser as it is, and almost nobody wants just the javascript
engine, the rendering engine or the desktop icon.
(1) For other packages, it is different. A Gnome user might want to
install just one particular favorite KDE program without installing
everything included in that desktop environment. Here, a high
granularity is sensible, because one can expect quite a few people
wanting okular without having to install amarok (or the other way round).
(2) In my opinion, ROOT is absolutely in the "iceweasel" category. Let
us assume the opposite. You write a program using the basic TH1I
histogram class of ROOT. You look up the documentation of said class [0]
and notices there is no indication given whatsoever against which
libraries he will have to link. Finally, you figures out that one needs
libHist.so and thus ask your admin to install libroot-hist-dev. However,
your story does not end here because rather sooner than later, you will
need to use another class, so you have to bug both your library oracle
and your sysad again.
(3) In reality, things works differently. First, you install ROOT. All
of it (about half a gigabyte, YMMV). You do not think "hm, 46 Megabytes
just for libTMVA.so sounds rather large, will I need it?" Generally,
ROOT is used by universities and the like and for the most part, these
do not depend on dialup to download software. [1]
(4) When you want to get rid of a particular version of ROOT, with the
one package solution, it is as easy as apt-get purge root-system. With
the many package solution, apt-get remove root-system; apt-get
autoremove; actually did not do the trick for me today, leaving me to
manually hunt down leftover packages, not to mention /etc/root.
(Addendum:)
(5) IMO, the proof daemon and related facilities, however, should not be
configured to be automatically started by the main root package. 99% of
the ROOT users will never need them. Using up a bit of disk space is not
an issue with most research institutions, but having an unneeded daemon
written by the "who needs snprintf in cint?" ROOT devs waiting for
someone to test the quality of its input sanitation most certainly is.
Regarding the distribution of files:
(0) Upstream intends ROOT to be installed in a single directory (with
lib, include, bin, ... subdirectories). [2]
(1) ROOT is often not used in a vacuum by someone starting with an empty
file, but people use programs written by others which depend on ROOT.
Many of these assume that $ROOTSYS is set to the root directory of ROOT
(no pun intended). With Debian ROOT, this assumption fails badly. In
some cases, different programs will require different versions of ROOT.
(2) IMO, ROOT does not belong into any default OS path (such as
/usr/bin, /usr/include or /usr/lib). Default paths are great for mature
software with stable interfaces which just work. Take libc.so for an
example. It works, probably without the user even knowing it is there in
most cases. Should you for some obscure reason need to override the
system default libc, that can be trivially done.
(3) Contrast ROOT. Few people ever accidentally use ROOT without knowing
it. There exist different versions which are quite, but not entirely
compatible. This means the typical ROOT user will have to spend at least
some thought on the selection of a suitable version. Learning to
include the correct thisroot.sh in ones shell before using ROOT is by
far the easiest part of using it.
(4) It is virtually impossible to use another version of ROOT when a
version is installed in the default path, e.g. by Debian. You can source
thisroot.sh from your version of choice all you want, you will still end
up with a mixture of both versions which will instantly crash when run.
(5) Thus, on any system where root-system is installed, users will have
one version of ROOT they will have to take as gospel. If they need a
different version (perhaps ROOT 6) or a $ROOTSYS style version for some
program, they are out of luck.
When I need to install ROOT on a Debian system, I will try one of the
following:
a) pick a tarball for another GNU/Linux distribution from upstream, copy
any missing library dependencies (such as ancient libpng versions of
centOS) over from said distribution, cross my fingers
or
b) download the source and compile it.
Given that Debian already includes all of the ROOT libraries, this seems
like a waste of time, but is still more worthwhile than trying to work
with the Debian version for reasons outlined above.
just my two cents,
Philipp
[0] https://root.cern.ch/doc/master/classTH1I.html
[1] Of course, your troubles are not over yet: you will still have to
figure out which libraries to link. But when everything else fails, you
can now at least use grep and nm to figure that out.
[2] Given ROOTs track record of design decisions (lack of namespaces,
"interpreted C++" instead of scripting language, global variables for
anything instead of thread safety, ad-hoc C style string parsing,
misunderstood inheritance (a two-d histogram is most certainly not a
one-d histogram), mixing up the data with its visualization, ...), ROOT
is probably not a great authority regarding what is The Right Way(TM).
In this case, however, I believe them to be correct.
More information about the debian-science-maintainers
mailing list