多年以后,Hapner回忆起J2EE初创的那个时期,深感如今Sun对Java的左右能力已经大不如前:“现在,Java事实上属于整个技术社区,它的发展有赖全体参与者的推动。”的确,如今Sun已经不太可能重演当年的开拓性功绩,很难再为一个已经成形的领域重绘版图。但正如上文所说,即使是在1999年,J2EE设计者们面对的也不是一张从未着墨的白纸。他们的设计始终要以各大厂商的现有产品为出发点,这也是天才的设计师们做出的设计却远非完美的原因之一:与从头设计一门全新的编程语言不同,J2EE规范从一开始就是各方博弈和妥协的产物。
很容易注意到,J2EE与Java社区的决策机制JCP(Java Community Process)是几乎同步产生的。J2EE下属的各种技术规范,包括1.4版之后的J2EE本身,都作为待决规范议案(JSR,Java Specification Request)被纳入了JCP的议程。这些议案的审议过程很少是一帆风顺的,几乎每一个都要经历18个月以上的拉锯战。在多项技术规范的审议过程中,我们都见到了这样的现象:最初列名审议委员会的某家主要厂商,没能等到该规范通过就已经被收购或倒闭了。与微软在.NET平台上的乾刚独断相比,J2EE发展中的这个“牛步”特征虽说是审慎和民主的表现,但终归不符合软件演化应有的速度。
J2EE社区中的另一股重要力量,当然是种类极为丰富的开放源代码项目。2002年以来,在J2EE领域的各个层面上,几乎所有主流产品都有来自开源项目的替代方案,在其中很多位置上,开源产品反而是胜过商业产品的首选。但请别误解,这里的“开源”并不意味着完全的自动自发,J2EE世界中的开源项目也与Linux或PHP世界颇为不同。在很多非常成功的J2EE开源项目背后,我们都能发现商业机构的推动作用:Apache的Jakarta社区是IBM扶植的结果;实现了开源应用服务器JOnAS的ObjectWeb,则是许多法国IT厂商(包括若干政府部门)合资支持的一个联盟组织……这些有商业背景的开源项目资金雄厚,人员齐整;更重要的是,从投资者到开发者,参与这些项目的很多人都体现了软件工业中难得的非功利心态,因而最终推出的产品质量甚至高于同类型的商业软件。在主流厂商之外,它们是支撑J2EE大厦存在的一组基石。
另一方面,不少开发者也间接地通过自己的开源产品获得了可观的盈利。这些人大多以免费的开源产品为依托,以收费方式提供附加的咨询、方案实施以及技术支持服务。Marc Fleury,开源应用服务器的JBoss创始人,不无矛盾地把自己倡导的这种商业模式称为“职业开源开发”。
无论叫它什么,高端产品的开源化/免费化运动注定要在J2EE产业的发展过程中制造显著的后果。“JBoss的行径恶化了J2EE的商业环境,”这是McNealy先生2002年的著名论断。他的推理过程如下:只有做好商业推广,J2EE产品才能最终击溃邪恶的.NET平台;但开源服务器会降低主流厂商的销售利润;销售利润越低,用于商业推广的预算就越少;因此,整个J2EE阵营都将受损于JBoss。
但在狂热的开源运动支持者看来,以上论证的大前提就是可疑的。“难道只有会做广告的软件才是好软件?MySQL有过多少广告预算”争论的双方都认为对手误解了软件商业模型的实质。究竟谁才掌握了这里的真理呢?也许只有根据J2EE的未来——也就是它的目标和终点