# HotJava Applet Compatibility

This page briefly describes the guarantees we give about upward compatibility -- running applets without recompilation in future releases of HotJava.

## Java Versioning Support

Java is a late-bound, dynamic language. All methods, variables, and classes are resolved dynamically the first time they are used. Instance variables and methods can be added to classes without recompiling any of the code that uses the class. This makes Java much less susceptible to API changes than statically linked languages such as C and C++.

We have been coding in Java since 1991 and the language is stable. Both the language specification and the binary class specification are finished and stable. Any extensions of these specifications will be made so that older classes will be upward compatible.

## Alpha1 to Alpha2 Compatibility

Alpha1 applets are upward compatible with the alpha2 release of HotJava. This means that most applets developed and compiled with the alpha1 release will run in the alpha2 browser without recompilation.

Note that we changed the language name from "O.A.K." to "Java", which has affected some APIs. We have managed to maintain upward compatibility despite these changes. The interpreter and the class loader automatically upgrade alpha1 applets to use the new naming scheme.

We have also made changes to some APIs. The components exposed to alpha1 applets have remained stable so that simple applets compiled for the alpha1 release continue to work in the alpha2 browser.

## Alpha2 to Beta Compatibility

We are committed to keeping the impact of API changes to a minimum. However, we do NOT guarantee complete upward compatibility between the alpha2 and beta releases. We reserve the right to make changes that will break upward compatibility.

We hope to make some major improvements and simplifications to the HotJava APIs in the beta release. This will unfortunately mean that some or all alpha2 applets will not run in the beta release browser without recompilation.

This is the bottom line with regards to upward compatibility of alpha2 applets:

- Very simple alpha2 applets may continue to work in the beta release.
- Most alpha2 applets will have to be recompiled to work with the beta release.
- Some APIs used by alpha2 applets will be extended and some code modifications will be required.
- Alpha1 applets will have to be recompiled and are likely to require code modifications.

There are certain things that you should avoid when writing Applets. Please stick to the APIs defined in the Applet class. Don't assume that the Applet's item field will be available in future releases. Don't rely on APIs that are not documented.

## Anticipated Changes Between Alpha2 and Beta

We intend to implement a model-view architecture that will allow the same page to be visible in more than one window. Simple applets won't be affected; they will simply be asked to paint once in each window in which they are visible.

The applet API will be extended to allow applets to use the model-view architecture. Applets will be able to have a "view" part as well as a "model" part. Alpha2 applets are equivalent to the "model" part of beta applets.

The AWT (Abstract Window Toolkit) will be greatly improved. The graphics API will be extended, the interface to image manipulation will be improved, more components will be added, etc.

The APIs for audio are likely to change. They will be updated to support more than one audio format.

This list is by no means complete. We hope to extend and improve the HotJava functionality in many ways that won't affect applets directly.

## Upward Compatibility After the Beta Release

We are fully committed to supporting the beta release applet APIs indefinitely. We realize that the stability of the APIs in a widely distributed system like HotJava is of crucial importance to its success.