Differences between revisions 5 and 6

Deletions are marked like this. Additions are marked like this.
Line 175: Line 175:
= GCJ Ideas =

 * Add gcj-specific optimization passes to gcc.
   * Recognize local uses of {{{StringBuffer}}} and {{{StringBuilder}}} and make them more efficient
   * Add an internal flag so that GCC can know when some values are not null ("this", result of "new", etc) and teach VRP about this
   * Update the LLVM-based JIT compiler to do recompilation and optimization. Read the literature and experiment extensively to find good recompilation heuristics.
Line 194: Line 201:
= GCJ Ideas =

 * Add gcj-specific optimization passes to gcc.
   * Recognize local uses of {{{StringBuffer}}} and {{{StringBuilder}}} and make them more efficient
   * Add an internal flag so that GCC can know when some values are not null ("this", result of "new", etc) and teach VRP about this
   * Update the LLVM-based JIT compiler to do recompilation and optimization. Read the literature and experiment extensively to find good recompilation heuristics.

This page contains suggested Google Summer of Code 2009 student proposals for GNU Classpath.

Index

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.

You can choose either GNU or GCC as mentor organisation. Note that there are also other ideas for those projects if none of the ideas below fit you. See http://www.gnu.org/software/soc-projects/ideas.html and http://gcc.gnu.org/wiki/SummerOfCode. Again, you are also more than welcome to propose something that is not on this list yet.

Here are some other guidelines that you may find useful and that we hope can help you in preparing your application form for the Summer of Code 2009, we really suggest you to give a look at them:

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

Possible mentors: Mario Torre (neugens)

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.

Support the Java Attach API

Aim: A working implementation Possible mentors: Andrew John Hughes (gnu_andrew)

This is needed to run JConsole locally (which would be the end goal of this project). Having it as part of our VM interface has general usefulness as VMs will need this for OpenJDK too.

Update GJDoc to support the 1.5 language constructs

Possible mentors: Andrew John Hughes (gnu_andrew) Mario Torre (neugens) Roman Kennke (rkennke)

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.

Finalize text.html support

Possible mentors: Roman Kennke (rkennke) Mario Torre (neugens)

Make sure you set an achievable goal/target for this.

Fully integrate Java Web Start into the desktop

Possible mentors: Roman Kennke (rkennke) Mario Torre (neugens)

  • Recognize when the network is unavailable (using dbus)
  • 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

Possible mentors: Roman Kennke (rkennke) Mario Torre (neugens)

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

Possible mentors: Roman Kennke (rkennke) Mario Torre (neugens)

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

Possible mentors: Chris Burdess (dog), Andrew John Hughes (gnu_andrew)

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

Possible mentors: Andrew John Hughes (gnu_andrew)

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:

SPECjvm2008

Possible mentors: Andrew John Hughes (gnu_andrew)

SPECjvm2008 is a Java benchmark which it would be useful to run on Classpath-based VMs. Currently it fails on about two thirds of the tests:

Building OpenJDK

Possible mentors: Andrew John Hughes (gnu_andrew)

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.

Batik

Possible mentors: Andrew John Hughes (gnu_andrew)

Batik is an SVG implementation in Java from Apache.

GCJ Ideas

  • Add gcj-specific optimization passes to gcc.
    • Recognize local uses of StringBuffer and StringBuilder and make them more efficient

    • Add an internal flag so that GCC can know when some values are not null ("this", result of "new", etc) and teach VRP about this
    • Update the LLVM-based JIT compiler to do recompilation and optimization. Read the literature and experiment extensively to find good recompilation heuristics.

Random Ideas

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

Possible mentors: Andrew John Hughes (gnu_andrew)

BrandWeg

Possible mentors: Andrew John Hughes (gnu_andrew)

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:

  • Using JAXWS from OpenJDK
  • Using OpenJDK's Swing HTML implementation
  • Using OpenJDK's native ZIP implementation

Other Resources

There is also:

but these are not as up to date.

GoogleSoC2009 (last edited 2009-03-09 22:35:45 by AndrewHughes)