Sunday, June 26, 2005

Almost forgot, here's my proposal:

PROJECT TITLE
-------------
Open Sourcing Perl/Java Integration

SYNOPSIS
--------
The main goal of this project is to integrate Open Source Java and Perl. Perl and Java are two very mature environments, each with their own strengths. It is common to find both of these technologies being used in a typical enterprise environment - for example, in my current job. Many times these two technologies need to be integrated. However, it is often the case that the use of these two technologies in the same program cause certain memory and performance hits that are often just not acceptable and this is especially true in short run CLI driven programs. It seems appropriate that with recent innovations in the Java space made possible by open source Java projects (GCJ, GNU Classpath, Kaffe, etc...) that Perl should be able to take advantage of these innovations. I am confident that many benefits will arise as a result of the marriage of current cutting edge Java innovations and Perl.

The first major benefit to this marriage of open source Java and Perl is that the open source community as a whole will become more connected and less dependant on external vendors, a common goal shared by most Open Source projects/communities. In addition to bringing the open source community together, this will also serve to bring the Java and Perl communities closer. The second benefit is that such technologies could be used to close some of the performance and memory gaps in the current integrated Perl/Java solution and make it a more viable solution for projects/companies using mixed language/environment solutions.

BENEFITS TO THE PERL COMMUNITY
------------------------------
There will be many benefits to the Perl community as a result of this project, some of the primary ones are:

1. Remove dependencies to external closed source vendor solutions.

2. Add functionality to Inline::Java to reflect advances in open source Java technology. Inline::Java allows for use of different JVMs but to my knowledge does not allow for usage of natively compiled GCJ code.

3. Bring performance gains to Perl/Java integration by using the natively compiled option of GCJ and the integration power of SWIG.

4. Bridge gap between Java and Perl communities.

DELIVERABLES
------------
This proposal is intended as a starting point and will hopefully become part of a continuously evolving project, changing as both the Perl and Java communities continue to move forward. The first set of deliverables will provide the basic functionality that will serve as the starting point for future work.

This project's success will be measured according to the following deliverables:

1. A process, as well as a set of tools, that can be used for integration of Java code into Perl. This will allow Perl programs to 'use' natively compiled Java class files just as they would any other Perl module.

2. A working GCJ geared Inline::Java module capable of running natively compiled or Class compiled Java from source code. This improved module will be a complete top to bottom Open Source solution to the Java in Perl integration space.

3. Thorough documentation detailing research, design, development and usage of final product.

4. A packaged set of code suitable to be included on CPAN.

5. Articles/posts describing intentions and progress.

In addition to the above deliverables, the assigned mentor will be able to keep track of this project's progress via regular blog posts as well as phone and email correspondence with the author.

PROJECT DETAILS
---------------
1. Use SWIG as well as the gijh program made available with the GNU GCJ distribution. The process will be similar to the following: create a header file with gijh; compile the Java code natively with GCJ; create a Perl proxy class with SWIG; 'use' generated module in Perl source code.

2. Integrate support for GNU GCJ into the Inline::Java module. In doing so it may actually be necessary to create a separate Perl module in the spirit of Inline::Java instead of extending the current code base; this is something that will have to be determined upon further inspection and consultation with the original author during the project discovery phase. In the very likely case that a new module is created, a propper CPAN build package will also be created. In particular, this project will concentrate on taking full advantage of GCJ's ability to natively compile Java to machine code.

3. Articles on this topic may be appropriate in such publications as 'The Linux Magazine' (Perl of Wisdom Column), 'The Linux Journal' or online news groups and blogging sites.

The Inline::Java maintainer has not been contacted but will be asked for their support and cooperation in the understanding of their module and the further direction of additions as part of this project. Inline::Java is still active; as of this writing the last CPAN update took place just about two months ago.

PROJECT SCHEDULE
----------------
Significant progress can be made on the initial deliverables of this project during an abbreviated summer (June-August). The project plan consists of the following phases:

1. Discovery (1 - 2 weeks): Study the implementation and design of existing code, this should involve contacting the Inline::Java author. In addition, continue to become familiar with all tools involved including, gijh, SWIG, and GCJ which will include example programs and modules illustrating functionality. Lastly, establish a project space on sourceforge.net for tracking of the project. At the end of this phase the author will have a clear understanding of how the Inline::Java module works and where he should concentrate his development efforts. A deliverale for this phase will be a document/set of documents detailing design considerations, limitations and future steps.

2. Design and Development (5 - 6 weeks): Start concentrated design and development on deliverables 1 and 2. This phase will build on the example programs and information learned from the previous phase. This phase will begin with designing the appropriate modules and finally beginning their development. At the end of this phase documents detailing the module's design as well as functional code will be delivered.

3. Packaging and Writing (1 -2 weeks): This phase is concerned with documenting (via perldoc) and packaging the developed code for release to CPAN. In addition, articles will be written documenting experiences as part of the "Summer of Code", and the motivation, design and usage of the newly created module. This will satisfy deliverables 3, 4 and 5.

BIOGRAPHY
---------
I graduated from University of Michigan in Ann Arbor (U-M) in 2003 with a BS in Computer Science where I developed mainly C and C++ applications for course related projects. This is also where I learned Perl as part of a summer project with a professor. After graduation, I started at Merrill Lynch in Hopewell, NJ where I became more familiar with the Perl and Java languages through the mentorship of my peers. During this time I developed a strong interest in the Perl technologies and quickly adopted Perl as my language of choice for anything from data collection and dissemination to server maintenance and personal side projects done away from work. Examples of Perl projects include a Jeeves inspired templating engine for code generation tasks, a Class::DBI based genealogy application, as well as litterally hundreds of utility scripts. While working on my main project, I have several times been tasked with the job of integrating existing Perl and Java components and was !
able to do so with varying levels of success. Some of my approaches included calling EJBs through MICO CORBA with C++ and SWIG and in-lining Java RMI client code using Inline::Java. However, these approaches proved either difficult, too much work for the project, or didn't perform within required limits. Recently some of my attention has been focused on the progress of two open source projects that I believe can help me in this area: GNU GCJ and GNU Classpath. This was the genesis for my current project idea.

More recently, I have applied and been accepted to the University of Michigan for their Master's program in Computer Science and Engineering. At this point I have accepted the offer, registered for classes and signed a lease for an apartment in Ann Arbor starting in September of this year. It is my intention to continue on after my Master's and work towards a PHD in CSE. I plan on giving my notice for my current job in August before moving back to Ann Arbor and beginning school. I would be willing to consider giving notice earlier if accepted for this project.

AMOUNT REQUESTED
----------------
I am submitting this proposal as part of the Google "Summer of Code" project and as such am requesting the full stipend given as part of that project.

0 Comments:

Post a Comment

<< Home