<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>On the road to Bandol &#187; History</title>
	<atom:link href="http://javacard.vetilles.com/category/miscellaneous/history/feed/" rel="self" type="application/rss+xml" />
	<link>http://javacard.vetilles.com</link>
	<description>A weblog on Java Card, security, and other things personal</description>
	<lastBuildDate>Mon, 18 Aug 2025 06:48:26 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.32</generator>
	<item>
		<title>Inside Java Card: From APDUs to CAP File and Interoperability</title>
		<link>http://javacard.vetilles.com/2016/05/12/inside-java-card-from-apdus-to-cap-file-and-interoperability/</link>
		<comments>http://javacard.vetilles.com/2016/05/12/inside-java-card-from-apdus-to-cap-file-and-interoperability/#comments</comments>
		<pubDate>Thu, 12 May 2016 11:26:55 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[Java Card 2.x]]></category>
		<category><![CDATA[Java Card]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/?p=25867</guid>
		<description><![CDATA[As promised in the previous post, here are a few Java Card stories. Over the almost 20 years of Java Card history, many design decisions have been taken on the product: some successful, some less successful. Here are a few stories of these discussions/decisions. API vs. APDU Before Java Card, a smart card specification consisted [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>As promised in the previous post, here are a few Java Card stories. Over the almost 20 years of Java Card history, many design decisions have been taken on the product: some successful, some less successful. Here are a few stories of these discussions/decisions.</p>
<h2>API vs. APDU</h2>
<p>Before Java Card, a smart card specification consisted in the definition of a set of APDU commands, with a precise syntax, and in most cases, a precise semantics associated to that syntax. With Java Card, for the first time, an API was designed to run inside the card.</p>
<p>At that time, some of us believed that this would lead rapidly to a paradigm shift in the card world, with the definition of card products shifting from the definition of APDUs (which are low-level communication protocol items) to a more noble definition of API, closer to a functional definition. That&#8217;s why we worked on the definition of the Java Card RMI protocol, whose objective was to allow the definition of interfaces to communicate with cards independently of protocols.</p>
<p>Well, we were wrong. Maybe not on the principles, but most definitely in practice. Nobody adopted the RMI protocol, and APDU protocols are still being defined today. In the world of smart cards, this makes sense, since low-level considerations remain a significant challenge (for instance, performance issues in some contactless transactions). In payment, mobile, and identity, APDU standards remain the norm everywhere.</p>
<p>Why did that happen? The answer is complex, but one major factor surely is the fact that Java Card is for obscure security specialists, and that the smart card protocols are only being exposed to a few developers. In such a context, there is no real need to simplify the interfaces exposed to developers.</p>
<p>What about new markets, though? Are there good reasons to define new APIs rather than new protocols? We can here consider two markets: Mobile TEE and IoT. In both cases, the market is sufficiently new to avoid compatibility issues. Even if standards like GlobalPlatform exist, they are not strong enough yet to be real obstacles.</p>
<p>Let&#8217;s start by the mobile TEE. The idea is here to isolate the security functionality of sensitive smartphone applications. By first looking at it, this looks like a fairly open model, where a developer would split an application into the security-sensitive part, which goes in the TEE, and the non-sensitive part, which runs on the &#8220;normal&#8221; OS. Well, that would work if  developers had a clue about how to do this, but it sure isn&#8217;t the case. That&#8217;s why TEE providers are targeting &#8220;security providers&#8221;, <em>i.e.</em> developers who are working on security products. However, when taking a closer look, the requirements are always the same: authenticating users, protecting stored data (including keys and other credentials), and getting access to a little crypto to implement proprietary protocols. Most developers do not need in any way a full-fledged TEE with applications and more. All they need is a piece of trusted software that they can leverage in their applications without having to dive too deep in the security part. This may sound good for a supporter of APIs, but I am not sure, as &#8220;normal&#8221; developers need a generic API for their apps. The way in which these APIs are implemented is not their problem, and it is quite likely that at least part of this implementation will be on the &#8220;normal&#8221; side. In the end, the usual suspects (security specialists) will be designing the interface between the normal applications and the TEE, and they may be tempted to &#8220;optimize&#8221; things with low-level protocols.</p>
<p>IoT is different, though. It is interesting for at least two reasons: (1) there is no history and backward compatibility requirements, so why bother with APDUs? and (2) there is a wide variety of devices and applications. In addition, in IoT, we are quite likely to see situations where there is no secure element, so new frameworks have to be designed. Not sure where this is going, but I will sure follow what my ex-colleagues from Oracle are doing with this.</p>
<h2>CAP file vs. class file</h2>
<p>This debate has been very active during the design of Java Card 3.0 Connected, in which the class file ended up being selected. I was against the decision then, and I am still against it today. The class file is very nice, but it has not been designed with smart card and other limited environments in mind, so it makes perfect sense to design a more optimized format for constrained environments: the CAP file.</p>
<p>Here are a few good reasons to do so:</p>
<ul>
<li>Optimization. That&#8217;s the obvious one. We can optimize on size by reducing overhead, and we can also optimize on loading and linking times, exploiting Java Card&#8217;s limitations on dynamicity.</li>
<li>Specialized instruction set. This may be considered as a special kind of optimization, but Java Card uses a specific instruction set, which includes in particular a few combined instructions that make programs smaller. This path has definitely not been fully exploited in Java Card.</li>
<li>Enhanced provability. Java binaries are verifiable, and Java Card could benefit from specific verifications, for instance related to the management of objects. However, Java Card has not exploited this at any point, and bytecode verification has remained more of an issue throughout the years.</li>
</ul>
<p>On the opposite, from my biased point of view, the only reason to use class files would be to use the same format as anybody else. But since we are not running the same programs, what is the point? Well, there is at least one: with class files, there wouldn&#8217;t be a debate about the suitability of bytecode verifiers, as no one  is discussing the fact that the Java bytecode verifier is correct.</p>
<p>So, I hope that in the future, the CAP file remains, and that it evolves to integrates more aggressive optimizations, as well as a more sophisticated set of analyses that leverage the specific nature of Java Card code.</p>
<h2>Interoperability vs.  differentiation</h2>
<p>This has been a recurrent discussion item at the Java Card Forum.  What should be standardized, and what should be left as differentiators between the actors. Here are a few interesting topics here:</p>
<ul>
<li><em>Basic functionality should be interoperable</em>. That&#8217;s been OK for a long time, and nobody dared going back on that one, at least officially. However, there have been some tensions there, in particular around SIM Toolkit. With proactive commands, it is possible to interrupt the execution of a SIM Toolkit routine while waiting for a response from the mobile, and during that time, other commands can be processed. This suspension mechanism, which is essential to the SIM Toolkit spec, has never been formalized in the Java Card platform, leaving an obvious interoperability gap.</li>
<li><em>Performance is for differentiation</em>. Another obvious one, although vendors have regularly stymied any effort to define a benchmark for Java Card, like the Mesure project. Performance is a differentiator, but it is better not to measure it correctly.</li>
<li><em>Size is for differentiation</em>. That sounds obvious too, but it has led to barrels of fun in real life. Obviously different platforms, even when running on the exact same chip, don&#8217;t occupy the same space, so the space left for applications and their data differs. Well, that&#8217;s expected, and totally static, so it can easily be considered. Things get more fun when we get to objects. Platforms use headers of different sizes, they don&#8217;t implement redundancy in the same way, the don&#8217;t manage memory in the same way. In the end, the same set of objects doesn&#8217;t occupy the same memory space on two different platforms, and this has been a great issue when cards are almost full.</li>
<li><em>Security is not much for differentiation</em>. At first, this looks like a good opportunity for differentiation, as vendors want to be able to claim that their products are &#8220;more secure&#8221; than their competitor&#8217;s products. As an evaluator, I noticed the wide differences in security features between the products, and implicitly supported this view. I now believe that standards are more important for security than differentiation. If we consider the mobile payment vertical, some people will claim that the combination of private platform certifications by Visa and others and of formal Common Criteria certifications bring the desired level of interoperability. Yet, in many cases, certification authorities want to see an application certified on every target platform, and rightly so, because the various platforms do not provide the same guarantees on individual functions; they globally achieve the desired global level of security, but they protect individual functions differently. In order to reduce this, I have pushed for security interoperability to be included in Java Card for many years, first by defining security annotations, and more recently by defining dedicated security APIs. The Protection Profile for Java Card 3.0.5 has not been released yet, so I can&#8217;t tell for sure, but I am afraid that the measures included in the latest specification will still not be sufficient to provide sufficient interoperability.</li>
</ul>
<p>Another interesting thing about interoperability, as we are moving to a world where Java Card may be used on very different platforms: When we defined the Connected Edition, it was very different from the Classic Edition, but we nevertheless stated very stringent interoperability requirements: All Classic applications must run on a Connected platform.</p>
<p>As we may be moving toward another split of Java Card platforms with the rise of RAM-based platforms, I would like to see less stringent requirements. If we consider that Java Card Next will include a Classic and a RAM edition, I would require the following:</p>
<ul>
<li>Java Card Next Classic is just the next version following Java Card 3.0.5 Classic. Therefore, backward compatibility must be strict: all Java Card 3.0.5 Classic applications must run unchanged on a Java Card Next Classic platform, even without a recompile.</li>
<li>Java Card Next RAM is a new platform. Applications developed specifically for this platform are only expected to run on that platform.</li>
<li>Java Card Next Classic and Java Card Next RAM must be interoperable. It must be possible to write an application that runs on all Java Card Next platforms (Classic and RAM).</li>
</ul>
<p>For an application provider, this would mean that the following options are available:</p>
<ul>
<li>Keep existing applications, and only support their deployment on Java Card Next Classic platforms (in addition to all previous Classic platforms). This could for instance make perfect sense for payment cards or identity cards, which will remain based on classical smart card chips.</li>
<li>Write new applications specifically for the RAM platform, and only run them on Java Card Next platforms. This is suitable for applications without a strong history, which need to leverage the specific features of RAM platforms, for instance on a mobile TEE.</li>
<li>Rewrite/write applications that work on both platforms. This is suitable for new applications that target a wide range of devices, like in IoT, where the same application coudl run on many different architectures.</li>
</ul>
<p>Interoperability discussions are among the most obscure and technical in the Java Card community. It is a bit like politics: it is very easy to make broad statements that sound definitive, but reality is closer to economics, very complex and requires a deep technical understanding (and like economics, it is not a hard science, so debates can be very long). I&#8217;ll miss these discussions.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2016/05/12/inside-java-card-from-apdus-to-cap-file-and-interoperability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Card, a farewell</title>
		<link>http://javacard.vetilles.com/2016/05/09/java-card-a-farewell/</link>
		<comments>http://javacard.vetilles.com/2016/05/09/java-card-a-farewell/#comments</comments>
		<pubDate>Mon, 09 May 2016 11:54:08 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[Discussions]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[Java Card 2.x]]></category>
		<category><![CDATA[Java Card Bandol]]></category>
		<category><![CDATA[Java Card]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/?p=25865</guid>
		<description><![CDATA[My Oracle story has ended, and with it my Java Card story, at least for now. I started working on the technology in February 1997, and I have never been very far from the technology for almost 20 years. However, Java Card is not in the scope of my next job, as I will focus [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>My Oracle story has ended, and with it my Java Card story, at least for now. I started working on the technology in February 1997, and I have never been very far from the technology for almost 20 years. However, Java Card is not in the scope of my next job, as I will focus on embedded and IoT security. I can&#8217;t say that I will never work again on Java Card, but at least I will take a break.</p>
<p>These 20 years have been quite an interesting ride. Java Card is an amazing technology, just as successful as it is understated. Java Card has been deployed on over 15 billion devices since the first deployments in 2000, its deployment numbers have been growing steadily for 15 years. With the current movements in the SIM industry, it is hard to guarantee that this growth will be sustained over the next years, but Java Card is at least guaranteed to have a very fat and very long tail before it disappears.</p>
<p>I will publish a few entries on Java Card, starting here with a few comments on how improbable this success has been over the years.</p>
<h2>An immature technology for an immature industry</h2>
<p>Initial work on Java Card started in 1996 at Schlumberger&#8217;s research team (now part of Gemalto), as all card vendors were looking for solutions to run scripts on smart cards, mostly for supporting the SIM Toolkit framework. At the time, every major vendor had developed a proprietary solution, usually based on an existing programming framework.</p>
<p>In 1997, smart card issuers were starting to ask for interoperability between vendors. The Java Card Forum was founded in the spring as an answer, although few of its members were convinced that it was the way to go forward. Sun Microsystems was invited as owner of the Java technology, smart card vendors became Java Card licensees, and Sun Microsystems took the responsibility of managing the specification and related technologies (reference implementation and compliance kit). Sun didn&#8217;t have any experience about smart cards, and in the first meetings, their representatives clearly showed it. Sun then hired Integrity Arts (a Gemplus spin-off) as consultant, and rapidly acquired them, getting expertise in-house.</p>
<p>Java was not well suited to the smart cards available then. The language was easy to learn, but the virtual machine brought an overhead in both size and performance. At the time, it would have been possible to design a more suitable standard for programming smart cards, but the industry has not been able to organize in order to define such a standard.</p>
<p>Java Card became an API specification rapidly with version 2.0, but this version was short-lived, and quickly replaced by version 2.1, which also included a virtual machine specification, and allowed binary Interoperability between products. At about that time, the mobile operators became really interested, a SIM toolkit API was defined, and the deployment began around 2000.</p>
<p>15 years later, this adoption of a poorly adapted technology by an immature industry has become an asset. Because Java Card was a bit too ambitious at the time, and thanks to the continuing success of the Java language, Java Card has now become a mainstream technology, which in 2015, fits the needs of the smart card market, and is present on most open smart cards, and roughly half of the microprocessor cards sold worldwide. In the end, it pays to be inadapted.</p>
<h2>Mostly an ecosystem</h2>
<p>In the late 1990&#8217;s, the first marketing sentences for Java Card were directly taken from Java, like &#8220;Millions of developers&#8221;, or &#8220;Write once, run anywhere&#8221;. The one specific marketing argument was about &#8220;Running multiple applications on your card&#8221;. Fifteen years later, here is a factual status:</p>
<ul>
<li>Hundreds of developers (tens of expert developers), mostly working for smart card vendors or for a few specialized consulting firms.</li>
<li>Most applications written for a single card, or at least for a single issuer.</li>
<li>Most applications written by a card vendor, and running only on a single vendor&#8217;s cards.</li>
<li>Most cards running a single application.</li>
</ul>
<p>The next question is: why is Java Card still around if it is not used? Well, in fact, it is being used, just not in the ways that people initially planned. In fact, an essential factor in the success of Java Card has been the certification of cards. In many cases, once a card is deployed, there is no (efficient) procedure to update the card to fix a bug or a vulnerability. Therefore, cards are heavily tested before to be deployed, and most vendors require several levels of certification, including a functional certification and a security certification.</p>
<p>These certification processes are costly, both in developer resources and in laboratory fees. Over the years, efficient certification has become an essential aspect of card development, and Java Card facilitated this in several ways:</p>
<ul>
<li>A reference for core functionality. The Java Card specification defines a set of core functions which can then be used to develop applications (cryptography, I/O, storage, appication isolation and sharing). It then becomes possible to test separately these core functions (by evaluating a Java Card platform) and the application using them (by evaluating a Java Card applet). This can lead to economies of scale.</li>
<li>Reference applications. Some issuers and actors, notably Visa, have written reference versions of their applications, which have been thoroughly tested on compliant Java Card implementations. Vendors who use these reference implementations can simplify the certification process.</li>
<li>Building experience beyond developers. Laboratories, certification authorities, security consultants all have worked with many Java Card platforms and applications over the years, and now feel confident about their ability to use, test and certify such cards in different configurations. This is the ecosystem part.</li>
</ul>
<p>In the past few years, the strength of this ecosystem has been a key asset for Java Card, together with the fact that it remains today the dominant platform for defining APIs for smart cards, regardless of the target vertical (once again an ecosystem aspect).</p>
<h2>Not dead, not frozen, just slow and conservative</h2>
<p>Another striking feature of Java Card is its lack of evolution. The core features of the platform have remained vastly unchanged since release 2.1. Several attempts to make the platform evolve have failed over the years:</p>
<ul>
<li>Java Card RMI was introduced with Java Card 2.2, with the objective of making it easier to design new smart card applications, but it was never adopted by the community. Support of Java Card RMI has been optional in the latest releases, and it was close from being deprecated a few times.</li>
<li>Java Card 3.0 Connected was a bolder attempt at reaching new markets, this time arounod Smart Card Web Servers. This specification is very nice, and it defines a Web application model that can be implemented in half a megabyte, all included (OS, VM, Web container, content management, and a few apps). Yet, smart card web servers never caught, and this specification has never been implemented in a real product since its 2009 release.</li>
<li>An annotation framework for security interoperability was added recently, but the industry hasn&#8217;t been able to agree on a semantics for these annotations, and it has not been adopted.</li>
</ul>
<p>In the latest 3.0.5 release, we have attempted to add a few simple things, hoping that they will be adopted, but this will only happen in a while, because of another interesting specificity of Java Card. It takes around a year to develop a new platform after the release of a specification, at least another year to get a full certification (functional and security), and another year to sell, produce and deploy it. That&#8217;s about 3 years between the specification and the actual availability of products.</p>
<p>This development rate partly explains the slow evolution of Java Card. The smart card ecosystem globally evolves very slowly, and to observers who are used to Web-like evolution, it may look life completely frozen. However, it keeps evolving at its specific and very slow rate. Since 2009, Java Card has become much better adapted to contactless cards, it has adopted a number of cryptographic technologies, and a few other features have evolved to follow the evolution of smart card hardware. Such changes are invisible to the non-specialist, but they keep the Java Card framework in synch with smart card technology, and this is what really counts.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2016/05/09/java-card-a-farewell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chip to Cloud, day 2: Java Card, 15 years later</title>
		<link>http://javacard.vetilles.com/2012/09/20/chip-to-cloud-day-2-java-card-15-years-later/</link>
		<comments>http://javacard.vetilles.com/2012/09/20/chip-to-cloud-day-2-java-card-15-years-later/#comments</comments>
		<pubDate>Thu, 20 Sep 2012 12:29:51 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[Java Card 2.x]]></category>
		<category><![CDATA[Java Card]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/2012/09/20/chip-to-cloud-day-2-java-card-15-years-later/</guid>
		<description><![CDATA[Yes, this is my own session, so this is not really live. The idea is here to identify the most important events in the past 15 years of Java Card, and to take a look at the future. So, here are the selected events: 1996, Java on a smart card. That&#8217;s even more than 15 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Yes, this is my own session, so this is not really live. The idea is here to identify the most important events in the past 15 years of Java Card, and to take a look at the future. So, here are the selected events:</p>
<ul>
<li>1996, Java on a smart card. That&#8217;s even more than 15 years ago, and that&#8217;s when some maniacs at Schlumberger&#8217;s Austin lab came up with the crazy idea of putting a Java virtual machine on a microcontroller with under 1k of RAM. It worked, and that was Cyberflex.</li>
<li>1997: the industry organizes. The Java Card Forum is created in April, and the Java Card 2.0 is released, with two demos at Cartes, Cyberflex and GemXpresso. Cyberflex gets the Sesames award that they deserved. Also, Java Card becomes a bit more Java-like, with data stored in objects rather than files, applets, and a few more things.</li>
<li>1998: OpenPlatform is created. OpenPlatform has been created by Visa, as the first initiative from issuers to work on the management of multi-application cards. A spec is rapidly issued, which is the ancestor of today&#8217;s GlobalPlatform Card Specification.</li>
<li>1999: Java Card 2.1 and interoperability. We took more time to release 2.1, because this was <em>the</em> release. The new features include binary interoperability, with the definition of the CAP file, the finalization of the application model, including transient objects and sharing.</li>
<li>1999: The SIM Toolkit API is released. This is the first hit for Java Card, which has been essential to its success in the mobile industry, still present in billions of cards.</li>
<li>2001: SIM Alliance release Interoperability Stepping Stones. This is a major industry forum, representing vendors, issuing a document that removes them a potential differentiation. Interoperability is not just for geeks any more.</li>
<li>2002: Java Card and RMI. This has been a long story, starting with the 1997 Cartes demo by Gemplus. Five years later, RMI gets in the Java Card spec as a mandatory feature, allowing Java Card developers to go beyond APDUs. Or not.</li>
<li>2009: Java Card 3.0, Connected Edition. That&#8217;s the end of a cycle in which we add more and more features. Starting in 2002 from forecasts of 1Mb chips in 2006 and a big need for content on cards, we went to high-speed communication, better VM, and a Web server. In the end, we had an iPhone, and rather small chips. And enough new features to last for 10 years.</li>
<li>2001: The first CC certificate. The Vocable was a bit crazy. Launched in 2000, the idea was to get a Common Criteria certification for a Java smart card. It was highly experimental, training the evaluation lab Serma about Java software, even discussing principles with the certification authority. But it worked, and we got the certificate. Certification matters.</li>
<li>2003: The Java Card Protection Profile. This initiative has defined a common base for the certification of Java Card products, and one of the most commonly used PPs, even today. It has also helped us grow a security ecosystem around the security of Java Card.</li>
<li>2010: EMVCo certifies a Java Card platform. It took a long time to convince issuers that it was interesting to certify platforms as well as applications. What got them there is NFC, because they now have to share a platform selected by others. And this is a great move ahead, because it is a first step toward security interoperability. We are not there yet, but Java Card is slowly getting there.</li>
<li>2009: NFC wallets require Java Card. This is important, because NFC is the first market in which Java Card is an obvious choice. Nobody has discussed this choice, since interoperability and openness are key properties. A very strong use case for Java Card.</li>
<li>2012: Embedding the card. With M2M and NFC embedded secure elements, there are talks about embedding Java Card. Once again, this is a strong use case, as the ability to add or update applications is important in this context. In a riskier move, I can mention eUICC, although network operators don&#8217;t like this much. The big news about embedded? It changes the control of the secure element, giving more power to device vendors, and taking it away from issuers.</li>
<li>2015: The Internet of Things. That&#8217;s a natural step. Everybody is talking about these billions of connected devices. At least some of them will need security, and Java Card will be around to provide this. It is recognized, and not linked to a single technology.</li>
<li>2020 and beyond: The security subsystem. That&#8217;s a bit far to bet on form factors, and I don&#8217;t know if secure elements will still be around, if they will be integrated in the main chipsets, or if software only will be needed, but I am convinced that a security subsystem will be around, and Java Card is a good candidate to run on it. Why? Because Java Card is small and constrained, but it is also provable in many ways, and can be evaluated with high assurance levels. And in security terms, these things matter.</li>
</ul>
<p>To conclude, what is happening today? Well, Java Card security is drawing some interest from the research community, and we are seeing great results. For instance, Guillaume Barbu has done great work in his Ph.D. thesis about logical attacks and countermeasures. More work is happening at Limoges, Nijmegen, Royal Holloway, and more. Students who work on that then get jobs at evaluation labs, and we got presentations from Emilie Faugeron and Jean-Baptiste Machemie about new evaluation offers.</p>
<p>Of course, Java Card is everywhere around NFC, and it was present, explicitly or implicitly, in most presentations I saw from the NFC World Congress.</p>
<p>Finally, a personal note or this blog. I have been personnally involved almost full time on Java Card fornthe past 15 years, and I participated in a way or another to most of the events noted here, except of course the initial idea from the Schlumberger guys. I am very proud of everything we have achieved during these years, and I hope that many more people are just as proud of this  success. After all, over 10,000,000,000 cards with Java Card have been produced, and this is a big number. Actually, I don&#8217;t know of any application framework that can show such numbers. So thank you everybody, and let&#8217;s continue for 15 more years!</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2012/09/20/chip-to-cloud-day-2-java-card-15-years-later/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java Card is 15 years old</title>
		<link>http://javacard.vetilles.com/2011/11/05/java-card-is-15-years-old/</link>
		<comments>http://javacard.vetilles.com/2011/11/05/java-card-is-15-years-old/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 22:31:46 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Java Card]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/?p=767</guid>
		<description><![CDATA[I just realized that I missed Java Card&#8217;s 15th birthday. This birthday was sometime in the end of October, 1996. I don&#8217;t have the exact date, because the only document I have is the Java Card API: Specification of the Java Virtual Machine and Application Programmer&#8217;s Interface, version 0.13, dated October 10, 1996. Although this [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I just realized that I missed Java Card&#8217;s 15th birthday. This birthday was sometime in the end of October, 1996. I don&#8217;t have the exact date, because the only document I have is the <em>Java Card API: Specification of the Java Virtual Machine and Application Programmer&#8217;s Interface</em>, version 0.13, dated October 10, 1996.</p>
<p>Although this draft was officially authored by Sun Microsystems, Schlumberger played an important role there. This is why I am quite sure that the spec was released at the end of the month, since one of Schlumberger&#8217;s main patents on the topic was filed on October 25, 19996. The main topic of <a href="http://www.google.com/patents?id=ZrsIAAAAEBAJ" class="liexternal">this patent</a> is to use a high-level language to program a microcontroller, and it claims in particular the transformation of a class file into a more optimized format. Quite a good idea, at least sufficient to include this patent in the <a href="http://www.scribd.com/doc/40113431/Gemalto-sues-Google-HTC-Samsung-and-Motorola" class="liexternal">suit against Google</a>&#8216;s Android (which may be a proof that Android is yet another derivative of Java Card).</p>
<p>Good idea, but everybody trying to fit something on a card was ddoing just the same. The really brilliant idea was not to generate an optimized format, but to believe that it would be possible to start from something as different as Java. This was brilliant at the time, especially since in 1996, Java was definitely not mainstream technology, and was often considered as too expensive or too slow even on a PC. Now, that&#8217;s something for which the guys in Schlumberger can be congratulated.</p>
<p>Of course, they were not the only ones to try fitting unlikely things into a smart card. Researchers in Gemplus were more focused on object oriented technology, in particular Corba. And naturally, they needed to think about optimization in order to fit this into a card. They were  using Forth as their base language for the Combo virtual machine. Even before that, as mentioned in this <a href="http://www.scribd.com/doc/61011453/59/A-Short-History-of-Byte-Code-Interpreters-on-Smart-Cards" class="liexternal">history of bytecode interpreters for smart cards</a>, researchers at RD2P designed a bytecode interpreter, as early as 1990 (I can&#8217;t even imagine the memory sizes of cards at that time; if somebody knows, please leave a comment).</p>
<p>Now, the interesting part is that a patent has been filed in France (sorry, <a href="http://fr.espacenet.com/publicationDetails/biblio?locale=fr_FR&#038;DB=fr.espacenet.com&#038;adjacent=true&#038;locale=fr_FR&#038;return=true&#038;FT=D&#038;date=19920327&#038;CC=FR&#038;NR=2667171A1&#038;KC=A1" class="liexternal">in French only</a>). And one of the key elements of this patent was the fact that the programs are later compiled for the specific embedded  virtual machine.</p>
<p>Not quite Java Card, though, because the patent only mentioned direct compilation from source code, not using an intermediary format (<em>a.k.a.</em> Java class file). The difference is slim, and I would be tempted to credit the French guys with the invention of optimized smart card code. However, there is something that the Schlumberger guys did much better: timing. The French patent, filed in 1990, was never extended into an international patent, whereas the American patent has been extended and mainained to this day.</p>
<p>As a final trivia note, did you smile when I mentioned that Android was a derivative of Java Card? Well, very indirectly, but somehow, a little bit. Java Card, after being initiated by Schlumberger, was maintained by Sun Microsystems. Sun&#8217;s Java Card team later convinced Sun to develop a slightly larger VM, the KVM, to address very small devices. This VM was then extended into MIDP, which became the leading platform for phones. And everybody knows that the Android team includes a number of ex-Sun employees who used to work on MIDP. So, yes, indeed, Android a a distant heir of Java Card.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2011/11/05/java-card-is-15-years-old/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Live from Smart Event: Java Card 3.0 objectives</title>
		<link>http://javacard.vetilles.com/2009/09/22/live-from-smart-event-java-card-30-objectives/</link>
		<comments>http://javacard.vetilles.com/2009/09/22/live-from-smart-event-java-card-30-objectives/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 08:42:31 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[Java Card Bandol]]></category>
		<category><![CDATA[Smart University]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/?p=446</guid>
		<description><![CDATA[Last night, I was preparing an introduction for the Smart University session on Java Card 3.0, and I was looking for Java Card Forum material that would somehow prove how early the work started on that topic. I was expecting something around 2003-2004. I first noticed that in 2004, we already had a first architecture [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Last night, I was preparing an introduction for the Smart University session on Java Card 3.0, and I was looking for Java Card Forum material that would somehow prove how early the work started on that topic. I was expecting something around 2003-2004. I first noticed that in 2004, we already had a first  architecture document, so I looked at earlier meetings. After a while, I found some slides from April 2002, in a meeting in Yokohama.</p>
<p>The slides were about requirements, and there was one particular slide providing high-level guidelines.</p>
<div id="attachment_447" style="width: 310px" class="wp-caption aligncenter"><a href="http://javacard.vetilles.com/wp-content/uploads/2009/09/yokohama-objecive.png" class="liimagelink"><img src="http://javacard.vetilles.com/wp-content/uploads/2009/09/yokohama-objecive-300x224.png" alt="JCF high-level guidelines for JC3.0" title="yokohama-objecive" width="300" height="224" class="size-medium wp-image-447" /></a><p class="wp-caption-text">JCF high-level guidelines for JC3.0</p></div>
<p>I was quite amazed when I found this slide, because it is so close to reality. Let&#8217;s look at in more details.<br />
<span id="more-446"></span></p>
<ul>
<li>Reduce delta between Java and Java Card. That was already an objective, and that objective was clearly met. Even though some issues remain, Java Card 3.0 is much closer to Java than the previous versions were.</li>
<li>Enhance the programmer experience. That item is interesting, and reminds us of the nature of the Java Card Forum. We are a technical-oriented forum, which focuses more on developers than on users. We changed that a bit in the following years, with more focus on end users, as we introduced the Web server interface, a clear successor to the text-based SIM Toolkit user interface.</li>
<li>Fully exploit the 32-bit platform. Check. that was one of the starting points, and we of course achieved that. The Connected Edition explicitly targets 32-bit platforms.</li>
<li>Keep an eye on the footprint. Uh oh. I knew it! Footprint was already identified as an issue to track. We did, and we still do, as some detractors are saying that Java Card 3.0 is bloated. I don&#8217;t agree, but this deserves a full post.</li>
<li>Become <strong>THE</strong> computer. OK, this is our &#8220;rule the world&#8221; moment; I am not sure that we made that, but we are getting closer to that main objective.</li>
<li>Assumption: forget about 8-bit? Yes and no. The Connected Edition will not work on a 8-bit card, but we also have kept the Classic Edition, which will allow us to keep issuing traditional Java Card cards with small memory and 8-bit processors.</li>
</ul>
<p>A lot of things are already present. The only thing missing, which will take a while to arise, is the Web server. Other than that, the guidelines were not that bad. Nevertheless, it took us seven more years to get a finalized specification out.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2009/09/22/live-from-smart-event-java-card-30-objectives/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Large Card Collider</title>
		<link>http://javacard.vetilles.com/2008/09/10/large-card-collider/</link>
		<comments>http://javacard.vetilles.com/2008/09/10/large-card-collider/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 21:53:55 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[delay]]></category>
		<category><![CDATA[Java Card]]></category>
		<category><![CDATA[LHC]]></category>
		<category><![CDATA[SSC]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/2008/09/10/large-card-collider/</guid>
		<description><![CDATA[Today, CERN&#8217;S Large Hadron Collider has started working for the first time. It is not collecting data yet, but when it will, it will generate 300 Gb/second, requiring a significant amount of computing resources. This raw input will be filtered locally into a more reasonable stream of 300Mb/second. That stream will be again processed at [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Today, CERN&#8217;S <a href="http://en.wikipedia.org/wiki/Large_Hadron_Collider" rel="nofollow" class="liwikipedia">Large Hadron Collider</a> has started working for the first time. It is not collecting data yet, but when it will, it will generate 300 Gb/second, requiring a significant amount of computing resources. This raw input will be filtered locally into a more reasonable stream of 300Mb/second. That stream will be  again processed at the CERN data center, and reduced again before to research centers across the world. Even then, dedicated 10Gb/s links will be required in order to move around 40Tb of data every day.</p>
<p>Even by today&#8217;s standards, these numbers are staggering, and a 10Gb/s link remains 1,000 times higher than the bandwidth that we experience every day. But the really amazing thing is that the initial design of the computers that handle all this data at CERN was made 15 or 20 years ago, when the project started.</p>
<p>In 1988, I was an assistant in an American supercomputing research center, and some researchers there got the mission to make initial designs for the computers that would handle LHC&#8217;s American competitor, SSC<a href="http://en.wikipedia.org/wiki/Superconducting_Super_Collider" rel="nofollow" class="liwikipedia">. Both the research center and the accelerator have failed since then, but I found an interesting definition of that piece of work on a <a href="http://www.hep.net/ssc/new/history/factsheet.html">SSC fact sheet</a>:</p>
<blockquote><p>
In concert with industry, the SSC Laboratory is designing ultra fast parallel computing systems capable of processing <em>the equivalent of 10,000 floppy disks of data every second</em>. This cooperative effort is expected to facilitate the entry of high performance electronics into the commercial marketplace.
</p></blockquote>
<p>10,000 floppy disks is around 14Gb, which means that the estimates were off by a factor 20. It looks large, but it&#8217;s not that bad. Back then, this number was enormous, as the size of hard drives was still measures in megabytes, and even our largest supercomputer (an <a href="http://en.wikipedia.org/wiki/ETA10" rel="nofollow" class="liwikipedia">ETA-10</a>, the world&#8217;s fastest at the time) was only running at a cool 200MHz. Despite this discrepancy between the resources available in 1988 and the target computer (then set for 2003, 15 years later), the scientists determined that, if Moore&#8217;s Law remained valid, it would be possible to handle such an enormous amount of data. They even provided blueprints for such a system.</p>
<p>On a smaller scale, people who design standards often face the same issue. Between the time work starts on a standard and the time it becomes a mainstream product, several years often have passed. Standard designers must take that parameter into account from day 1. This is a tough job, and it is even tougher in &#8220;extreme&#8221; industries, where the constraints are strong. Supercomputing is at one end of the spectrum, and smart cards are at the other end.</p>
<p>The trade-off is not that simple to make. If we underestimate the evolution of computing power, we limit the possible exploitation of the nex technology, and hence, its value. On the other hand, if we overestimate the evolution of womputing power, we may end up with a technology that cannot be mapped into products (because whatever we designed does not fit on a smart card chip).</p>
<p>When we started the work on Java Card 3, I was afraid to be exactly in that situation. I gradually changed my mind, although I still have a little voice that tells me that we could have done a bit more on the optimization side. Well, as of today, the technology can be implemented, which is good news. However, it requires the largest chips available on the market (<em>i.e.</em>, the most expensive). The software is not cheap, either, because Java Card 3 is the largest smart card system around (<em>i.e.</em>, the most expensive).</p>
<p>The next step is to transform the technology into successful products. There are usually two ways to do that, but here, we most likely will have to combine them: first, we have to make the added value of the product visible, in order to convince our customers to pay more (at least for the software), and then we have to wait a little in orer to let the price of chips go down.</p>
<p>This may look difficult, but it is definitely achievable. The history of smart cards include plenty of products that were at some point too large, too expensive, or both. And in many cases (Java Card, SIM Toolkit, and others),  these technologies often ended up in millions (or billions) of cards.</p>
<p>The hard part is that we now face a few years of hard work promoting Java card 3, making good products, and finding good applications. And only then, there will be another successful product on that list. </p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2008/09/10/large-card-collider/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A few cards</title>
		<link>http://javacard.vetilles.com/2008/09/06/a-few-cards/</link>
		<comments>http://javacard.vetilles.com/2008/09/06/a-few-cards/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 13:18:52 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[cards]]></category>
		<category><![CDATA[GemXpresso]]></category>
		<category><![CDATA[pictures]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/2008/09/06/a-few-cards/</guid>
		<description><![CDATA[The picture below is the face of the first GemXpresso card produced at Gemplus, for the Cartes 1997 demo. Those were not the firts Java Card cards (those would have to be Cyberflex cards), but they were the first cards compatible with Java Card 2.0. If you look at it in detail, you can see [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>The picture below is the face of the first GemXpresso card produced at Gemplus, for the Cartes 1997 demo. Those were not the firts Java Card cards (those would have to be Cyberflex cards), but they were the first cards compatible with Java Card 2.0.</p>
<p><center><a href="http://javacard.vetilles.com/2008/09/06/a-few-cards/gemxpresso-blue/" rel='attachment wp-att-146' title='GemXpresso blue' class="liimagelink"><img src='http://javacard.vetilles.com/wp-content/uploads/2008/09/gemxpresso-blue.thumbnail.jpg' alt='GemXpresso blue' /></a></center></p>
<p>If you look at it in detail, you can see that, although the demo was quite hot during the show, we did not get the hottest card design available. The motto, <em>The power of Java in your pocket</em>, is not that great. But still, we were very proud of them.</p>
<p>Another thing that we were very proud of was our demo. There were actually several demos showing, and one of them was showing off the wonders of RMI on smart cards, using actual code, and wonderfully interactive windows. Here is one of them:</p>
<p><center><a href="http://javacard.vetilles.com/2008/09/06/a-few-cards/invoking-a-method-with-the-original-gemxpresso/" rel='attachment wp-att-149' title='Invoking a method with the original GemXpresso' class="liimagelink"><img src='http://javacard.vetilles.com/wp-content/uploads/2008/09/gxpinvok.thumbnail.gif' alt='Invoking a method with the original GemXpresso' /></a></center></p>
<p>Now that I think of it, this demo was really daring, and there haven&#8217;t been many demos like that at Cartes. Even for Java Card 3, Gemalto has show some cards at Cartes, but their demo was focused on applications, not on code. Only Oberthur had a demo with JSP technology that was based on the same idea: yes, we made this technology fit in a smart card. And I loved it.</p>
<p><span id="more-147"></span></p>
<p>Gemalto, though, has shown other demos with code, but not at Cartes. For instance, we have seen some demos with code last May at JavaOne, and it felt great. I don&#8217;t have screen dumps for these demos, but I can still show you the design of the card:</p>
<p><center><a href="http://javacard.vetilles.com/2008/09/06/a-few-cards/gemalto-jc3/" rel='attachment wp-att-148' title='Gemalto JC3' class="liimagelink"><img src='http://javacard.vetilles.com/wp-content/uploads/2008/09/gemalto-jc3.thumbnail.jpg' alt='Gemalto JC3' /></a></center></p>
<p>I don&#8217;t know if they did it on purpose, but it strangely resembles the original GemXpresso card, with a blue background and a yellow-orange area for the motto. In the inside, however, things were quite different, ajd just as innovative.</p>
<p>I will try to bring more pictures of &#8220;historical&#8221; cards and other material. Because of my CV, I have more information about Gemplus cards, but I would welcom bits of histories from other companies of the time, like Schlumberger, Delarue, and others.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2008/09/06/a-few-cards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 years ago: Java Card 1.0 on JavaWorld</title>
		<link>http://javacard.vetilles.com/2008/01/10/10-years-ago-java-card-10-on-javaworld/</link>
		<comments>http://javacard.vetilles.com/2008/01/10/10-years-ago-java-card-10-on-javaworld/#comments</comments>
		<pubDate>Thu, 10 Jan 2008 21:03:46 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/2008/01/10/10-years-ago-java-card-10-on-javaworld/</guid>
		<description><![CDATA[At the end of 1997 and at the beginning of 1998, and around the release of Java Card 2.0, JavaWorld ran a series of articles on Java Card. Most of these articles were written by Sun employees, and in particular Rinaldo di Giorgio, Zhiqun Chen, and Arthur Coleman. These articles are interesting, because they show [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>At the end of 1997 and at the beginning of 1998, and around the release of Java Card 2.0, <a href="http://www.javaworld.com/" class="liexternal">JavaWorld</a> ran a series of articles on Java Card. Most of these articles were written by Sun employees, and in particular Rinaldo di Giorgio, <a href="http://www.amazon.com/Java-Card-Technology-Smart-Cards/dp/0201703297/" class="liexternal">Zhiqun Chen</a>, and Arthur Coleman. These articles are interesting, because they show Sun&#8217;s point of view from 10 years ago, which is great. I will therefore post a few comments on these articles.</p>
<p>Browsing through the articles, I found that one of them was in fact about writing program for the original Cyberflex, based on the Java Card 1.0 specification (BTW, I am still desperately looking for a PDF of that spec). As first things come first, I will start by commenting this piece of Java Card history.</p>
<p>The article is titled <a href="http://www.javaworld.com/javaworld/jw-02-1998/jw-02-javadev.html" class="liexternal">Get a jumpstart on Java Card</a>, and it was written by Rinaldo di Giorgio. It describes the Cyberflex card, and provides a few hands-on examples of Java Card applications.</p>
<p>I can&#8217;t resist copying a small program here, so here is their second example, which will verify a CHV (PIN code):</p>
<pre>
public class Verifchv {

// Constants used throughout the program
static final byte ACK_CODE = (byte)0;
static final byte BUFFER_LENGTH = 32;
static final byte ISO_COMMAND_LENGTH = (byte)5;

public static void main () {

// Reset the RST bootstrap pointer to the ROM bootstrap
     _OS.Execute((short)0, (byte)0);
    byte bReturnStatus; 

      byte pbuffer[] = new byte[ISO_COMMAND_LENGTH];
      byte dbuffer[] = new byte[BUFFER_LENGTH];



 /////////////////////////////////////////////////////////
 //  Look for a message that contains the correct key
 /////////////////////////////////////////////////////////

 while (true) {
        // Command w/ right chv is 
        // pBuffer = C0 20 00 01 08
        // dBuffer = 48 49 4A 4B 4C 4D 4E 4F
            _OS.GetMessage(pbuffer,
                           ISO_COMMAND_LENGTH, ACK_CODE);

        bReturnStatus =
           _OS.VerifyCHV(pbuffer[3], dbuffer, (byte)0x00);
        _OS.SendStatus((byte)bReturnStatus);
        ///////////////////////////////////////////////
        // Give the user access and/or data based
        // on success or failure of the CHV
        ///////////////////////////////////////////////
        }
    }
}
</pre>
<p>Well, that&#8217;s quite different from what we know today. Let&#8217;s comment a few of the important pars of it.</p>
<pre>
public class Verifchv {
</pre>
<p>That&#8217;s from far the most significant part of the code. It reminds us that we are looking at a Java program, not a native program. The most important contribution of Cyberflex and Java Card 1.0 has been to show that the Java Virtual Machine could run on a smart card, even with very small memory. This was really innovative: remember that, at that time, Java mostly consisted of applets, running on workstations. Even Java ME did not exist (in fact, Java ME is an an indirect consequence of Java Card, but this is another story). Thinking that this big system could run on a card was a great idea.</p>
<pre>
public static void main () {
</pre>
<p>Java Card 1.0 is Java, but only for the virtual machine. Because of size and performance constraints, everything is basically static in this specification, so the source code ends up looking a lot like C code.</p>
<pre>
 while (true) {
</pre>
<p>At the heart of a Java Card 1.0 program, there is an infinite loop. This loop is still here, but it is now part of the JCRE. These first applications completely controlled the card, just like a native program would. An application would only release control to the system through a specific API.</p>
<pre>
bReturnStatus =
     _OS.VerifyCHV(pbuffer[3], dbuffer, (byte)0x00);
</pre>
<p>In Java Card 1.0, the operating system also kept the traditional structure of a smart card OS, based on <a href="http://en.wikipedia.org/wiki/ISO_7816" rel="nofollow" class="liwikipedia">ISO 7816</a>, file systems, <em>etc</em>. We see here an example, with a function that performs a VERIFY CHV command.</p>
<p>The article also shows that the Cyberflex defined many features that were really innovative:</p>
<ul>
<li>It introduces the notion of conversion of class files to an optimized format, through a post-processor.</li>
<li>It introduces the notion of multiple entities represented on a card to manage applications.</li>
</ul>
<p>At the end of the day, this article reminds us that Java Card 1.0 has been a very significant contribution to the history of smart card, and Schlumberger&#8217;s Austin team should get full credit for that. It also reminds us that innovation is a stepwise process, that it takes a long time to build a new system and to get past the existing technology, and that Java Card 2.0 also was an important step ahead.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2008/01/10/10-years-ago-java-card-10-on-javaworld/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Happy Birthday, Java Card 2.0 !</title>
		<link>http://javacard.vetilles.com/2007/10/13/happy-birthday-java-card-20/</link>
		<comments>http://javacard.vetilles.com/2007/10/13/happy-birthday-java-card-20/#comments</comments>
		<pubDate>Sat, 13 Oct 2007 20:03:31 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[Java Card 2.x]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/2007/10/13/happy-birthday-java-card-20/</guid>
		<description><![CDATA[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 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>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.</p>
<p>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.</p>
<p>There were also quite a few differences:</p>
<ul>
<li>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.</li>
<li>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.</li>
<li>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.</li>
<li>There were three kinds of transient objects, including &#8220;APDU&#8221;-scope objects. This scope later disappeared, although it has a clear use case for security.</li>
<li>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.</li>
</ul>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2007/10/13/happy-birthday-java-card-20/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java Card 2.0</title>
		<link>http://javacard.vetilles.com/2007/09/28/java-card-20/</link>
		<comments>http://javacard.vetilles.com/2007/09/28/java-card-20/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 20:39:16 +0000</pubDate>
		<dc:creator><![CDATA[Eric Vétillard]]></dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://javacard.vetilles.com/2007/09/28/java-card-20/</guid>
		<description><![CDATA[I finally found some of the original Java Card 2.0 specifications. It was not all that straightforward, but globally, it was not that difficult, and I should have found all that earlier. The first interesting is that there still is a Java Card 2.0 product page on Sun&#8217;s web site. Most of the content is [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I finally found some of the original Java Card 2.0 specifications. It was not all that straightforward, but globally, it was not that difficult, and I should have found all that earlier.</p>
<p>The first interesting is that there still is a Java Card 2.0 <a href="http://java.sun.com/products/javacard/javacard20.html" class="liexternal">product page</a> on Sun&#8217;s web site. Most of the content is gone, because it is supposed to be stored on some javasoft Web site. However, one piece can be saved, the <a href="http://java.sun.com/products/javacard/AppletDevelopersGuide.html" class="liexternal">Applet Developer&#8217;s Guide</a>, which happen to be available in a HTML version.</p>
<p>More interesting, some guy has an image of the Java Card <a href="http://ftp4.de.freesbie.org/pub/misc/languages/java/java.sun.com/javacard/" class="liexternal">FTP repository</a> around the end of 1997, including Godfrey Di Giorgi&#8217;s release notes for an intermediary release. Actually, the guy has a complete mirror of the ftp.javasoft.com site, with a lot of fun memories.</p>
<p>I will come back to the content of these specs and the amazingly fast work we did 10 years ago (a full spec produced and published in under 6 months), hopefully before the 10th anniversary of the Java Card 2.0 official release.</p>
]]></content:encoded>
			<wfw:commentRss>http://javacard.vetilles.com/2007/09/28/java-card-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
