For students

Students, please feel free to either adopt one of these proposals OR suggest something else. The official Summer of Code page is at http://code.google.com/soc/ make sure you read all the official pages there. When submitting a proposal for GNU Classpath make sure you read the general GNU SoC Guidelines, those guidelines also provide a nice summary of important things to mention in your application (Benefits, Deliverables, Plan, Qualificaton, etc.) In addition to those you might want to read up on the GNU Classpath Hacker Guide and/or the GCC contrib and/or GCJ contrib pages.

Please, follow all the guidelines and rules defined by Google, as these are the most important requirements. In addition, these can be useful hints:

A program like the Summer of Code can be very difficult to manage, especially for students in the European Community whose summer schedule usually is later than that in the United States, this is why we recommends that students do not work on other projects outside the GSoC, or limit the time spent onthese project to a maximum of 10 hours per week, depending on the task being proposed.

We require students to get in touch with mentors on a regular basis. There are many ways to be in touch with us, from IRC to mailing list, but they all require some sort of constant Internet access, so please, be sure to have Internet access during the whole project, and not only the two months dedicated to the code.

All applicants must be reasonably fluent in their target programming language. The GSoC is a mean of learning and gaining experience, and we will do everything to help the student, but a student must start from a solid basis already to have a chance to successfully complete the program.

For maintainers/mentors

GNU Classpath developers, please feel free to add further entries or offer yourself as a mentor

Select tasks that a student could do if they had 2 months to work on it full time (assume they are smart, but might not have a lot experience and might need to learn some of the project customs). Please mention when you are willing to be a mentor for the project.

Well-defined Tasks

Add file output support for the sound API

Google Summer of Code 2007 saw a successful proposal to add support for reading and playing sound files using a GStreamer implementation of javax.sound. Support for writing sound files is still missing however. Also, there are a number of improvement still pending that would be nice to have.

Update GJDoc to support the 1.5 language constructs

Within the GNU Classpath Free Java stack, there remains one component that can not yet fully handle the 1.5 language constructs such as generics, enumerations and annotations. A development process of approximately two years ensured that the main code base and VMs supported these extensions, but our documentation generator has so far simply being patched so that it can at least generate documentation for the current codebase. The documentation for our latest release illustrates some of the problems, notably in classes like java.lang.Enum. GJDoc really needs a new parser to handle the 1.5 constructs and then appropriate adaptation to render them correctly in the HTML doclet.

Fully integrate Java Web Start into the desktop

Make drag-and-drop of JNLP links download and install the application, and put a launcher on the panel or desktop

Show download status in the system tray

Better support application management. Have a UI for app management. Allow a second cache that can be set up by the sysadmin

Share a class cache with URLClassLoader and/or gcjwebplugin.

Enable "hooking" for runtimes to optimize the cache (aot-compiling for gcj, transforming to .net il for ikvm, etc). Some of these ideas might be easier implemented when starting from scratch on a new jnlp implementation, others might be easier to achieve building upon an existing implementation like netx. Make sure to explain in your application why you choose a particular approach.

Rewrite Qt peers using Jambi

Our Qt peers are rotting away, and that means it's time for someone to come in and rewrite them. Qt Jambi are the official bindings for Qt for Java code, so it could be both fun and useful to rewrite our Qt based AWT peers in pure Java.

Write a Swing plaf that uses Gtk to render widgets

This would let us use the current Gtk theme for Swing applications. (A similar task would be to complete and polish the Qt-based Swing peers which do this.)

Add JDWP support for jamvm or kaffe

In particular we want to be able to debug the core GNU Classpath libraries from Eclipse. GNU Classpath contains a generic JDWP server implementation, but this is not yet hooked up to any runtime. Work is underway for gij support, but this will at only enable debugging application code since gcj doesn't use the interpreter for the core classes (they have a ahead of time precompiled libgcj for speed). Hooking JDWP support to a traditional interpreter like jamvm would enable jdwp debugging of core classes.

Application Support

The aim of all these is to get the desired application running and working as well as possible on GNU Classpath and a VM of your choice.

TomCat

TomCat will run but still has issues. One hurdle a few people have run into is that the JMX implementation in GNU Classpath is not complete enough to run Tomcat without the optional 1.4 compatibility JAR.

JBoss

JBoss works to a degree, but being a large enterprise application, it runs into quite a few bugs or cases of missing functionality. Christian Thalinger filed a number of bugs about this, and there are a few others still in our codebase:

Building OpenJDK

The IcedTea project currently has to apply a number of patches to OpenJDK specifically for building on ecj with a GNU Classpath VM. Preferably, the build process should be now different than it would when using IcedTea to build. This task involves working with code from several projects: GNU Classpath, a VM of your choice, the IcedTea project, OpenJDK itself and possibly Eclipse, home of the ecj compiler.

Random Ideas

AWT peers for WINE (aka Windows) or Darwin (aka Mac OS X)

BrandWeg

BrandWeg is our attempt to integrate parts of OpenJDK into Classpath to provide some of the missing functionality to VMs using the Classpath interface. This is actually capable of spawning a number of sub-projects depending on student interest: