[fedora-java] Linking against the JVM

Omair Majid omajid at redhat.com
Thu Jun 26 18:20:46 UTC 2014


Hi,

I recently ran across a few bugs having to do with packages linking
against the JVM. Basically, packages are trying to link directly against
a JVM (libjvm.so) and are filing bugs when appropriate LD_FLAGS to do
that are not obvious:

- https://bugzilla.redhat.com/show_bug.cgi?id=449456
- https://bugzilla.redhat.com/show_bug.cgi?id=740762
- https://bugzilla.redhat.com/show_bug.cgi?id=1112012

Fedora (and JPackage) guidelines try to makes it easy for users to use
alternate JVMs. They can use alternatives and/or environment variables
to control which JVM is used. This linking directly against a libjvm.so
runs counter to that.

I talked to Mikolaj who thinks that ignoring the user-specified JVM
(either through alternatives or JAVA_HOME) is a bug and can lead to
surprises where an application is not using the JVM you may think it's
using.

This linking will also cause things to break when Java versions are
bumped and we go from java-1.x.0-openjdk to java-1.y.0-openjdk or even
if the OpenJDK directory changes name.

However, others, including Andrew Haley have suggested that it may lead
to broken programs (and other surprises) when applications end up with a
JVM that's different from what they expected.

Mikolaj thinks it would be better if the packages did one of the
following (in order of preference):
1. Fix upstream - convince them to respect $JAVA_HOME and use dlopen(3)
2. Maintain Fedora-specific patch for dlopen(3)
3. App should use its own linker magic depending on java home (eg, shell
   script checks $JAVA_HOME and sets LD_PRELOAD)
4. Fail if $JAVA_HOME is set

And he prefers to avoid:
1. Java .so in default linker paths
2. Linker tricks to avoid depending on Java home (these are just
   workarounds for Java .so not being in default linker paths)
3. rpath

What do others think about this? If there is some sort of consensus
about this, should the packaging guidelines be amended to make this
explicit?

I also talked to Mikolaj about making some sort of mini-library to make
it easier to implement fedora-specific patch to make it easier to
dlopen(3) and use a libjvm.so. Is this something that others will find
useful?

Thanks,
Omair

-- 
PGP Key: 66484681 (http://pgp.mit.edu/)
Fingerprint = F072 555B 0A17 3957 4E95  0056 F286 F14F 6648 4681


More information about the java-devel mailing list