Name : Mike Arthur Email/MSN : mike@mikearthur.co.uk Homepage/Blog: http://mikearthur.co.uk/ CV: http://mikearthur.co.uk/cv.pdf Abstract Currently, GCJ can be installed with the 'gcj' use flag, passed when compiling GCC. With GCC 4.1, we have seen that many programs can compile to native bytecode. This project will aim to integrate this into the Portage package management system, and produce patches for popular programs, benefiting Gentoo, Java developers and the open source community. 1 Benefits to the Gentoo Community * Support for GCJ/GIJ through java-config. * Support for compiling packages using OSS APIs. * (Time limited) Investigating the benefit of compiling Java packages to native bytecode. * Allowing Java programs to be used on architectures with no JVMs currently available (e.g. Alpha). 2 Project Details With GCJ 4.1 and the GNU Classpath, we have an increasingly sophisticated GPL compiler and class library. Already, Fedora (and I) have managed to get applications such as Azureus and Eclipse running with GIJ. GCJ compiles Java programs to a Compiled Native Interface and GIJ interprets compiled bytecode. Currently, we have an experimental overlay, which can be used to provide GCJ as a compiler for Java files, and a 'native' use flag, that can be used as a JDK. However, there are some issues with this, such as static linking with GCC libraries, and the debate whether ECJ is best used for compiling bytecode, that need to be resolved. The benefits of this to the community range from preventing the requirement on fetch restricted packages (such as the Sun-JDK) to run popular pieces of software at acceptable standards (such as Azureus or Eclipse). Packages generally will fall into three categories: * Packages (such as Azureus) that already compile and run acceptably with GCJ, and don't make use of outside libraries that will not compile * Packages that will require basic patching of code in order to retain functionality and compile * Packages that require extensive patching in order to work, and may require a vast rewrite in order to perform this. By current counts there are 295 packages (excluding Sun packages, JREs and JDKs). Priority will then be placed on major used in-tree software (e.g. Eclipse, Tomcat, Azureus, Hibernate, Ant) and their relevant dependencies. These will be categorised into the 3 above groups. The languages used will be Python, BASH and Java. Python may not need to be used, but as it is the language that both Portage and java-config are written in, it is important that, if any extensions need to be made to Portage or java-config, that they are also written in Python. BASH will be used to create Gentoo ebuilds, which will be a crucial part of this project, as this will be used to physically distribute and install my work on the machines of end-users. Within this, shell scripting may be used to modify files, if only basic modifications are required. Java will be used to modify and create patches for the relevant programs. 3 Project Schedule * May 22nd: Find out whether proposal has been accepted. * May 22nd - 28th: Prioritise and research packages that will be able to be/have been compiled already using GCJ. * May 28th - June 8th: On holiday to Italy * June 8th - June 15th: Produce Ebuilds for Azureus and any other high-priority packages that compile cleanly * June 15th - August 7th: Work on patching packages, starting from high to low priority. * August 7th - August 12th: Freeze on patching. Any packages that work, produce Ebuilds to install them. Briefly analyse performance benefits/drawbacks of using GIJ or ECJ compared to GCJ native code. * August 12-19th: Working on outdoor activity camp in Scottish Highlands * August 19th-21st: Complete any last minute cleaning. 4 Biography My name is Mike Arthur, and I am a third year undergraduate at The University of Edinburgh. I study Computer and Management Science. I have been using Java at an increasingly sophisticated level over 3 years, and this year, recently completed a peer to peer distributed filesystem, using the Chord protocol, in Java. I am familiar with using large amounts of the 1.4 and 1.5 API, and familiar with other methods that would be beneficial to this project, such as shell scripting, regular expressions and Python. My Enterprise Computing coursework, written in Java and JSP, in the latter part of 2005, was impressive enough to warrant me obtaining a 95/100 mark, and for the course lecturer to create a unique 4th year project for me, using AJAX to augment the existing practical, denying any other students access to this project. I have been using Gentoo for 4 years, originally as a server platform, before moving to using it exclusively on my AMD64 desktop for a year. I contribute help to other Gentoo users on #gentoo and the forums, and am familiar with filing and checking bugs using the Gentoo Bugzilla. I feel my experience with Gentoo and Java would make me an ideal candidate for this project. Firstly, I have been using Java to perform a vast array of projects over the last 3 years, from a web platform to a filesystem to a processor simulator, and I feel this array would allow me to identify quickly how to duplicate functionality from sun.* or proprietary classes with OSS. Aside from my Java experience, I have taken courses in efficient algorithmic design, optimising code, writing secure Java code and preventing attacks, and working individually to solve large scale, multifaceted projects, such as the previously mentioned filesystem, that bear strong resemblance to this one, in terms of time and effort required. Secondly, I am organised, and my Management experience gives me the ability to manage my time well, and project the time required for subprojects. I feel this would allow me to be able to provide visible results for Gentoo, rather than 5 incomplete sub-projects. Finally, I am passionate about OSS, and other than the 2.5 weeks I have mentioned above, I plan on dedicating the 2.5 months working at this project as a full-time job. The prospect of this project really excites me, both in terms of the outcomes (GCJ used extensively and integrated into Portage) and also the prospect of being able to spend the summer working on something I am interested in. I believe this will help me to be incredibly motivated to not only work hard, but retain focus on the real gains of this project to the community, and not get sidelined. I hope to learn a lot this summer, and give a lot, if accepted, which would benefit Gentoo, the open source community (as these patches may well be accepted upstream) and my future career.