I think that today marks the real anniversary of Java Card technology, as the first official release of the Java Card 2.0 specification is dated October 13, 1997. This is just 6 months after the creation of the Java Card Forum, and the result is far from negligible.
Many of the concepts that are still around in Java Card 2.2 were already there: the subset of the Java language, the firewall between applications, the applet model and lifecycle, most of the basic APIs. These concepts have evolved, but the principles have remained the same.
There were also quite a few differences:
- Java Card 2.0 does not define a virtual machine. After heated discussions, the decision was to only define interoperability at the source code level and class file level, but to keep proprietary binary formats. That decision was appropriate for a first release; it was reversed for Java Card 2.1, which had more industrial objectives.
- Java Card 2.0 includes a file system API. .This API was later removed, because of the difficulty to define an API that meets the needs of all industries. Retroactively, this API was a good idea, as it provided an alternative to byte arrays for storing information.
- Transience and sharing were object properties. The API allowed objects to be made transient or to be shared with other applications after their creation. Very flexible, but definitely not the best solution around, as it was difficult to manage.
- There were three kinds of transient objects, including “APDU”-scope objects. This scope later disappeared, although it has a clear use case for security.
- The key hierarchy is based on actual classes rather than interfaces and factories. This is definitely not future-proof, and it drastically evolved in Java Card 2.1.
So, overall, I still believe that we can be very proud of this work. The later evolutions in the API were natural, and it reminds you that the main contribution of Java Card 2.1 is the clear definition of the virtual machine and runtime environment.
Congratulations! This technology revolutionized the smart card world. The biggest and most challenging step is ahead of you. With the next generation Java Card it will become a “computer in the pocket”, connected and secure. It will be interesting to see the impact.