Hi,

I have been thinking a bit about this sort of thing lately. I am involved in 
Avalon and have seen JDK expand to cover parts of code in that project. Other 
JSRs are currently under development that will render even larger portions 
"obsolete". 

Is this, in itself, a bad thing? Not as far as I can see. One thing 
opensource/freesoftware is not known for is creating "standards". We 
implement standards great and many of the most renowned products (Apache 
Httpd, GNU/Linux, Mesa3d) are known because they damn fine products and very 
standards compliant. There are sections of the community that work good with 
the standards bodies but they are rare (though this percentage has been 
rising of late).

Large buisnesses need stability and documentation. While some OS projects can 
reach that level of maturity after *many* years, a lotta luck and/or good 
developers - this is not the norm. Standards are good because they provide 
the stability (in theory) and facilitate documentation (or at least provide 
raw standards document). Standards are good for one reason - they are 
standard. 

Even better - standards offer the opensource community at large a chance to 
shine because that is what we are good at. Standards give a reference point 
of where we want to end up - thus members of community have a common target 
and there is vastly less confusion about direction (how to get there is 
another thing...). This lowers communication costs which is better for usall 
as we can get on doing with what we do best - code ;)

Sometimes standards end up making poor decisions or being of poor quality for 
one reason or another. Ceki has been railing against recent Logging JSR, I 
have heard others rant about JSPs being evil and there is always the EJBs 
were product of an immature process wails. I am sure there are things all of 
us dislike about one API or another. There are also APIs most people like 
(Collections and Security Permissions come to mind).

In non-java world the sucky standards are ignored or newer better improved 
versions are implemented over the top. However in many cases, us java users 
do not have that luxury. The APIs are shipped with the core JVM. Most users 
(and many developers) are lazy and if they have a product/API that 
satisisfies their needs but is ugly/bad/evil they will use it anyway. The 
only way to change this would be to make the "good" api as painless to use as 
the standard but "evil" api.

This brings us back to the idea of CJAN. Scattered across a number of lists 
there has been discussion of CJAN. I won't bore you with the details but the 
core features of this service were
* (seemingly) centralized directory of java jars/libraries/components
* reolvable dependency relationships between these components
* standard mechanism  for sucking down components and storing them in system 
global, user-specific or project-specific locations
* Possibility of a java version of ld.so that loads relevent jars and 
"injects" them into ClassLoader for apps

This would give the "other" APIs (non-standard but good) a fighting chance 
against core JDK classes. It would also move java closer to being platform 
agnostic.

However this doesn't really address the issue of whether Sun/JCP should be 
duplicating work done in opensource projects like jakarta. I guess that is 
really a loaded question. Given that I am very anti "duplication" especially 
when source work is freely usable - the answer would be a clear no. However 
if I was to slightly modify the question to something like "Should Sun/JCP 
create standards based on work done in opensource projects like jakarta" then 
I would 100% agree. Mainly because it is a standard and thus has associated 
benefits (stability and documentation).

So I guess we have to ask - What would the best method be for increasing 
quality of the standards? and/or getting Jakartas work accepted into JDK or 
as a dejure/defacto standard etc? and/or as RI etc?

Our situation reminds me a lot of a situation described in a book I read 
about a few years ago (I think it was called "Environmental Terrorism"). 
Essentially we are a group of "idealists" trying to convince the holders of 
the purse strings to do the "right thing".

The book described a number of strategies to change peoples minds. The three 
strategies that seem relevent in our situation are
1. Work from the inside
2. Spit in their face
3. Extend and imnovate

For instance if there is a JSR proposed that overlaps with something you are 
working on then (1) would be the best strategy. Join with the tech lead and 
other expert group members to work out the best possible API definition etc. 
This however has the side-effect of supporting the powerbase that creates 
standards (int this case Sun/JCP) and a few people have raised concerns that 
you are lining Suns coffers by doing this.

(2) is an effective strategy to raise community awareness but it almost 
certainly has no effect on the process. In this case it can effectively do 
more damage than good. It tends to alienate the Spec Leads and other 
participants in JCP which can put a halt on cooperation in the future.

(3) is a strategy that you probably recognize from groups like Microsoft or 
GNU.org. They implement the standard and then add a number of extentions to 
standard to increase ease of use. This has the effect of locking in users to 
using their extended versions. As a long term strategy this is often the 
best, unfortunately it takes time and a lot effort.

So to summarize
(1) effective, short-term, may leave participant feeling like they doing work 
for another
(2) not effective, easy to do, raises awareness, leaves participant feeling 
good about themselves
(3) most effective, long-term, ***lots*** of work, leaves participant feeling 
good about themselves

Personally I prefer (1) - mainly as I am relatively lazy. It is the easiest 
way to get changes instigated. So is (1) really a solution? At this stage, 
not really. JCP is still too broken to achieve it effectively.

For those not familiar with JCP there is essentially 3 components. The 
Committee (EC)(made of company reps and/or leading researchers), the Spec 
Leads and the Expert Group (EG) members. When a new JSR is proposed it needs 
to be approved by relevent EC. The group proposing it usually will provide a 
Spec Lead. This Spec Lead will then *select* a group of "experts" to work 
with. This group then writes/revises spec until approved by EC or until 
dropped.

There are a few serious problems with this process; Spec Leads have absolute 
control and Discussion is not open being the two obvious faults. 

Spec Leads get to select the members of EG. Thus it is not inconceivable that 
they would only select yes-men. They also are under no obligation to listen 
to any EG members. They could almost submit a work that the rest of EG 
disagrees with (Not strictly true as a 2/3rds vote can eject Spec Lead). The 
only check on their power is the EC.

The Spec Leads also get to decide the working style. Some are relatively open 
while others are very closed. The worst EG I have heard about disallowed 
communication between EG members. They could only communicate with Spec Lead 
and the Spec Lead may only forward limited sets of information to each 
member. The other end of spectrum is groups where 99% of communication is 
done on open mailing lists.

There is 3 types of information generally communicated between EG members.
a. private information (ie passwords and data that is restricted to EG 
members)
b. protected information (ie can only talk with your own company)
c. public information (ie can talk to anyone about it)

I would love to see the JCP become a real community process. If any of you 
become involved with the JCP I would encourage you to advocate placing (c) on 
public mailing lists. It would also be good to distribute power in EG so that 
decision process is a meritocracy or democracy of sorts.

There is one other danger present in current JCP process that I haven't seen 
discussed before. If I was a selfish greedy entrenpreneur then I would see 
the JCP as a great stomping ground. I could go in, create a spec and provide 
a basic RI. Then sell a enhanced version of RI with patented techniques. 
However I make sure that anyone who wants to be a serious user of API needs 
to license my product. Thus I become "standards complying" and probably quite 
wealthy. Not sure If I would go as far to say this is happening already 
but... 

Anyways this has become a rant so I will stop now ;)

Cheers,

Pete

*-----------------------------------------------------*
| "Faced with the choice between changing one's mind, |
| and proving that there is no need to do so - almost |
| everyone gets busy on the proof."                   |
|              - John Kenneth Galbraith               |
*-----------------------------------------------------*

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to