Jigsaw and containers

Daniel Latrémolière daniel.latremoliere at gmail.com
Thu Aug 31 21:05:00 UTC 2017


Hi Rémi, Alan

I use already jlink to keep only useful (for me) parts of JRE/JDK, and avoid most big thinks (like Java UI, CORBA, RMI, etc).
Modular JAR are officially for migration [1] and are not used by modules from OpenJDK, even when they are pure Java. If they are a definitive target, why isn't it in OpenJDK a tool to transform a JMOD in a modular jar (at least when it is pure Java bytecode)?
As I understand jlink as an optimizer tool [2], I would try to use it for all modules and expect it to be able to do so. If I can not do it good, because they resulting image format is too much restricted, I will mitigate to have a less bad solution.

My problem is that nothing in Jigsaw requires technically to store all modules of an image in a big single file, but new image format has made this choice. Having multiple files, each containing a set of modules would allow much more efficient trade-offs. This is particularly true for containers, and probably also in pure application suite (by making links to a jlink-optimized file containing a shared subset of modules).
This is easy to be seen in containers, where the file system is usually the merge of multiples layers, like described in this image (from Docker [3]):
https://docs.docker.com/engine/userguide/storagedriver/images/overlay_constructs.jpg
Then having multiple files each with a specified set of modules allow some files to be shared between multiples containers. When we have all modules only in a single file, this file will never be the same between all containers and can never be shared. Then sharing common parts requires to convert non-shared modules in non-optimized modular JAR (blurring target of Jigsaw).

I understand that it is too late for Java 9 to allow multiple files for modules in jlink-build images, each file storing a subset of the modules of the image (but I think it would be better if the current single file is already named "modules/0" and not "modules"). I would hope that it is not a definitive limitation of Java.

Daniel.

[1]: http://openjdk.java.net/projects/jigsaw/doc/topics/modularjar.html
[2]: http://openjdk.java.net/jeps/282
[3]: https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/

Le 31 août 2017 21:14:24 GMT+02:00, Remi Forax <forax at univ-mlv.fr> a écrit :
>Hi Daniel,
>several points first,
>the JRE doesn't exist anymore apart for compatibility (the jre is just
>a bunch of modules) and a jar can be a modular jar, just have a
>module-info.class in the jar, so applications that uses jars can be
>modular, they do not have to use jlink.
>
>So you can have a jlink image as small as just java.base and all your
>applications and their dependencies as modular jars, the modules will
>be shared by the different applications, or a jlink all applications
>and have no sharing at all and all the states in between.
>
>Rémi
>
>----------
>Modules can be packaged as JAR files too. You can even use most
>existing 
>JAR files are modules. It does forfeit some of the benefits of creating
>your own run-time image but maybe that is the trade off that you are 
>looking for.
>
>-Alan.


More information about the jigsaw-dev mailing list