\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 under
my supervision. 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 and rewrote the loader, Stefan Ring
improved the MIPS port and did the port to the PowerPC architecture and
implemented native threads with thin locks, Josef Wenninger replaced the
SUN library by the GNU classpath, Edwin Steiner added verification,
Carolyn Oates works class hierarchy analysis and inlining, Christian
Ullrich implemented the linear scan register allocator and Martin Platter
maintained the AWT library. On December 7th 2004 we released version 0.90
the first time as source.

