Thursday, December 23, 2004

Apache, Jakarta, Tomcat, AXIS - more than the sum of their parts

For months now I've read constant articles on slashdot about the merits of .NET vs J2EE. I'm getting sick of it.

I work for a large (1500 people) subsidiary of one of the largest companies in the US. Previous to this company, I worked at several dot-coms in the SF-Bay Area. The dot-coms, with the least money, all spent vast sums of it on proprietary closed-source systems. In the past 5 months at my new job, using ONLY open-source tools in addition to our in-house legacy systems, I've accomplished more than I had in the past several years of dot-com work.

I credit my new found productivity to two things:
1. Good Management.
2. The Open Source Community.

The management issue basically goes like this:
Sometimes you have to make a decision on a project. If you constantly change your goal when you're 60-80% of the way to a release, you're never going to get anything done. At my current job my boss gives us tasks, and lets us run with them until completion. If something much more important comes along, we'll interrupt as needed, but get right back on track with our project goals.

Open Source Community. Wow - I'm seriously, honestly, blown away by the Open Source Community. There are shared, always updated FAQs, Wikis, email lists, and usenet. There is nothing preventing people in the Open Source Community from sharing ideas, code, FAQs, Wiki entries, email, usenet, and more. Have a bug? Fear not - search the public bug database, email the developer-list directly, get an answer for free within hours. What's the cost? Well, as a matter of principle, contribute something back. You don't have to be an elite hacker - even your email to a list & its' replies will serve to bolster the online documentation of a project long after you're done with it.

When we have a new project, and it requires a piece of software, we don't need to deal with any other department. Yup - not purchasing, budgeting, project management, or any other group. It amazes me that at the dot-coms, handling less data in their dreams of expansion than my current company, they insisted on expensive closed-source solutions when viable standards based alternatives existed. Twice in three years at a former company, our entire development team was shut down for a day following WebLogic license expiration. We were too small for our account rep at BEA to feel it worthy of sending us a warning email, so we simply found out one day that our servers were hosed. Can you imagine if that happened in production?

I'll say it now, proudly, I never want to use WebLogic again. I use Tomcat now. It's a reference implementation, is actively developed, has great performance, and oh - by the way, almost every Java webapp-related utility/code/package/component/free software is tested on Tomcat first! Find a bug? Fix it your-self, recompile, and submit the code back to Apache. WebLogic had all kinds of interdependencies on the specific JVM it ran on. These weren't obscure things, but things like core JPDC support - that suddenly stopped working if you ran WL on a machine not blessed by their specific JVM.

And that's another thing: do you really want developers who only think/work at their desks? I've got Tomcat on (1) my Windows 2000 machine, (2) my Linux machine. At work, I've got it on a 4-cpu linux machine and a dual HP-UX machine. Guess what, it works everywhere. Oh yeah - one last thing: want to install on another machine, "just because"? Don't worry about sending your "budget man to the congress", simply download and install. No silly licenses. No explaining to corporate accounting why you need fail-over on this machine, dual-cpu license on that machine, cold-backup licensing on that machine... Just install and go.

This is why, in the last 5 months, I've achieved well over a year of dot-com closed-source platform work done. I don't have to wait for a budget, I was hired to do a job, and these are the standard tools. Apache - the vast majority of the web. Tomcat - I'm guessing the largest percentage of Java webapps are deployed on it. MySQL - oh yeah, InnoDB is ACID compliant the best I can tell, supports well beyond our minimal backup/restore needs, and yeah - it's GPL.

And now, back to the start: .NET vs J2EE. Wow - do the lame media at zdnet and the like get this one wrong. .NET is a fledgling competitor to J2EE. I used it for 6 months at a dot-com. Yes: it has a very slick and nice IDE, with lots of useful wizards. Problem: even to do our most basic of apps, the only components we could find were closed-source, expensive components (i.e. a DataTable-Binding GUI for $500 etc). The equivalent in Java would be at least a half-dozen components that get weeded out to one or two very successful and mature open source components. While there are a great deal of good choices out there, simply drop on over to jakarta.apache.org to see some of the Java projects at the Apache Foundation. Java is mature in a way that .NET is hopelessly behind - it has the support of *Millions of people around the world refining, sharing, testing and releasing great software.

*Note: by Millions, don't think I'm crazy. It's just that I recently read "The Cathedral and the Bazaar" A major point of this was that by releasing software as Open Source, your users become more valuable beta-testers than paid in-house QA testers are on-average. Why? Because they will test in more ways, in original ways, and as long as you have a honest information flow, will give you more valuable feedback than someone blinded by in-house politics and legacy ideas.