Innym pomysłem na zapewnienie przenośności tworzonego oprogramowania jest wykorzystanie ustandaryzowanej warstwy pośredniczącej pomiędzy aplikacją a systemem operacyjnym. W pamięci tylko do odczytu, oprócz systemu operacyjnego, producent umieszcza interpreter pewnego języka. Aplikacje ładowane do pamięci nieulotnej wykonywane są przez ten właśnie interpreter. Aplikację napisaną w danym języku można uruchomić na każdej karcie wyposażonej w jego interpreter.
Wydaje się, że do tego schematu idealnie pasuje język Java. Program skompilowany do kodu pośredniego (ang. byte code) trafiałby na kartę, gdzie byłby wykonywany przy użyciu maszyny wirtualnej umieszczonej przez producenta w pamięci ROM.
W 1996 roku firma JavaSoft (oddział Sun Microsystems) zaprezentowała pierwszą wersję specyfikacji JavaCard. Jest to specyfikacja określająca zbiór klas (class library), z których należy korzystać pisząc aplikację na kartę. Programy są pisane w języku stanowiącym podzbiór języka Java.
Po raz pierwszy w 20 letniej historii kart twórcy systemów mieli szansę szybko i wygodnie (w języku wysokiego poziomu) tworzyć oprogramowanie, które działałoby na wielu modelach kart. Brakowało już tylko jednego: implementacji opublikowanej specyfikacji.
Firma Schlumberger w maju 1997 roku wprowadziła na rynek kartę Cyberflex. Karta ta była wyposażona w system operacyjny GPOS (General Purpose Operating System) oraz maszynę wirtualną Javy o nazwie SVM (Solo Virtual Machine). Karta ta jest zgodna ze specyfikacją JavaCard 1.0 API. Oznacza to, że zbiór klas, z których mogą korzystać aplikacje na kartę (Cyberflex Class Library) jest zgodny z ta specyfikacją. Produkt wywołał duże zainteresowanie i spory co do kształtu przyszłych wersji specyfikacji klas JavaCard. Już w październiku 1997 roku powstała nowa specyfikacja JavaCard 2.0, definiująca nie tylko interfejs klas, lecz także ogólny schemat aplikacji pisanej na kartę. Nowy produkt firmy Schlumberger, z którego korzystali autorzy niniejszej pracy przy tworzeniu jej części praktycznej, jest zgodny z tą specyfikacją.
Firmy produkujące karty procesorowe dostarczają wraz z nimi oprogramowanie wspierające tworzenie systemów z nich korzystających. Naganną praktyką jest jednak adresowanie tego oprogramowania jedynie do użytkowników systemu Windows. Nie można przejść obojętnie obok inicjatywy firmy Schlumberger stworzenia takiego oprogramowania działającego również w środowisku Linux. Więcej informacji o karcie Schlumberger Cyberflex można znaleźć w rozdziale 2.3.
Godna uwagi jest lista firm wspierających standard JavaCard. Znajdują się na niej między innymi: Bull, IBM, Motorola, Toshiba oraz Visa. Takie grono daje gwarancję, że karty programowane w języku Java będą w dalszym ciągu rozwijane.