RFC: JamVM - Taste the New Flavour!
Dr Andrew John Hughes
ahughes at redhat.com
Mon Feb 21 13:22:51 PST 2011
On 21:20 Sat 19 Feb , Xerxes Ranby wrote:
> Greetings!
>
> "JamVM's got a shiny new Git repository, which contains the port to the
> OpenJDK class-library."
> http://draenog.blogspot.com/2011/02/openjdkjamvm-git-repository.html
>
> The attached patch adds Robert Lougher's new JamVM flavour to Icedtea6!
>
> I have tested the patch using the following three configurations on x86_64:
>
> # Built JamVM as the default vm implicit using HS19 makefiles.
> ./configure --enable-jamvm --disable-bootstrap --disable-docs
> make
> ./openjdk.build/j2sdk-image/bin/java -version
> java version "1.6.0_21"
> OpenJDK Runtime Environment (IcedTea6 1.10pre+r70ea35e42b14) (Ubuntu
> build 1.6.0_21-b21)
> JamVM (build 1.6.0-devel, inline-threaded interpreter)
>
> # Built JamVM as the default vm explicit using HS20 makefiles.
> ./configure --enable-jamvm --disable-bootstrap --disable-docs
> --with-hotspot-build=hs20
> make
> ./openjdk.build/j2sdk-image/bin/java -version
> java version "1.6.0_21"
> OpenJDK Runtime Environment (IcedTea6 1.10pre+r70ea35e42b14) (Ubuntu
> build 1.6.0_21-b21)
> JamVM (build 1.6.0-devel, inline-threaded interpreter)
>
> # Built JamVM as an additional vm.
> ./configure --with-additional-vms=jamvm --disable-bootstrap --disable-docs
> make
> ./openjdk.build/j2sdk-image/bin/java -jamvm -version
> java version "1.6.0_21"
> OpenJDK Runtime Environment (IcedTea6 1.10pre+r70ea35e42b14) (Ubuntu
> build 1.6.0_21-b21)
> JamVM (build 1.6.0-devel, inline-threaded interpreter)
>
> Ok to push?
>
See comments below on the --enable-jamvm option.
I'll leave comments on addvm to doko.
I think this should be ok to go in before the 1.10 branch as the changes
to the build are mainly ancillary and don't affect the main options.
> Cheers, and have a great day!
> Xerxes
>
> Index: icedtea6/Makefile.am
> ===================================================================
> --- icedtea6.orig/Makefile.am 2011-02-19 02:26:05.000000000 +0100
> +++ icedtea6/Makefile.am 2011-02-19 20:58:34.000000000 +0100
> @@ -11,6 +11,18 @@
> CACAO_URL = $(CACAO_BASE_URL)/$(CACAO_VERSION).tar.gz
> CACAO_SRC_ZIP = cacao-$(CACAO_VERSION).tar.gz
>
> +# The jamvm-e9b0f82b9c9cfe5e5550f5e77de53ec2fba603a3.tar.gz got fetched from
> +# http://git.berlios.de/cgi-bin/cgit.cgi/jamvm/snapshot/jamvm-e9b0f82b9c9cfe5e5550f5e77de53ec2fba603a3.tar.gz
> +# Unfortunally the generated .tar.gz by the berlios cgit snapshot function
> +# keeps changing sha256sum. I have hosted a snapshot on labb.zafena.se
> +# while we wait for the final JamVM 1.6.0 release.
> +JAMVM_VERSION = e9b0f82b9c9cfe5e5550f5e77de53ec2fba603a3
> +JAMVM_SHA256SUM = 24cf67795970d7e63d297a13b370ae8c3b141c35a22c3fd96137b5e62815a607
> +JAMVM_BASE_URL = http://labb.zafena.se/jamvm
> +JAMVM_URL = $(JAMVM_BASE_URL)/jamvm-$(JAMVM_VERSION).tar.gz
> +JAMVM_SRC_ZIP = jamvm-$(JAMVM_VERSION).tar.gz
> +JAMVM_IMPORT_PATH = \$(abs_top_builddir)/jamvm/install/hotspot
> +
I'd prefer JAMVM_IMPORT_PATH was with the other paths in the Makefile.am rather than here.
Is there a reason for the leading backslash?
> JAXWS_DROP_URL = http://icedtea.classpath.org/download/drops
> JAXWS_DROP_ZIP = jdk6-jaxws-b20.zip
> JAXWS_DROP_SHA256SUM = 0c460583898b968a58bf88eb53f90a0e34369e2562d65fb3a143512dfcaeb3eb
> @@ -126,8 +138,13 @@
> ICEDTEA_BUILD_TARGET=jdk_only
> ICEDTEA_DEBUG_BUILD_TARGET = jdk_fastdebug_only
> else
> +if WITH_JAMVM
> + ICEDTEA_BUILD_TARGET=jdk_only
> + ICEDTEA_DEBUG_BUILD_TARGET = jdk_fastdebug_only
> +else
> ICEDTEA_DEBUG_BUILD_TARGET = debug_build
> endif
> +endif
>
> if BOOTSTRAPPING
> BOOTSTRAP_DIRECTORY_STAMP = stamps/bootstrap-directory.stamp
> @@ -469,6 +486,11 @@
> ALT_HOTSPOT_IMPORT_PATH="$(CACAO_IMPORT_PATH)"
> endif
>
> +if WITH_JAMVM
> +ICEDTEA_ENV += \
> + ALT_HOTSPOT_IMPORT_PATH="$(JAMVM_IMPORT_PATH)"
> +endif
> +
> if DISABLE_OPTIMIZATIONS
> ICEDTEA_ENV += \
> NO_OPTIMIZATIONS="true" \
> @@ -582,8 +604,10 @@
> clean-icedtea icedtea-against-icedtea clean-icedtea-ecj \
> clean-tools-jar clean-copy clean-rt hotspot \
> hotspot-helper clean-extra clean-jtreg clean-jtreg-reports \
> - clean-add-zero clean-add-zero-debug clean-icedtea clean-icedtea-debug
> - clean-icedtea-against-ecj clean-cacao clean-add-cacao clean-add-cacao-debug \
> + clean-add-zero clean-add-zero-debug clean-icedtea clean-icedtea-debug \
> + clean-icedtea-against-ecj \
> + clean-jamvm clean-add-jamvm clean-add-jamvm-debug \
> + clean-cacao clean-add-cacao clean-add-cacao-debug \
Good catch on the missing \.
> clean-ports clean-overlay clean-extract-ecj clean-extract clean-extract-openjdk \
> clean-replace-hotspot clean-generated clean-download clean-hgforest clean-download-openjdk \
> clean-rewriter clean-rewrite-rhino clean-add-systemtap clean-add-systemtap-debug \
> @@ -740,6 +764,29 @@
> rm -f $(CACAO_SRC_ZIP)
> rm -f stamps/download-cacao.stamp
>
> +stamps/download-jamvm.stamp:
> +if BUILD_JAMVM
> + if ! echo "$(JAMVM_SHA256SUM) $(JAMVM_SRC_ZIP)" \
> + | $(SHA256SUM) --check ; \
> + then \
> + if [ $(JAMVM_SRC_ZIP) ] ; \
> + then \
> + mv $(JAMVM_SRC_ZIP) $(JAMVM_SRC_ZIP).old ; \
> + fi ; \
> + $(WGET) $(JAMVM_URL) -O $(JAMVM_SRC_ZIP); \
> + if ! echo "$(JAMVM_SHA256SUM) $(JAMVM_SRC_ZIP)" \
> + | $(SHA256SUM) --check ; \
> + then echo "ERROR: Bad download of JamVM zip"; false; \
> + fi; \
> + fi
> +endif
> + mkdir -p stamps
> + touch $@
We need an option equivalent to --with-cacao-src-zip. I'd suggest
adding this in a follow up patch. As with the drop tarballs, we
should verify the checksum for pre-provided tarballs as well as
download ones. It should be just a matter of symlinking the tarball
here if an alternate one is specified.
> +
> +clean-download-jamvm:
> + rm -f $(JAMVM_SRC_ZIP)
> + rm -f stamps/download-jamvm.stamp
> +
> clean-drops: clean-download-jaxp-drop clean-download-jaf-drop \
> clean-download-jaxws-drop
> if [ -e drops ] ; then \
> @@ -802,18 +849,19 @@
> rm -f stamps/download-openjdk.stamp
>
> stamps/download.stamp: stamps/download-drops.stamp stamps/download-cacao.stamp \
> - stamps/download-openjdk.stamp
> + stamps/download-jamvm.stamp stamps/download-openjdk.stamp
> touch stamps/download.stamp
>
> -clean-download: clean-drops clean-download-cacao clean-download-openjdk
> +clean-download: clean-drops clean-download-cacao clean-download-jamvm \
> + clean-download-openjdk
> rm -f stamps/download.stamp
>
> stamps/extract.stamp: stamps/extract-openjdk.stamp \
> - stamps/extract-cacao.stamp
> + stamps/extract-cacao.stamp stamps/extract-jamvm.stamp
> mkdir -p stamps
> touch $@
>
> -clean-extract: clean-extract-openjdk clean-cacao
> +clean-extract: clean-extract-openjdk clean-cacao clean-jamvm
> rm -f stamps/extract.stamp
>
> stamps/extract-openjdk.stamp: stamps/download.stamp
> @@ -871,6 +919,20 @@
> mkdir -p stamps
> touch stamps/extract-cacao.stamp
>
> +stamps/extract-jamvm.stamp:
> +if BUILD_JAMVM
> + set -e ; \
> + if ! test -d jamvm ; \
> + then \
> + mkdir jamvm ; \
> + $(TAR) xf $(JAMVM_SRC_ZIP) -C jamvm ; \
> + dir=$$(basename jamvm/jamvm-*) ; \
> + ln -s $$dir jamvm/jamvm ; \
> + fi
> +endif
> + mkdir -p stamps
> + touch stamps/extract-jamvm.stamp
> +
> stamps/replace-hotspot.stamp: stamps/extract.stamp
> if WITH_ALT_HSBUILD
> if test "x${HSBUILD}" != "xoriginal"; then \
> @@ -1018,6 +1080,7 @@
> fi
>
> icedtea_version="$(PACKAGE_VERSION)$(ICEDTEA_REV)" ; \
> + if ! test "x$(WITH_JAMVM)" = "xno"; then \
I don't think this will work, but it's hard to tell in patch form.
It looks like WITH_CACAO is getting nested inside WITH_JAMVM which
means WITH_CACAO will only be checked if WITH_JAMVM is set.
Can you include the whole rule in a reply?
> if ! test "x$(WITH_CACAO)" = "xno"; then \
> echo "JDK_DERIVATIVE_NAME=$${icedtea_version}" \
> >>openjdk/jdk/make/common/shared/Defs.gmk ; \
> @@ -1026,6 +1089,10 @@
> else \
> echo "JDK_DERIVATIVE_NAME=$(ICEDTEA_NAME) $${icedtea_version}" \
> >>openjdk/jdk/make/common/shared/Defs.gmk ; \
> + fi ; \
> + else \
> + echo "JDK_DERIVATIVE_NAME=$(ICEDTEA_NAME) $${icedtea_version}" \
> + >>openjdk/jdk/make/common/shared/Defs.gmk ; \
> fi ;
>
> if HAS_JDK_REVISION
> @@ -1244,7 +1311,8 @@
> # If you change anything here in the icedtea target, please make sure
> # you change it in the icedtea-debug target as well.
> stamps/icedtea.stamp: stamps/bootstrap-directory-symlink.stamp \
> - $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp
> + $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp \
> + stamps/jamvm.stamp
> $(ARCH_PREFIX) $(MAKE) \
> $(ICEDTEA_ENV) \
> -C openjdk \
> @@ -1262,6 +1330,9 @@
> if WITH_CACAO
> printf -- '-cacao ALIASED_TO -server\n' >> $(BUILD_JRE_ARCH_DIR)/jvm.cfg
> endif
> +if WITH_JAMVM
> + printf -- '-jamvm ALIASED_TO -server\n' >> $(BUILD_JRE_ARCH_DIR)/jvm.cfg
> +endif
> @echo "IcedTea is served:" $(BUILD_OUTPUT_DIR)
> mkdir -p stamps
> touch stamps/icedtea.stamp
> @@ -1271,7 +1342,8 @@
> rm -f stamps/icedtea.stamp
>
> stamps/icedtea-debug.stamp: stamps/bootstrap-directory-symlink.stamp \
> - $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp
> + $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp \
> + jamvm.stamp
> $(ARCH_PREFIX) $(MAKE) \
> $(ICEDTEA_ENV) \
> -C openjdk \
> @@ -1289,6 +1361,9 @@
> if WITH_CACAO
> printf -- '-cacao ALIASED_TO -server\n' >> $(BUILD_DEBUG_JRE_ARCH_DIR)/jvm.cfg
> endif
> +if WITH_JAMVM
> + printf -- '-jamvm ALIASED_TO -server\n' >> $(BUILD_DEBUG_JRE_ARCH_DIR)/jvm.cfg
> +endif
> @echo "IcedTea (debug build) is served:" \
> $(DEBUG_BUILD_OUTPUT_DIR)
> mkdir -p stamps
> @@ -1298,22 +1373,24 @@
> rm -rf $(DEBUG_BUILD_OUTPUT_DIR)
> rm -f stamps/icedtea-debug.stamp
>
> -stamps/icedtea-against-icedtea.stamp: stamps/icedtea.stamp stamps/add-cacao.stamp stamps/add-zero.stamp \
> +stamps/icedtea-against-icedtea.stamp: stamps/icedtea.stamp \
> + stamps/add-jamvm.stamp stamps/add-cacao.stamp stamps/add-zero.stamp \
> stamps/add-systemtap.stamp stamps/add-pulseaudio.stamp stamps/add-nss.stamp stamps/add-tzdata-support.stamp
> mkdir -p stamps
> touch stamps/icedtea-against-icedtea.stamp
>
> -clean-icedtea-against-icedtea: clean-add-zero clean-add-cacao clean-add-systemtap clean-add-pulseaudio \
> +clean-icedtea-against-icedtea: clean-add-jamvm clean-add-zero clean-add-cacao clean-add-systemtap clean-add-pulseaudio \
> clean-add-nss clean-add-tzdata-support
> rm -f stamps/icedtea-against-icedtea.stamp
>
> -stamps/icedtea-debug-against-icedtea.stamp: stamps/icedtea-debug.stamp stamps/add-cacao-debug.stamp \
> +stamps/icedtea-debug-against-icedtea.stamp: stamps/icedtea-debug.stamp \
> + stamps/add-jamvm-debug.stamp stamps/add-cacao-debug.stamp \
> stamps/add-zero-debug.stamp stamps/add-systemtap-debug.stamp stamps/add-pulseaudio-debug.stamp \
> stamps/add-nss-debug.stamp stamps/add/tzdata-support-debug.stamp
> mkdir -p stamps
> touch stamps/icedtea-debug-against-icedtea.stamp
>
> -clean-icedtea-debug-against-icedtea: clean-add-zero-debug clean-add-cacao-debug clean-add-systemtap-debug \
> +clean-icedtea-debug-against-icedtea: clean-add-jamvm-debug clean-add-zero-debug clean-add-cacao-debug clean-add-systemtap-debug \
> clean-add-pulseaudio-debug clean-add-nss-debug clean-add-tzdata-support-debug
> rm -f stamps/icedtea-debug-against-icedtea.stamp
>
> @@ -1694,6 +1771,61 @@
> fi
> rm -f stamps/rewrite-rhino.stamp
>
> +# JAMVM
> +
> +stamps/jamvm.stamp: $(OPENJDK_TREE) stamps/rt.stamp
> +if BUILD_JAMVM
> + cd jamvm/jamvm && \
> + ./autogen.sh --with-java-runtime-library=openjdk \
> + --prefix=$(abs_top_builddir)/jamvm/install ; \
> + $(MAKE) ; \
> + $(MAKE) install
> + mkdir -p $(abs_top_builddir)/jamvm/install/hotspot/jre/lib/$(INSTALL_ARCH_DIR)/server
> + cp $(abs_top_builddir)/jamvm/install/lib/libjvm.so $(abs_top_builddir)/jamvm/install/hotspot/jre/lib/$(INSTALL_ARCH_DIR)/server
> + ln -s server $(abs_top_builddir)/jamvm/install/hotspot/jre/lib/$(INSTALL_ARCH_DIR)/client
> + touch $(abs_top_builddir)/jamvm/install/hotspot/jre/lib/$(INSTALL_ARCH_DIR)/server/Xusage.txt
> + touch $(abs_top_builddir)/jamvm/install/hotspot/jre/lib/$(INSTALL_ARCH_DIR)/libjsig.so
> +endif
> +
> +clean-jamvm:
> + rm -rf jamvm
> + rm -f stamps/jamvm.stamp
> + rm -f stamps/extract-jamvm.stamp
> +
> +# Targets for additional VMs
> +
> +stamps/add-jamvm.stamp: stamps/icedtea.stamp stamps/jamvm.stamp
> +if ADD_JAMVM_BUILD
> + mkdir -p $(BUILD_JRE_ARCH_DIR)/jamvm
> + install -m 644 jamvm/install/lib/libjvm.so \
> + $(BUILD_JRE_ARCH_DIR)/jamvm/
> + printf -- '-jamvm KNOWN\n' >> $(BUILD_JRE_ARCH_DIR)/jvm.cfg
> +else
> + printf -- '-jamvm ERROR\n' >> $(BUILD_JRE_ARCH_DIR)/jvm.cfg
> +endif
> + touch $@
> +
> +clean-add-jamvm:
> + rm -rf $(BUILD_JRE_ARCH_DIR)/jamvm
> + sed -i 's#-jamvm KNOWN#-jamvm ERROR#' jvm.cfg
> + rm -f stamps/add-jamvm.stamp
> +
> +stamps/add-jamvm-debug.stamp: stamps/icedtea-debug.stamp stamps/jamvm.stamp
> +if ADD_JAMVM_BUILD
> + mkdir -p $(BUILD_DEBUG_JRE_ARCH_DIR)/jamvm
> + install -m 644 jamvm/install/lib/libjvm.so \
> + $(BUILD_DEBUG_JRE_ARCH_DIR)/jamvm/
> + printf -- '-jamvm KNOWN\n' >> $(BUILD_DEBUG_JRE_ARCH_DIR)/jvm.cfg
> +else
> + printf -- '-jamvm ERROR\n' >> $(BUILD_DEBUG_JRE_ARCH_DIR)/jvm.cfg
> +endif
> + touch $@
> +
> +clean-add-jamvm-debug:
> + rm -rf $(BUILD_DEBUG_JRE_ARCH_DIR)/jamvm
> + sed -i 's#-jamvm KNOWN#-jamvm ERROR#' jvm.cfg
> + rm -f stamps/add-jamvm-debug.stamp
> +
> # CACAO
>
> stamps/cacao.stamp: $(OPENJDK_TREE) stamps/rt.stamp
> @@ -2058,6 +2190,8 @@
>
> download-drops: stamps/download-drops.stamp
>
> +download-jamvm: stamps/download-jamvm.stamp
> +
> download-jaf-drop: stamps/download-jaf-drop.stamp
>
> download-jaxp-drop: stamps/download-jaxp-drop.stamp
> @@ -2082,6 +2216,8 @@
>
> icedtea-ecj: stamps/icedtea-ecj.stamp
>
> +jamvm: stamps/jamvm.stamp
> +
> jtreg: stamps/jtreg.stamp
>
> liveconnect: stamps/liveconnect.stamp
> Index: icedtea6/configure.ac
> ===================================================================
> --- icedtea6.orig/configure.ac 2011-02-19 02:26:05.000000000 +0100
> +++ icedtea6/configure.ac 2011-02-19 02:26:38.000000000 +0100
> @@ -175,6 +175,9 @@
> AC_CHECK_WITH_CACAO_HOME
> AC_CHECK_WITH_CACAO_SRC_ZIP
> AC_CHECK_WITH_CACAO_SRC_DIR
> +
> +AC_CHECK_ENABLE_JAMVM
> +
Please use IT as the prefix rather than AC. We are not the autoconf project :-)
> DISABLE_OPTIMIZATIONS
> SET_SHARK_BUILD
> ENABLE_ZERO_BUILD
> Index: icedtea6/acinclude.m4
> ===================================================================
> --- icedtea6.orig/acinclude.m4 2011-02-19 02:26:05.000000000 +0100
> +++ icedtea6/acinclude.m4 2011-02-19 03:23:52.000000000 +0100
> @@ -746,11 +746,15 @@
> sparc*-*-*) ;;
> x86_64-*-*) ;;
> *)
> - if test "x${WITH_CACAO}" != xno; then
> + if test "x${WITH_JAMVM}" != xno; then
> use_zero=no
> else
> - use_zero=yes
> - fi
> + if test "x${WITH_CACAO}" != xno; then
> + use_zero=no
> + else
> + use_zero=yes
> + fi
> + fi
This would be clearer if you just added JAMVM as a new option
rather than changing the CACAO one.
> ;;
> esac
> fi
> @@ -820,6 +824,23 @@
> AM_CONDITIONAL(SHARK_BUILD, test "x${use_shark}" = xyes)
> ])
>
> +AC_DEFUN([AC_CHECK_ENABLE_JAMVM],
> +[
> + AC_MSG_CHECKING(whether to use JamVM as VM)
> + AC_ARG_ENABLE([jamvm],
> + [AS_HELP_STRING(--enable-jamvm,use JamVM as VM [[default=no]])],
> + [
> + WITH_JAMVM="${enableval}"
> + ],
> + [
> + WITH_JAMVM=no
> + ])
> +
> + AC_MSG_RESULT(${WITH_JAMVM})
> + AM_CONDITIONAL(WITH_JAMVM, test x"${WITH_JAMVM}" = "xyes")
> + AC_SUBST(WITH_JAMVM)
> +])
> +
Again, should be IT_CHECK_ENABLE_JAMVM.
Why are we using 'WITH_JAMVM' rather than 'ENABLE_JAMVM'? 'with' implies it's possible to
take some option but we aren't using AC_ARG_WITH but AC_ARG_ENABLE.
Also if it is only yes/no a lot of the above would be simpler if we just tested for 'yes'.
It seems to assume some other value is possible.
> AC_DEFUN([AC_CHECK_ENABLE_CACAO],
> [
> AC_MSG_CHECKING(whether to use CACAO as VM)
> @@ -1144,13 +1165,14 @@
> AC_MSG_CHECKING([for additional virtual machines to build])
> AC_ARG_WITH(additional-vms,
> AC_HELP_STRING([--with-additional-vms=vm-list],
> - [build additional virtual machines. Valid value is a comma separated string with the backend names `cacao', `zero' and `shark'.]),
> + [build additional virtual machines. Valid value is a comma separated string with the backend names `jamvm', `cacao', `zero' and `shark'.]),
> [
> if test "x${withval}" != x
> then
> with_additional_vms=${withval}
> for vm in `echo $with_additional_vms | sed 's/,/ /g'`; do
> case "x$vm" in
> + xjamvm) add_vm_jamvm=yes;;
> xcacao) add_vm_cacao=yes;;
> xzero) add_vm_zero=yes;;
> xshark) add_vm_shark=yes;;
> @@ -1163,11 +1185,16 @@
> fi
> AC_MSG_RESULT($with_additional_vms)
>
> +AM_CONDITIONAL(ADD_JAMVM_BUILD, test x$add_vm_jamvm != x)
> AM_CONDITIONAL(ADD_CACAO_BUILD, test x$add_vm_cacao != x)
> AM_CONDITIONAL(ADD_ZERO_BUILD, test x$add_vm_zero != x || test x$add_vm_shark != x)
> AM_CONDITIONAL(ADD_SHARK_BUILD, test x$add_vm_shark != x)
> +AM_CONDITIONAL(BUILD_JAMVM, test x$add_vm_jamvm != x || test "x${WITH_JAMVM}" = xyes)
> AM_CONDITIONAL(BUILD_CACAO, test x$add_vm_cacao != x || test "x${WITH_CACAO}" = xyes)
>
> +if test "x${WITH_JAMVM}" = xyes && test "x${ADD_JAMVM_BUILD_TRUE}" = x; then
> + AC_MSG_ERROR([additional vm is the default vm])
> +fi
> if test "x${WITH_CACAO}" = xyes && test "x${ADD_CACAO_BUILD_TRUE}" = x; then
> AC_MSG_ERROR([additional vm is the default vm])
> fi
--
Andrew :)
Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)
Support Free Java!
Contribute to GNU Classpath and IcedTea
http://www.gnu.org/software/classpath
http://icedtea.classpath.org
PGP Key: F5862A37 (https://keys.indymedia.org/)
Fingerprint = EA30 D855 D50F 90CD F54D 0698 0713 C3ED F586 2A37
More information about the distro-pkg-dev
mailing list