We have many *many* dependencies from Daffodil, and this has the potential to 
cause conflicts when creating systems that use Daffodil as part of a larger 
system.

If an application requires libraries A and B (suppose B is daffodil), and those 
each in turn require library C (suppose C is the ICU libraries), but A and B 
each depend on different incompatible versions of C, then you have an 
unresolvable conflict.

This is called the "dependency isolation" problem. One would like to be able to 
link libraries A and B with their own respective isolated versions of library 
C, with no interactions.

In the past I had examined the OGSI modular components system (used by Eclipse) 
and rejected it for excess complexity.
OGSI solves the dependency isolation problem, but it also introduces a lot of 
additional long-running software system lifecycle mechanism that is quite 
complex, and not well motivated for a library like Daffodil.

I had hoped that the Java 9 modules stuff would be a rethink on all of this, 
and that it would be focused on solving only selective linking (leaving out 
what you don't use), and dependency isolation.

What I have learned is that Java 9 modules does half of what I wanted.

It successfully allows selective linking and has been used to modularize the 
gigantic Java runtime to enable smaller footprint in memory. That much is good.

But the Java 9 modules system does *not* solve the dependency isolation 
problem. There can still only be one copy of each library version for all 
dependencies of all modules.

I would include references, but a web search for Java 9 Modules OGSI gets you 
many hits and you can find the discussions easily.

Tools like scala-steward don't eliminate the need for dependency isolation, but 
they do minimize it, especially for open-source software.

People who are building systems combining large libraries like Daffodil with 
commercial slow-changing software libraries having dependencies on older 
versions of many other things, those are the people who really run into the 
need for a dependency isolation solution.

For the time being they will have to continue to rely on running incompatible 
things in separate processes or containers or using OGSI if they want 
everything in the same process/JVM.

Mike Beckerle | Principal Engineer

[cid:61c182a7-6d2e-4f39-98e0-cb25ac62333c]

mbecke...@owlcyberdefense.com<mailto:bhum...@owlcyberdefense.com>

P +1-781-330-0412

Reply via email to