Java Roadmap



Java presents an interesting problem for the Free and Open Source Software communities. Free implementations of Java Virtual Machines and the core Java classes are getting closer to approaching the Java SDK specifications, but are not completely compliant.

The goal is to provide the best possible Free implementation "out of the box" so that Ubuntu handles Java exceptionally well, while making it easy to move to a non-Free JVM. We also want to handle all use cases.


Strong user demand for this kind of functionality makes this well worth developing.

Scope and Use Cases

  • 2 requires Java support for full functionality

  • Provide an expected level of Java functionality "out of the box" in Ubuntu
    • Java Applet support in a browser (esp things like Yahoo! games)
  • Showcase two popular Java applications: jedit in main and eclipse in multiverse
  • Provide Tomcat for Internet / Application Service Providers
  • Commercial Software

Implementation Plan

  • 2

    • breezy main does have Java support for OOo2.
    • This support just uses gij as the runtime. Speedups are possible when compiling all included and jar files and jar files in dependencies to native code (specification split-off to NativeJavaGcjPackages).

  • Synchronize and merge the ant package from unstable (October 2005). Done.
  • Merge java packages from unstable to build using the ant package (packages currently in main are built using the libant1.6-java package).
  • Build and upload tomcat (November 2005). Move tomcat5 and dependent packages from multiverse to universe. tomcat5 is needed for the eclipse help system, at least. eclipse packages are in universe, but need polishing.
  • Ensure that all packages that use Java in Breezy comply with the Java Packaging Policy (see and use ecj for building (Done).

  • Provide a Java packaging template (dh_make, cdbs). Add a Java Packaging HowTo to the Ubuntu wiki.

  • Add a Java packaging policy to build from each java package (libfoo-java):
    • libfoo-java-gcj: A package containing the natively compiled java code.
    • libfoo-java-doc: A package containing the provided documentation and the generated API docs generated by gjdoc, cross-referencing identifiers from other packages.
    • libfoo-java-gcjdbg: A package containing the debugging symbols for libfoo-java-gcj (recommended).
  • Provide gij-4.1/gcj-4.1 in universe, if it can be packaged without touching existing packages in main.
    • gcj/gij will have an updated classpath library which has a more complete implementation for many APIs. Not strictly needed for building the existing java stuff in main, but requested in bug reports.
  • Package jedit. Depends on the packaging of retroweaver (a package providing 1.5 features for 1.4), which needs investigating. not a target for main.

Data Preservation and Migration

Current Free Software implementations of Java do not support SecurityManager Any public-facing server that is installed using a Free Java implementation is a potential security risk. Supporting gcjwebplugin is high-risk because arbitrary code is being run. Running Tomcat presents the same risk as running an cgi on Perl does.

Overall, this means that available tools deliver a sub-optimal solution. This will become acceptable only when security upgrades to the abovementioned packages and plugins appear.

Packages Affected

Outstanding Issues

  • Because Free Software implementations are not certified by Sun, we cannot promote Free JVMs for use with proprietary applications. As Sun is not supportive of Free Implementations of Java, this is unlikely to change until proprietary Java applications start to get explicitly certified against Free Java implementations.
  • The term "Java" is trademarked. All uses of the term have to be carefully checked (how?).
  • gij/gcj currently does not support Java 1.5 features; i.e., while many applications now start to use these features, they cannot be packaged for main or universe, and thus must go into multiverse.

UbuntuDownUnder/BOFs/JavaRoadmap (last edited 2008-08-06 16:40:47 by localhost)