Java Swing history

I spent quite a while to find a newsgroup e-mail I read a year or so ago, but I found it. It's about the origins of Swing, why it is the way it is and Amy Fowler's role in it. Even though it appears not to be completely true, it's a juicy story: To see why everything is so messed up you need to go back a few years to the world when just AWT existed. Sun had built a basic set of portable control classes that mapped to native widgets on the different operating systems, and the next obvious step was to continue this model beyond its initial set of CUA 92 components ( text, button, etc... ) and add stuff like a table, a tree, a notebook, a slider, etc... While AWT was buggy beyond belief this was just poor code that needed fixing by Sun's coders. The developers at Sun like Graham and Otto used to publicly blame their bugs on operating system differences like "focus order is different between windows and OS/2" or "the behavior of Ctrl-X is different between ..." and other lame excuses to take the heat off the fact that the real problem was that Sun released the code too early. Then Amy Fowler appeared at Sun. Without being sexist, Amy is a very pretty intelligent girl, and most geeky developers just go to putty in her hands.

Amy came from a Smalltalk company called Objectshare where she looked after the UI class library there. The history of Smalltalk is a sad one if you apply it to Java, because once upon a time there were 3 big Smalltalk companies - IBM, Parc-Place and Digitalk. All 3 had equal market share in early 90s and life was good. Parc Place used emulated widgets ( i.e. a Swing design ) while IBM and Digitalk used native widgets. IBM overtook the others who then merged to form, imaginatively, Parc-Place Digitalk. A huge battle enused in which they tried to merge their products in a project called Jigsaw which failed due to politics ( the developers actually got it working ) because the native versus emulated crowd fought to the bitter death. Amy won a moral victory, however at IBM we just got all of their accounts because the two companies did nothing for an entire year except quarrel. When the dust settled the share price of PPD ( which was now called Objectshare for the same reason that Windscale was renamed to Sellafield - in the hope that everyone forgets the disaster that occured there ) went from 60 bucks to under 1 dollar a share. They were pulled form NASDAQ because of incorrect reportings of earnings and the lights went out. Sun were just up the road from PDD so the teccies all sent their CVs there. Amy was hired, and because she promised to solve all of the widget problems by doing a lightweight solution, convinced Sun management to make her the head of the GUI development. She got in on the ticket of "the folks already here messed up, let me handle it". Amy then hired all her old Parc-Place friends and they set about creating Swing.

The obvious thing to do with Swing would be to make it just a drawing framework for the guys who want to do map software and create drawing applications, however build it around the AWT classes that would still deal with buttons and other stuff. The Sun guys such as Philip and Mark already had AWT working with tables, trees and notebook so it would be the obvious thing to do. Not so for the guys who wrecked PDD, they wanted everything lightweight. Ignorance at Sun's management, combined with Amy's ruthless politics led to the mess we have today. Amy also sold Sun on the fact that Swing was a joint development with Netscape as part of the mozilla project, when in reality this was just a sales puff of hers.

At IBM we hated Swing from day one. Big, buggy, and looks crap. Initially our tools such as VisualAge for Java were all written in Smalltalk ( which used native widgets ) so when we started to migrate these to a Java codebase we need a widget set. All of the IBM developers are the same crowd who used to work with Smalltalk, and we reluctantly under management orders built our WebSphere Studio tools using Swing. It was a terrible, buggy, monster. In our initial previews when it was demo'd against Microsoft Visual Studio products all our users hated it just because of how it looked, never mind what it let you do. Most shoppers don't like to get in car that looks and smells terrible, even if it does have a nice engine. We therefore created a project to migrate our Smalltalk native widget set over to Java. This was done in Canada by a group called Object Technology International. It was a success as we released a product called VisualAge Micro Edition using it, which became a very successful IDE for J2ME development. However, the OTI folks found that Swing was so badly broken deep down in the way it reads windows events that we couldn't even get interoperability between SWT ( the S initially stood for Simple although it was later changed to Standard ) and Swing. They read their event queue in a way that can leave memory holes so we had to have our own loop polling the windows event queue to do this correctly. We tried over and over to get Sun to fix this but Amy just didn't understand this, so we took the decision that SWT and AWT/Swing would not co-exist. We even have our own Point and Rectangle classes in SWT - there is no dependence on any AWT or Swing classes in the entire toolkit. We put the toolkit into Eclipse which is a tools platform design with total goal of taking on Micrsoft and Visual Studio. It is open source so anyone can build onto it, and we have people like TogetherSoft, Rational porting onto it. Our competition is Microsoft, so all our efforts are focused at taking them head on.

Sun however got totally pissed off about this. They have NetBeans which they want to do the same thing as Eclipse with and they complained to IBM senior management. They saw SWT as tying you into Windows, which is total bunk because it runs on Mac/Linux using GTK, and a number of micro edition platforms. They refused to let Eclipse be Java certified because it has native code in it, so the Eclipse product has to be very careful about their use of the Sun tradmarked word "Java". Eclipse can't even call itself a Java IDE, and Sun have made threats of legal moves to stop IBM from ever calling Eclipse a Java IDE. One result of this is the fact the IBM created GUI builder that runs on Eclipse lets you build Swing/AWT GUIs, but doesn't let you drag and drop SWT widgets.

It is totally possible to separate SWT from Eclipse and just wack the DLL in your path and use the widget toolkit to develop your GUI for your banking or insurance application or whatever. Again, we can't promote this and our hands are tied by Sun on this. Even though the CPL that is part of the Eclipse open source agreement allows us to offer this as a solution, Sun have made it very clear that they don't want us to do this.

As for the user community, whatever IBM and Sun's ultimate motives, I always find it interesting that those who love Swing say stuff like "Once you have spend years mastering it, you can use it properly" which is basically a way of them trying to justify and defent their hard earned niche expertise, whereas SWT fans say "Wow - this is fast, acts native and works with XP skins, etc.. and is small and light". Another one I like is a quote from a user of ours, who says that Swing is like Java deciding not to do native IO using the operating system, but instead to use the disk motor arm API and read and write the disk data segments themselves. Swing basically does this by just grabbing a low level "paint(Graphics)" method and doing all the widget drawing by hand.