Gmane
From: Attila Szegedi <szegedia <at> freemail.hu>
Subject: New Rhino maintainer announcement + road ahead + call for volunteers
Newsgroups: gmane.comp.mozilla.devel.jseng
Date: 2006-05-18 15:26:05 GMT (2 years, 16 weeks, 1 day, 15 hours and 33 minutes ago)
Hi all,

Igor Bukanov stepped down as the module owner for Rhino since he currently  
doesn't have an interest in it. At the same time, he asked me if I would  
take over as the new maintainer. After thinking about it for some time, I  
accepted the responsibility. (The http://www.mozilla.org/

I'd like to outline what does this change mean for Rhino.

First and foremost, I must say that I'm far from being an ideal project  
maintainer. An ideal project maintainer has heaps of time to devote to the  
project, and knows its ins and outs.

Now, I'm neither.

First, the time. Rhino is in enoromously widespread use, in uncountable  
number of web applications, server side scripting, GUI scripting, etc  
solutions. It is even bundled as the default scripting engine in the JDK  
6.0. It is a real honour to be offered to steer this project, and I'm  
taking it very seriously. Regardless, the time windows I can dedicate to  
Rhino are those that don't overlap with my paid work time, and that only  
partially overlap with the time I need to devote to my family, and that  
don't impair my rest time significantly so that I can still provide  
adequate quality work to the people who pay my bills during weekdays.  
These I also all take very seriously. In plain English, Rhino gets hours  
out of my weekends, and sometimes maybe parts of my evenings as well.

Second, the knowledge. I've been through the (user -> patch contributor ->  
committer) evolution chain. I know the Rhino source code rather well, but  
far from perfect. There are white areas (good knowledge), gray areas (used  
but not dissected too much -- i.e. Interpreter class), and black areas  
(never used, never looked at -- bytecode compiler, E4X). My ability to  
patch or to evaluate correctness of patches in grey/black areas is  
somewhat limited, although I promise to do my best to understand the code  
involved with a patch, if you submit one. We might go through few rounds  
of questions and answers though when you submit a patch, be prepared for  
that. I'm almost 100% likely to be unable to provide patches myself for  
these components if you can not provide a patch yourself but just report  
the bug - again, I'm talking primarily about the stackless interpreter,  
the bytecode compilation, and the E4X support.

So, this is the new maintainer you got :-) On the bright side, Norris Boyd  
reassured me he's willing to occasionally help out, and I believe that  
neither Igor nor Brendan will mind if I bug them occasionally if I get  
stuck on something.

Let's take a look at where's the project today, and where do I think it  
should be headed.

On the bright side, we have a widely used codebase that runs with not too  
many issues. On the dark side, we have those "not too many" issues. A  
brief scan of Bugzilla shows 54 open issues, 22 of which are E4X related.

This brings me to the two major things I'd like to see in the Rhino's  
future:

1. Reimplementation of E4X without relying on external libraries, but only  
on SAX and DOM support present in javax.xml.* packages. Apache XBeans,  
used as the foundation for the current E4X implementation, suffers from a  
rather bad codebase -- there are gratituous object poolings in there that  
are good mainly for causing memory leaks etc. Without external  
dependencies, E4X support would likely be includeable in the JDK-bundled  
Rhino as well (Sun won't include it in the Rhino version they endorsed for  
6.0). I'm not saying that all E4X bugs stem from XBeans, but I'm saying  
that the current E4X implementation has lots of problems, and that I'd  
most gladly see a fresh start on it. There's just one gotcha: while I'd  
like to provide a very loose high-level architectural consultancy role for  
it, I definitely don't have the resources to go down in the trenches and  
code it myself. So this is also a CALL FOR VOLUNTEERS who feel they could  
give the world a better E4X support in Rhino.

2. Abandoning JDK 1.1 support. There's lots of JDK 1.2+ specific  
functionality in Rhino that has to be implemented using all kinds of  
reflection workarounds, so as to allow Rhino codebase to both compile on a  
Java 1.1 platform and also execute on it. The resulting code is  
necessarily, to say the least, rather inelegant and poorly maintainable.  
Then there's functionality, like ClassCache, that's implemented using a  
Hashtable for 1.1 compatibility, where in reality it'd have to be  
implemented using a WeakHashMap so that it doesn't interfere with  
unloading of classes, but weak references are a JDK 1.2 feature. Also,  
JavaAdapter could be rephrased in terms of java.lang.reflect.Proxy. I view  
1.1 support to be a burden without a comparably big benefit for further  
development, and barring a *big* public outcry in response to this  
announcement, I intend to move the development forward without much regard  
for it. I think that targetting a minimum of JDK 1.3 compliance is a  
realistic expectation in 2006. The next bugfix release of Rhino, 1.6R3  
will however definitely still preserve 1.1 compliance.

As for "less major" (but not really minor) things:

1. We'll soon include a scripting provider service declaration in the  
META-INF of the js.jar so that the JDK 6.0 bundled Rhino can be  
transparently replaced with our standalone Rhino implementation for  
running *.js files by simply including js.jar in the classpath.

2. Next release. I've started going through the bug tracker last weekend.  
I'll continue this work this weekend. When I get to the bottom of the list  
having addressed everything that I could in it (which most likely won't  
include any of the 22 E4X issues, unfortunately), I intend to publish the  
result as Rhino 1.6R3.

So, that's it. Any and all input on any thoughts expressed above is more  
than welcome.

Attila Szegedi,
   your new Rhino man-to-blame.