The good news for developers is that it is far easier to work around the absence of the expected set of foundation classes than it is to overcome crucial middleware that is missing. The bad news is that the goal of "write once, run anywhere" continues to take it on the chin -- not due to the failure of the technology, but rather due to the inability of Sun and Microsoft to bury the hatchet anywhere but squarely in the back of their antagonist.
The first release of Java contained the Abstract Windowing Toolkit, or AWT. In retrospect, even Microsoft and Netscape agree it was inadequate. Its poor performance was complemented by a cumbersome and overly restrictive event model.
One of the new features hailed in early releases of JDK 1.1 was a completely rewritten AWT, including a fundamentally different delegation event model. The new AWT boosted performance and improved flexibility, advocates said. Even so, Netscape was moving forward with its Internet Foundation Classes (IFC), and in January 1997, Microsoft announced it would develop AFC -- Application Foundation Classes.
In March, Microsoft began letting companies get a look at AFC, and in April it released an early version to developers. About the same time, at the JavaOne developers conference, Sun and Netscape announced that they would jointly develop Java Foundation Classes (JFC) with IBM and others, rolling in generous portions of the IFC.
Ever prickly, Microsoft takes offense that Sun and Netscape embarked on JFC without seriously considering adopting AFC, or using it as the point of departure for JFC. The result, says Joe Herman, Microsoft product manager in the applications and Internet client group, is that AFC is real today and has a six-month engineering jump on JFC.
Sun has always been very receptive to working with and adopting Java technology from other firms, responds Rick Levenson, an engineering manager within Sun's JavaSoft division, and the person responsible for JFC, among other projects. "Perhaps if their licensing agreement would have allowed us to look at the code without tainting our whole development effort, we could have taken a look," but that was not what Microsoft offered, says Levenson.
One of the misconceptions regarding AFC and JFC is that they are merely interface widgets. This is not strictly the case.
The two major pieces of AFC are the user interface classes (UI) and the graphics classes (FX). The UI classes extend the AWT with about 30 widgets, while the FX classes add font, printing , and color capabilities, including brushes, pens, textures, fills, and palettes.