* Engine changes:
 * Merge in JIT4
 * Merge in vmgenned interpreter from Cacao
 * JIT must support thread concurrency. 
   Variable must be in thread local storage and not globally visible.
 * Add support for gcj-ed code with BC ABI.
 * Merge in Tom Tromey's libjit and llvm based JITs.
  * libjit targets x86, x86_84, ARM, Alpha
  * llvm has jit targets for X86, X86-64, PowerPC and PowerPC-64
  * gnu lightning targets x86, PowerPC32, AMD64, Sparc32
  * tinycc targets linux-arm, linux-x86, win32-x86 and c67
   * We could use libjit & try to fiddle in llvm, and the rest into it as backends.
   * libjit could use a vmgenned interpreter, too.

* Cleanup
 * Remove KAFFE_CFLAGS
 * Remove kaffe's copies of jni.h, jni-md.h, etc. Use GNU Classpath's headers instead.
    Also remove the config-int.h generation now that we are using C99.
 * Look into removing the logging.properties file in libraries/javalib.
 * cleanup JNI library loading to use libltdl exclusively.
 * Remove unused instructions from jits (nop, unimplemented)
 * Use CScout http://www.spinellis.gr/cscout/doc/indexw.html to weed out unused symbols.

* Architectural changes:
 * Make threading model runtime selectable.
 * Make runtime engine runtime selectable
 * Make gc backend runtime selectable
 * Make boehm-gc the default engine on platforms that support it
 * Use libltdl directly for JNI, remove wrappers.
 * Swich to glib for data structures, command line option parsing, etc.
  * debug logging (alternative would be GNU nana)
  * command line option parsing (our manual code in main.c is rather ugly)
  * data structures (no need to have our own hashtable, lists, etc.)
  * fixed size types (without requiring c99, allowing to simplify gtypes, etc.)
  * atomic functions (which we're now copying and pasting from gnu libc,
    and Guilhem is no longer around to maintain them)
  * string & utf8 utility functions (allowing us to throw away the implementation in kaffe)
  * timers & counters (making the stats module leaner)
  * and various little portability/utility functions
 * Switch to libjclassinfo for class file parsing
  * Switch to libzzlib for zip file reading first to be able to kill the syscall
    interface in the threading code.
    * findInJar is a bit trickier, as it also deals with directories, regular classes
      etc. Maybe it can be largely rewritten in Java in the VMClassLoader? 
      Alternatively, use zziplib's transparent file access to access class files,
      directories and zip files.

* Missing features
 * Implement support for extension override mechanism, and allow overriding
   with older versions of APIs as well, which is needed for DOM.
 * Implement hooks for annotations from GNU Classpath.
 * Implement hooks for JMX from GNU Classpath.
 * Implement hooks for JVMTI from GNU Classpath. 

* Integration issues
 * Remove jikes from checked compiler list. Otoh, it's the only real option on Cygwin atm. 
   So the answer is probably to avoid having any 1.5+ Java code in vmreference, and to avoid
   any deviation from Classpath's VM interface.
 * Update java.lang.ref vminterface to latest version.
 * Switch over to GNU Classpath's javah and remove kaffeh
  * Replace native library code using KNI with code using JNI

* Unmerging work
  * Remove old Kaffe AWT implementations

* Merging work:
  * sun.misc.Unsafe native implementation from openjdk/cacao for full jsr166 support.
  * verifier from gcj (rob gonzalez)
  * SkyOS port

* Build system: (dalibor)
  * Remove convenience libraries (gc, engine, threading) and make them part of libkaffe_la_SOURCES
  * Remove symlinked files, and replace them by adding the 'right' file to SOURCES
  * make sure all noinst_HEADERS are part of _SOURCES.
  * Use AS_IF and AS_CASE all over the configure script.
  * Non-recursive build, single Makefile.am for kaffe.
  * Switch to autotest for the test suites

* Pending patches
  classpath's doubleToLongBits (dalibor)
  jit fixes for arm-linux (dalibor)
  amd64 jit from Eric Anholt (guilhem)

