Page 2 of 3
MSVM boasts many good aspects. For one, it permits code to access local resources, including memory and disk. This approach is legal under the JDK 1.1 specification, so long as it is done by trusted code local to the system or packaged as a cabinet file (.CAB) that has a digital signature.
The Microsoft extensions are platform-anchored -- that is, they provide access to proprietary Microsoft features available on the Windows platform. And ActiveX and COM now are under the control of the Open Group and are putatively cross-platform. But what does it mean to implement these technologies on a Macintosh, Sun workstation, or AS/400? What does it mean for software emulation of the underlying execution architecture or through the use of a compatible coprocessor?
The jury is still out on these issues, which angers much of the Java community. Yet the fury is very selective. The difference in how Microsoft supports ActiveX and COM is not too far from Netscape's use of its Internet Foundation Classes and IIOP: both are extensions, both are proprietary, and both are "standard."
Microsoft's implementation of Java and the MSVM includes a tight link to COM, the company's standard object model. This approach is, and should be, legal because COM is a competing vision for distributed computing -- not strictly a language issue. One should be able to write valid Java code to either a COM or IIOP/CORBA interface.
However, supporting COM from within the virtual machine can be a slippery slope because it imposes an additional component object model along with JavaBeans. Microsoft has announced tentative plans to release a JavaBeans interface in mid- to late 1997. JavaSoft has already announced a unidirectional ActiveX bridge that will enable JavaBeans to act like ActiveX controls. A bidirectional bridge is in the works at Microsoft.
Microsoft has been slow to adopt the JDBC database interface standard, and most observers will see this as an opportunity for Microsoft to push its own standard. JDBC is a layered standard, not a language or run-time construct. Oracle is doing the same thing -- providing a layered standard -- with J/SQL. Database connectivity is an area for innovation because ultimately it is a database issue not a language issue.
The simple reality is that, as always, developers will have to make hard choices about functionality and portability. That choice will always involve tradeoffs. Writing truly portable applications -- those that can be written once and executed anywhere -- will always involve writing least-common-denominator code. Anyone who has used the Java AWT libraries will understand the implication of that statement. For those who choose portability, the Java core must be well-defined and unfailingly defended. The language, VM, and JavaBeans APIs, among others, must be consistent across platforms in order to ensure portability.