Brian Utterback wrote:
>
>
> Petr Slechta wrote:
>
>>> /usr/share/lib/java/
>> My personal opinion is that sharing all jar libraries is not good 
>> idea. If every application has its own copies of jars then it is 
>> independent. (Uninstallation of other application cannot brake it.) 
>> Jar files are small and today we have disks with capacity of many 
>> GBs, so it is not a problem. Especially for such small utilities like 
>> findbugs is. But that is my personal opinion.
>>
>
> There is no problem per se, but the question is, what is the right 
> thing to do from a product standpoint? If the jar files are never 
> shared, then the whole discussion on versioning them did not need to 
> take place.
>
> From a sustaining point of view, having multiple copies of things is a 
> nightmare. Suppose a security issue comes up with one of the 
> components? We then have to find and fix all those copies. If we do 
> what you suggest and include pre-compiled components, then we can't 
> fix them and we might not even know they are there. How can you ever 
> trust a component without knowing its provenance?
I can see also other example, because compatibility is sometimes very 
tricky (and API does not mean only interfaces, but also behavior of the 
methods).
Imagine the following situation: There is a bug in some library. You fix 
it (you fix only body of the method, interfaces are not touched). You 
replace the library, but one of the applications that use this shared 
library stops working. Why? Because it used the bug as normal behavior 
of the library and when it is fixed and the library behaves different 
way, the application has a problem.

The similar situation is with Java VM versions. Some applications 
require exact version of Java, because it cannot run under newer version 
(something changed, even if Java should be backward compatible and the 
application should run on newer version of Java too).

This is just for illustration. The world is not perfect.

I strongly believe that nobody will fix jar libraries. If there is a 
problem and new library is available, we can get it and replace it. We 
don't need to compile it.

And I know the provenance of the library. Many O/S projects use Apache 
commons libraries for example. Nobody compiles them, everybody just use 
them. I trust this library. I can get sources, but would you examine 
each line of the code to be sure that the library is OK?

>
>
>> If the policy is to share jars, then I don't understand what are the 
>> rules for selecting such jars.
>> - Any jar should be sharable? I don't think so, because some of the 
>> jars are just internal modules of the application that nobody else 
>> will need.
>> - Any library that is generic enough and can be potentially shared by 
>> some other application? How would you measure the potential of the 
>> library to be marked as "usable to other applications"?
>> - Is not is better to follow "natural evolution" of content in SFW 
>> repository? I mean if some application brings jars that could be 
>> shared, but nobody requires them now, then make them as private 
>> copies of the application. When some second application should be 
>> integrated and uses the same libraries, then the libraries should be 
>> made public (sharable). The question is who is responsible to do it. 
>> I would suggest that the new application should make the jars public 
>> first. Then both (the old and the new) application should be changed 
>> to use the shared jars.
>
> The rule is simple: "Do the right thing". It doesn't seem reasonable 
> to me that the second project must package the component, and then 
> test both the old and new packages. It does seem reasonable to me that 
> the first project to deliver a component should deliver that component 
> in the best way possible.
It is fine to do "the right things". But the world is not perfect. So 
why some package should export jar library x.y.z-ver1.2.4 (even if it 
looks that it may be useful to other applications) if after 2 years 
nobody uses it? It is waste of developer's time. For me, the better 
thing would be to care about sharing when the request for it is on the 
table. So if some other application needs the jar, let's make it shared. 
But without this request, without any use case for the sharing, it does 
not make sense to me.

The same way the applications evolve. Nobody starts with very generic 
modular, internationalized, secured, etc. application. At the beginning, 
the application is simple without these features. And only if someone 
really needs such feature, then it is implemented. For each feature, 
there must be a use case. I believe the same holds for share-ability of 
some jar library. If there is no use case to make it shared, we should 
not do it.

>
>>
>> There is also problem with versions of the jars, because some of the 
>> jars do not contain any version information in it (like bcel.jar, or 
>> jsr305.jar).
>>
>
> There's that provenance thing again. You are arguing for delivery of 
> executables without knowing what they are or where they came from. 
> That is totally unacceptable from a product engineering standpoint and 
> from an open source standpoint.
>


Reply via email to