@lucaswerkmeister Any system with multiple binaries with the same name is in conflict. It either means this package pre-empts another or is pre-empted by another. Avoiding surprises like this is why the conflicts mechanism exists.
Declaring (and ideally preventing) conflicts is particularly important in this case because the replacements are always going to be incompatible to some degree, sometimes subtly (which can be much harder to diagnose than obvious breakage). And it's not just an issue when you explicitly install this package (which I haven't done (yet): it was pulled in by truffleruby-bin). A user can easily end up silently pre-empting (i.e. replacing) their system ruby/node/python etc. with an incompatible version without even knowing it if it's pulled in as a dependency. Good luck debugging why a core piece of functionality has stopped working in your app or on your system when you're not aware (and haven't been informed) that an app you're using which depends on java has silently replaced your system's implementation/version of node.
In the case of node and ruby, the binaries are often provided by environment managers (e.g. rvm, chruby, nvm, fnm etc.). There are two ways to enable these environments:
1) prepend them to the path (e.g. before /usr/local/bin, /usr/bin etc.)
2) append them to the path
The former is insecure: it means running a single "npm install -g", "gem install", "pip install" etc. can silently pre-empt (i.e. hijack) system binaries like ls
, sudo
, git
etc. It might not even be malicious: just a stray (transitive) development dependency which is harmless and unnoticed when pulled into a library, but which we've now prioritized as the source of truth of what ls
etc. means on our system.
The latter means the environment doesn't work because it's pre-empted by this package.
> the package doesn't install any binaries into /usr/bin
I think that's the problem (or rather the solution). I think it should install into /usr/bin the way your truffleruby package does, keeping /usr/lib/jvm/java-8-graal/bin off the path altogether, e.g.:
- /usr/bin/truffleruby -> /usr/lib/jvm/java-8-graal/jre/languages/ruby/bin/truffleruby
- /usr/bin/graal-node -> /usr/lib/jvm/java-8-graal/jre/languages/js/bin/node
- /usr/bin/graal-npm -> /usr/lib/jvm/java-8-graal/jre/languages/js/bin/npm
etc.
If someone still wants the un-prefixed names, they can easily enable them explicitly by adding those bin directories to $PATH themselves.
Pinned Comments
lucaswerkmeister commented on 2019-11-25 00:24 (UTC)
Okay, the GraalVM 19.3.0 update should be done. This is now a virtual package, please explicitly install
jdk8-graalvm-bin
instead – orjdk11-graalvm-bin
(or both). The same goes for all sibling packages (FastR, TruffleRuby, GraalPython, native-image) – the old packages have been retained and depend on the jdk8 version of the new package now, but please install the jdk8 and/or jdk11 packages explicitly, I’ll remove the old names eventually.