JavaOne Conference Thoughts
These are my (slightly organized) thoughts after attending the JavaOne conference, May 29-31, 1996.
Observations:
Advantages of Java:
Enablers:
Concerns:
Buzzwords:
My biggest revelation was that Java is not just for creating fancier Web pages. Java encompasses a complete software platform and includes not only the Java language itself, but a set of pre-defined classes providing what are normally considered to be operating system functions and foundation class capabilities. Operating system functions include file io (java.io), network functions (java.net), graphic images (java.awt.image), and threads (in java.lang). Foundation class capabilities include graphical objects such as windows, dialogs, buttons, checkboxes, and list (java.awt-components).
Java programs currently come in two forms: applets and applications. Applets are the relatively small Java objects that you normally encounter on Web pages. Because of the ability for an applet to be automatically downloaded and executed when you view a web page, applets have restrictions on what they can do. For example, an applet cannot do file I/O or communicate with a network address other than the address from which the applet was loaded. This is part of the security built into Java. On the other hand, a Java application is a complete program that has full access to all Java features, including the ability to call native O/S or application functions in the computer on which it is executing.
Java also comes with an execution environment called the Virtual Machine (VM), which is normally associated only with Java although it not necessarily limited to Java. The Java compiler translates the source program into a byte stream which is interpreted by the VM. The byte stream was designed so it can be scanned to insure it can do no real damage to the computer on which it executed. Before executing a byte stream, the VM can check it to make sure that the byte-code is correct and secure. This is another part of Java's security.
Some products (e.g. Symantec's Cafe) include just-in-time (JIT) compilers for Java. These compilers convert the byte-code to native executable code just before execution. This makes a dramatic improvement in execution speed. An old rule of thumb is that interpreters are about 10x slower than native code. In the Java environment, I have heard figures up to 20x slower. However, I heard two comments at the show (one from Microsoft regarding Jakarta) that JIT code is just about as fast as compiled C++ code. So it is conceivable that Java programs may not suffer a significant performance disadvantage over C++ applications, except perhaps for the JIT compile time. This can be especially beneficial for applications.
There is little need to dwell on the wide-spread industry support that Java has received. It seems like everyone, including Microsoft and except for DEC, has licensed Java and will support it on their platforms. A significant point is that the Java license agreement includes the requirements to (a) pass reference tests to insure compatibility, (b) regularly upgrade with new features, and (c) pass to SunSoft all changes made. For example, Microsoft has changed the run time layout for objects gaining, they claim, significant run time improvement. They will be giving this code to SunSoft as part of their license agreement. (SunSoft may or may not include these changes in future releases.) SunSoft is trying to avoid the UNIX situation, where incompatible implementations exist. There is hope that all Java environments will be compatible! (Or at least mostly compatible.) (On the other hand, both Sun and Microsoft are working on "archives" so multiple classes can be packaged together. It doesn't seem like they're talking together yet!)
The current Java release is version 1.0. Remember the old saying "never buy version 1 of any software." While I heard of problems that developers have had, they mostly seemed to be related to capabilities not yet provided in Java rather than to inherent problems. One speaker asked for some enhancements to the language but most of the wish items can be satisfied with new classes. Release 1.1, due out late summer or early fall, will address many of these issues. In fact, many of the conference's sessions discussed features expected in 1.1.
While Java is not dependent on the Internet, its current usage is tightly tied to the Internet. While I can envision batch accounting applications written in Java, I don't expect COBOL programmers to convert to Java. The fact that JavaOS was written almost entirely in Java (except for device drivers) speaks well of the Java language and the fact that today's fast hardware can obscure the inefficiencies of interpretative execution. (It will be interesting to see the performance of native Java processors running JavaOS.)
Most Java programs demonstrated at the conference were applets -- some quite sophisticated. One vendor, Dimension X from San Francisco, has 2D (Liquid Motion) and 3D (Liquid Reality) Java applications. The demo of their Liquid Motion on Windows 95 looked like it could have been a native Windows 95 application. There were some differences besides just speed, but overall I was quite impressed with what could be accomplished in Java. (They did use some native code for graphical rendering.) Some of the demos available on the Web show that powerful applets can be built in Java.
While I haven't studied Java yet, Microsoft did say that they thought it was an excellent language in which to write COM objects. Given this endorsement, I have faith that Java is a good language. The language shows its originators came from the C/C++ world, but they have created a simplified language that eliminates many of the difficult to understand (and some might say powerful) capabilities in C++. An old "test" of a language was to see if you could write a compiler for it in its own language. Java passes this test and more. I suspect Java's advantages far outweigh its disadvantages. (By the way, Corel announced they will rewrite PerfectOffice in Java.)
One advantage that Java has is that it started out with a clean slate. In designing the language and classes, the designers started fresh. There is no old baggage to carry around. And they are setting simplicity as a primary goal. As a result the language, classes, and methods can take the best of 40 years of computer science. But this freedom is not without constraints. After all, Java does have to work on existing platforms. Therefore, they are somewhat constrained because what they design has to be able to be mapped onto UNIX, Windows, Macintosh, etc. So far the indications are that Java has started well and is heading in a good direction.
But we already have, or have had, all of the different components of what makes Java good. Eiffel is a great object oriented language. Zapp (and others) provide platform independent foundation classes. Platform independent interpreters include UCSD Pascal and Forth. What enablers are there that make Java's success possible?
Sun was in the right place at the right time. They had a couple of false starts with the Java technology, but persevered until several technologies became pervasive.
Most desktops now have excessive CPU cycles. People don't need a Pentium processor to do simple browsing with some data entry. The performance hit from the interpreted byte-code is not noticeable for many (if not most) applications. Computation intensive applications will cause users some pain, but JIT compilers and native Java computers may soon eliminate even this concern. In fact, the inefficiencies of many current Windows applications, especially those built in MFC, could be greater than those of an efficient interpreted windowing system written entirely in Java (think about JavaOS).
Bandwidth to the desktop has just occurred in the last 5 years. The "Year of the LAN" passed without major notice. We woke up one day and realized that many computers were networked. And the Internet became easily accessible to everyone, not just those in academia. Mosaic made it possible for ordinary people to gain access to the information on the Internet. 28.8 modems became common in homes and ads for Internet providers started appearing in our daily newspapers. GUI platforms are about the only desktops systems that you can buy these days. Put all of these elements together and it is now possible to deliver content to enough desktops in a quantity and form that could not have been done only 2 to 3 years ago.
The next step was to realize that html pages, while nice, are not interesting enough to hold the attention of non-techies or people who are not performing serious research. Thus the opportunity for Java applets. The security built into Java made Java acceptable technology for downloading and executing unknown, and therefore untrusted, applications to the desktop.
Side benefits are automatically provided. First, administration of the desktop is minimized, if not entirely eliminated. Installing programs on the server is all that is needed. The desktop will always download the latest version of the program when it is needed. Second, Java programs are available to everyone: the MIS people with the IBM systems, the scientists with the UNIX workstations, the marketing department with the Macintoshes, and users of Windows PCs. Applications can be written once. Too bad if an application's user interface isn't the best possible (it never was anyway) or response time is a fraction of a second slower than it might be otherwise.
So Sun was at the right place at the right time with good (possibly great) technology. The final difference was that they marketed it. For example, would you be more interested in hearing about "Green", "Oak" or "Java." (Green and Oak were earlier names for Java.) Sun was able to describe the advantages of Java so that it hit a responsive chord, and thus momentum developed.
One clearly non-technical situation helped Sun. This is the industry perception that Microsoft is predatory in exercising its monopoly position in desktop PCs. The bad company of the 70s was IBM. Microsoft took over that position in the early 90s. The industry was looking for a way to thwart Microsoft. Java provided the opportunity. Compared with the speed of adoption of other technologies, such as C or UNIX or Ethernet, Java's adoption is occurring at warp speed. Fear of Microsoft is the last catalyst that is leading to the immediate acceptance of Java.
But enough of the soapbox.
While a great technology, Java has some limitations that may limit its potential. A major topic that kept coming up at the conference is garbage collection. As Steve Bostock commented, you don't want Java to start garbage collection as your plane is approaching touchdown. One winner in the Java Cup contest commented that he couldn't prevent garbage collection at inopportune times. He was hopeful that version 1.1 of Java will help this situation.
Also, since Java runs on top of multiple operating systems, it pretty much is limited to implementing the lowest common denominator of the environments. I once worked on an application in Zapp and was continually frustrated because I couldn't do what the customer wanted without circumventing Zapp. Will the same occur with Java? Or will everyone agree to limit the UI to what can be done in Java in a platform independent manner?
In his keynote address Tim Berners-Lee spoke about several different future scenarios. In one of the scenarios, every Java program downloaded its own versions of the classes which it needed. This makes great sense to me in terms of version control in the execution environment. After all, I don't want support calls for my software from users using versions of classes when I have no knowledge of that version or implementation of the class. But if every class that I use has to be downloaded for each execution (try executing CYBCERONE over a 28.8 modem) a lot of network bandwidth will be consumed. Even today, I don't enjoy using the web from home. What will it be like in the future? Or can we really assume unlimited bandwidth? (I recall that around 1974 Norm Hardy was trying to convince me to design programs assuming that the cost of memory was zero. It is now 1996 and his prediction is finally close to being true. Do I have to wait 22 years for the bandwidth prediction to come true?)
(Digression) One more point in regards to response time. In the late 60s some studies showed that users objected to response times of more than 2 or 3 seconds on timesharing systems. Using the Web, I frequently encounter times where I give up waiting for response (sometimes my browser times out for me). The Web will have to become more reliable and quicker before it can institutionalize the hype-based mindshare that it has today.
(Digression) There are some (including Scott McNealy) who are predicting the demise of the desktop computer. Most homes and people who use PCs mainly for clerical tasks will be very content with a Network Computer (NC) and the advantages it brings. But I notice the speed difference of executing applications, like word processing, off the network rather than from my local disk. Furthermore, there is a psychological benefit from having my own PC. Nevertheless, when an NC and associated service charges proves cost effective, I suspect that I will switch from a PC to an NC.
In summary, I am excited about the opportunity Java presents to start fresh. I believe that Sun has done a very good job designing Java. With the momentum behind Java, I expect that it will continue to evolve and mature. The pace of progress will slow down because Java now has version 1.0 baggage to carry and everyone in the industry will want their say in the new standards. Windows is not dead -- yet. Java is hot and I expect it will stay hot, even through it still has a few problems to overcome.
Vince Busam
vince@busam.com