Friday, May 8, 2009

Bob vs. Gavin, no holds barred

As this blog chronicles, I was in the Java world from 1996 to 2008. Near the end of the road, I got involved in the Seam and GWT communities, and I met Gavin King and Bob Lee. Gavin developed Hibernate and Seam (both wonderful), and Bob created Guice at Google (which I hear is wonderful, but haven't looked at it much). (Sorry, can't be arsed to link all these terms; search = your friend!)

Then we had to sell our house (housing bubble near-miss) and we decided to move to Seattle, and now I work for Microsoft and am very happy, and I lost touch with what was going on in the Java world. The last I heard, Gavin was working on the Web Beans JSR (JSR-299), collaborating closely with Bob, and Web Beans was going to be the best of Seam and the best of Guice standardized and pushing Java EE forwards. Ah, how lovely a picture!

However, I just opened my RSS feed on Gavin's blog, and was shocked -- SHOCKED -- to see serious trouble in paradise. For example, quoth Gavin:
Bob, if you're honestly trying to argue that Guice - which relies upon procedural Java code to specify dependency-related metadata - is as inherently toolable as a system that allows all dependency-related metadata to be specified using annotations (or XML for that matter), I'm just going to leave this discussion now, because that's absurd.

And quoth Bob (replying to a different post, I'm cherry-picking not summarizing):
This is a little disingenuous. As you know, the lead of a JSR has absolute power. Most leads don't abuse this power. They listen to their (highly representative) EG, achieve consensus, and very rarely make executive decisions. I think you'll agree that you are more of a dictator. Yes, you took what you thought were the best ideas from Guice, but I found working with you as a lead and changing your mind on anything to be an exercise in frustration. I can't count how many hours I wasted convincing you that Seam-style injection was fundamentally flawed only to have you switch to using proxies which have their own set of problems. I even brought Josh Bloch in one time to help settle a debate, but you cursed at and insulted him. I sincerely wish I had that part of my life back. By joining your JSR, Spring would not only validate it, but they'd have to give you absolute power over themselves. Based on my experience, I wouldn't recommend they do that.

Zow! What's also strange is that this comment shows up in my RSS feed for Gavin's page, but I'm not seeing it on the comments web page itself. So if you want to see the fur fly, go straight to the feed.

This is the kind of thing I miss the least about the Java world. I theoretically admire the openness of the JCP/JSR process, and in theory it should lead to better results than a more closed process. But in practice, normal human perversity just gets in the way -- the kinds of personalities that drive specs forwards tend to be very focused, and prone to conflict. So now it looks like there are going to be multiple JSRs describing dependency annotations, and the two people who could best work it out seem to be at each others' throats (as far as their respective specs are concerned). Disappointing.

Neal Gafter recently left Google -- and the entire Java world -- and came to Microsoft, for similar reasons... he put man-years of work into the Java closures spec, and then it was killed due to backroom political pressure. The Microsoft model is more like, we own everything, and we will do what we think is best. Coming from the Java world, I used to think that made Microsoft the Evil Borg. But now, on the inside, I see there are a lot of benefits to having a single decision point. (Well, God knows there are huge political issues even inside Microsoft, but it's still an order of magnitude less than the Java world!)