IcedTea ======= The IcedTea project provides a harness to build the source code from openjdk.java.net using Free Software tools and dependencies. IcedTea addresses two problems: it eliminates the build requirement on proprietary build tools and it provides replacements for the "encumbered binary plugs". These plugs are described at http://openjdk.java.net: "Not all of the source code that makes up the JDK is available under an open-source license. In order to build an OpenJDK binary from source code, you must first download and install one or more of the following files from which the build process will copy over 'binary plugs' for these encumbered components." This project uses code from GNU Classpath, code generated during a build of the openjdk.java.net source code, and stub code written by Red Hat, to provide Free Software replacements for these encumbered binary plugs. IcedTea also provides build scripts and patches that allow the source code from openjdk.java.net to be built with IcedTea itself. See INSTALL for build instructions. Homepage (wiki): http://icedtea.classpath.org/ Bugs (bugzilla): http://icedtea.classpath.org/bugzilla Mailing List: distro-pkg-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/distro-pkg-dev FAQ: http://icedtea.classpath.org/wiki/FrequentlyAskedQuestions Anonymous Mercurial checkout: hg clone http://icedtea.classpath.org/hg/icedtea6 Java compatibility ------------------ IcedTea is derived from OpenJDK, Sun's open-source implementation of the Java SE platform. At this time the build from which IcedTea was constructed corresponds to an early build of JDK 7. When JDK 7 is complete it will implement the Java SE 7 Platform Specification. Any APIs in the JDK 7 implementation, whether new or old, are therefore subject to minor adjustments, major revisions, or even outright removal between now and the time that the Java SE 7 Platform Specification is finalized. Please take these facts into account before depending upon IcedTea. Recently, OpenJDK6 was released. This build (IcedTea6) is based on that release. OpenJDK6 is approximately 99% complete in terms of encumberences. IcedTea provides autotools support, a portable interpreter for ppc and ppc64 support, plugin support and Web Start support. How the Stub Replacements were Produced --------------------------------------- To produce the plug replacements, we began by satisfying as many undefined references as possible using code from a completed build of the source code from openjdk.java.net. Then we supplemented the resultant tree with more replacement code from GNU Classpath. Following that, we fixed each remaining build error by creating the simplest possible stub code. A Note About License Headers ---------------------------- Some sources downloaded from openjdk.java.net do not display the GPL license header. Instances are: - The files in openjdk/jdk/src/share/classes/javax/xml/stream/ seem to comprise the BEA-StAX source code http://ftpna2.bea.com/pub/downloads/jsr173.jar with some Sun-specific modifications. We're assuming that Sun is bundling BEA-StAX under the terms of the Apache License 2.0 and that the modifications are owned by Sun. - We are assuming that these files are owned by Sun: openjdk/jdk/src/share/classes/**/resources/*.properties Web Browser Plugin support =========================== The default web browser plugin has LiveConnect support. It will only build against a very recent version of XULRunner, such as that available in Fedora Rawhide as of 2008-05-16. The required development headers are provided by the xulrunner-devel package. A new plugin is being developed to support the new Mozilla API changes. It can be enabled with the option --enable-npplugin, and it is based on gcjwebplugin. At the moment there is no liveconnect support for it. NetX ==== NetX provides a drop-in replacement for javaws (Java Web Start). Since upstream NetX is dormant, we will be hosting and modifying the sources in the IcedTea repository, particularly in the rt/net/sourceforge/jnlp directory. The NetX sources are built into rt.jar IcedTea's NetX currently supports verification of signed jars, trusted certificate storing, system certificate store checking, and provides the services specified by the jnlp API. CACAO as VM =========== The --with-cacao configure option replaces the libjvm.so from Sun's HotSpot with the one from the CACAO VM. This enables the usage of IcedTea on architectures which are not supported by the HotSpot VM, besides the HotSpot zero port. In contrast to the HotSpot zero port, CACAO provides a Just-In-Time compiler for various architectures. The environment variable CACAO_CONFIGURE_ARGS can be used to pass additional arguments to the cacao configure. PulseAudio Mixer ================ Passing --enable-pulse-java to configure will build the PulseAudio Mixer for java. This allows java programs to use PulseAudio as the sound backend. Systemtap support ================= The --enable-systemtap configure option will try to find the systemtap runtime development files (sdt.h and the dtrace python script wrapper), enable compilation of static markers in the hotspot code and install a systemtap hotspot.stp tapset for easy tracing with systemtap's stap utility. The probes are documented in tapset/hotspot.stp. This requires the systemtap-sdt-devel package as build dependency and optionally the systemtap package at run time when the user want to use the tapset to trace java programs. The probes have zero overhead when not used and can safely be compiled in even when not used at runtime. Support for additional VMs ========================== Although IcedTea can be built multiple times to use a different virtual machine, addtional VM's can be built without building the other components multiple times. On architectures where hotspot is available, use --with-additional-vms=cacao,zero (or shark instead of zero) on architectures where only zero (or shark) is available, use --with-additional-vms=cacao to build the additional VM's. It's not possible to build cacao as the default VM, and zero as additional VM. To build zero as the default VM and shark as an additional VM, use --enable-zero --with-additional-vms=shark The additional VM's are available by calling the java with the option `-cacao', `-zero' or `-shark', or by calling the java tools with `-J-<vm name>'. If the build was configured with '--enable-shark', use `-Xint' to just use the zero VM.