\chapter{Introduction}

Reinhard Grafl and I do not like coffee. Therefore, our Java virtual machine
could not be named after coffee. We prefer hot chocolate and have chosen to
name our Java virtual machine CACAO [kaukau].

\section{Introduction}

CACAO is a research Java virtual machine. From the beginning it was designed
for 64 bit architectures and was based on a just-in-time compiler. To avoid
two different stack frame formats no interpreter is included. The compiler is
so fast that it does not matter to compile code which is just executed once.
One of the aims of CACAO is to keep the system small and simple which makes
CACAO also well suited for embedded systems. It has been used to explore new
just-in-time compilation techniques, fast program analyses and improvements
for run time systems. Many of our developments turned out to be useful and
had been included in the version of CACAO which we now distribute under the
GNU general public license.

\section{History}

CACAO started as a master thesis by Rainhard Grafl in the year 1996. It
included a JIT compiler
for the Alpha archtecture. It used Sun's library 1.0
and contained the native functions for {\tt lang}, {\tt io}, {\tt util} and
{\tt math}. The first version was running in January 1997. This was the first
Java virtual machine for 64 bit architectures. The binary version 0.1 was made
available for the public on February 14th 1997. Afterwards I started the
developement of the new faster JIT compiler. Multithreading was added by
Mark Probst. Binary version 0.2 was released on September 23rd 1998. On
October 12th 1998 immediately before the PACT conference in Paris we put the
binary release 0.3 on our web server. Within ten days around Christmas 1998
I ported CACAO to the MIPS architecture. In the next four years there was
very little development on CACAO. Christopher Kr\"ugel added array bound check
removal, Phil Tomsich wrote a new garbage collector and Roman Obermaisser
made the change to the Java 1.2 library. In 2003 development became more
intensive. Dieter Th\"urnbeck added inlining, Christian Thalinger did the
port to the x86 and AMD64 architecture, Stefan Ring did the port to the
PowerPC architecture, Josef Wenninger replaced the SUN library by GNU
classpath and Edwin Steiner added verification.

