java.net Success Story: OpenSymphony
The OpenSymphony project might be one of the best-kept secrets on java.net, even though it constituent projects are among the best-known open source projects in the Java world. It's a strange duality that comes from really great code and really light coupling.
Take a look at OpenSymphony's project page and you're bound to see something you recognize:
- SiteMesh, the popular web site decoration engine that allows disparate parts of a web site to offer the same look and feel to the end user.
- OSCache, a versatile caching system, designed for J2EE but widely applicable, that allows you to cache JSPs, servlet output, or arbitrary objects.
- Quartz, an enterprise-class scheduling framework that goes beyond the simple
Timerfacilities provided by J2SE.
- WebWork, an MVC framework for building web applications.
Any one of these is a success story in itself; taken as a collection, these projects and the other OpenSymphony components are remarkable.
Hani Suleiman, one of the leaders of the OpenSymphony project, calls it a loose collection of projects, "aware of one another where it makes sense, but the ideal is that you should be able to plop in any combination of them and everything will just work." Fellow project leader Patrick Lightbody adds, "It is a loose collection, but there is a desire to have a common set of ideals," which Hani agrees with: "Yeah, the ideals include things like business-friendly, J2EE-focused, targeted at users with real world needs, and so on."
OpenSymphony originally began as a collaboration between Mike Cannon-Brookes and Joe Walnes around early 2000, according to Hani, who joined later that year. He says of their original goals: "I'd like to say that there was a huge grand plan of world domination or some such lofty goals when we started, but really, there wasn't."
Also at this time, Patrick was an intern as Cisco, where "I almost immediately became a user of OpenSymphony and WebWork, which was not part of OS at the time. That happened because of the folks at #java on IRC EFNet, which include Mike Cannon-Brookes, Joe Walnes, and Hani. WebWork was originally created by Rickard Oberg as a better alternative to Struts, but after it was clear so many people used WebWork and OS, it seemed like a good to bring WebWork into OpenSymphony."
Throughout its history, OpenSymphony has both acquired outside projects and developed new projects from within. Most of the projects initiated within OpenSymphony have an "OS" prefix to their names (OSCache, OSAccess, OSUser), while acquisitions (WebWork, SiteMesh, Quartz) generally do not--as Hani explains, "people like to keep their project names, for brand recognition and suchlike." WebWork was actually the second donation, after OSWorkflow, a general-purpose workflow system.
Projects operating under the OpenSymphony aegis benefit from common tools (such as a standardized Ant build script used by all projects) and are released to an increasingly unified community. Says Patrick: "We want to keep a common set of ideals, and we also want each project to work well on its own. But we also want to provide a common set of infrastructure tools, that include web site, 'community' (to some degree), forums, etc. We're even working on standardizing the release process, for example, as well as how to do release notes, press releases, etc.--the stuff that no one ever likes to do."
Much of the community-building tools--web hosting, bug tracking, wikis, and discussion forums--are provided by java.net, and that was a big part of the reason that OpenSymphony moved to java.net shortly after the site premiered. At that time, says Hani, "There wasn't a service out there that catered to Java and only Java, and to put it frankly (and this is a personal opinion, so take it with the usual disclaimers), I have more trust in Sun being able to provide infrastructure than any of the other competitors in this area out there." Patrick adds, "At the time we were using SourceForge for the same stuff (CVS, mailing lists, files) and CVS and the mailing lists were really bad," to which Hani adds, "We haven't had a single CVS outage [on java.net]. The only time that it was down was for a scheduled maintenance that took a few hours, that we knew of well in advance."
The solid infrastructure of java.net is crucial for developers, because as Hani says, "I want it to just work, so I can focus on what I do best (hint, it isn't managing
mailman or babysitting
cvs). With infrastructure, the less you notice it, the better it is."
The success of OpenSymphony is better measured by the ubiquity of its member projects, rather than the surprising anonymity of their parent project. Hani says, "I'm always stunned by how many people seem to be using them!
OSCache is used practically everywhere, for example." Patrick notes that "the company I just started work for uses WebWork and SiteMesh for their commercial applications."
Hani recounts a particularly interesting tale of OSCache's influence: "I had a funny experience a few months ago, where I was at a client site with some IBM consultants. The project was experiencing some serious performance issues, and the IBM guys kept insisting that OSCache should be put in to fix everything, whereas there were other developers there (me among them) who were arguing that we should first find out why it's slow, then decide if OSCache is the right approach."
Both of the project leaders credit open source for helping their own growth as developers. Patrick: "Personally, it has been great. I learned everything I know from first using open source, then with helping small bug fixes, to finally leading open source projects. Beyond that, it has given me a lot of credibility when approaching new job opportunities and such." Hani adds: "I agree with Pat. For most developers, after a certain point you'd count yourself lucky to find a large group of people in your workplace that you can learn from. Open source gives you access to that huge pool. It makes you realize how many smart people there are out there and to keep abreast of the incredible things they're doing. It's a great learning experience."
This openness is helping to improve OpenSymphony, as well. The leaders report that there are "hundreds" of developers on their mailing lists, and yet patches come in from developers who haven't even heard of the mailing lists. Moreover, Hani says that "most of the enhancements to OSWorkflow these days are user and corporate contributions, for example," which further illustrates the community's growth.
To the Community
Asked what he'd like to say to the java.net community, Hani sets aside a wishlist of RFEs (though he notes that the inability to import CVS trees makes it much harder to adopt existing projects with code histories), and says:
I think it's quite a vibrant active [community], and I'd really urge pretty much everyone who starts a new project to put it on here. It just works, and the folks managing it are often surprisingly helpful and eager to sort out any issues.
And I say surprisingly, because traditionally, the level of support is inversely proportional to the size of the community. Yet this one seems to be growing without making that sacrifice.
And with a "/me steps off soapbox," he hands it over to Patrick:
I agree completely. So far we haven't hit many growing pains. We're not eager to suck up new projects left and right, and I think that is part of our success. But we do seek out certain projects that are a good fit.
Or, I should say, we've hit growing pains, but we're through most of them now and it has been smooth sailing for over a year now.
Finally, Hani asked to include a word of thanks to some of the project founders:
Of course, OpenSymphony would not be where it is today without the
dedicated efforts of many individuals throughout the years. Particular
thanks go to Victor Salaman and Joseph Ottinger, who were part of the
original founders group, and their contributions are still very much in
use today despite them having moved onto bigger and better things!
So even without the notoriety of, say, a Jakarta Commons, the OpenSymphony project has been hugely successful in assembling a collection of highly regarded and widely used open source enterprise Java projects under a common banner and with a common goal: business-friendly, J2EE-focused software targeted at real-world developers with real-world needs.