Ordering of versions

cowwoc cowwoc at bbs.darktech.org
Mon Nov 14 10:10:22 PST 2011


On 14/11/2011 11:21 AM, Stuart McCulloch [via jigsaw-dev] wrote:
> On 14 Nov 2011, at 16:04, Brian Pontarelli wrote:
>
> > It seems to me that the version scheme for a single module only 
> impacts that module and not its dependencies. When the dependency 
> graph is completely built and then traversed, modules are compared 
> based on their scheme with all the other instances of themselves in 
> the graph. Therefore, I don't think it impacts others at all.
> >
> > Thoughts?
>
> What happens if someone changes the Comparator<Version> implementation 
> used in their module over time? (either by design or mistake)
>
> You could end up with some situations where the ordering was not 
> defined, or there were conflicting/ambiguous results.

     That's true for any implementation of Comparator that already 
exists today. Should we throw out the Comparator interface because 
people could implement it wrong? If a developer pushes a bad Comparator 
implementation, he will simply fix the bug and push the new revision.

> The other downside of an executable versioning scheme is that you 
> probably would have to download a full bundle (maybe with all its 
> dependencies) in order to run its comparison method, only to find out 
> that you didn't actually need that version.

     I don't think any of us are advocating this. The idea would be for 
the version comparator to play a similar role to pom.xml in Maven. You'd 
download the Comparator independently of the module and only proceed if 
you desire that version. I don't see why a Comparator would need to 
depend on other classes in the Module anyway. We're talking about a 
simple String comparison here.

> Executable schemes also make it harder to do static analysis in other 
> languages and could introduce security issues (since you're running 
> unknown code even before installing the bundle).

     Regarding static analysis, as I mentioned in other posts you could 
simply mention that results are cached so the Comparator must be 
deterministic.

     Regarding running untrusted code, the way I see it you're 
downloading a module with the intent of running it. Whether you run 
untrusted code at dependency-resolution time or at runtime makes little 
difference. Either way you are expected to verify that you only run code 
that you trust. When you install a native application on Windows you get 
a warning before the installer even launches (because you don't 
necessarily trust the installer). We'd do the same thing (for any 
untrusted dependency).

Gili


--
View this message in context: http://jigsaw-dev.1059479.n5.nabble.com/Ordering-of-versions-tp4970773p4991902.html
Sent from the jigsaw-dev mailing list archive at Nabble.com.


More information about the jigsaw-dev mailing list