CMSC 433, Fall 2007

Programming Language Technologies and Paradigms

Open Source Contribution Project

Part 1 - Due October 23rd
Part 2 - Due December 4th

As mentioned in class, you will be required to complete a long term project that involves making a contribution to an open source project.


You should find an open source project you are interested in contributing to. The project should have:

You will be required to keep a log detailing your efforts and providing evidence of your work. One example of such evidence would be email responses from project developers. Another example would be URLs to mailing list threads in which you discussed issues with developers.

A large part of this project involves learning to communicate effectively on large scale, geographically distributed software development projects. You will have to determine the policy and procedures used by your specific open source project. How do the project members take contributions? What does that procedure entail? Do you submit a patch? What are the conventions for writing the patch? You may have to post to the project mailing list to get answers.

Additionally, you should be a good open source citizen. This means, for example, if you find a bug and provide a patch to fix that bug, you should also provide tests that fail without the patch, but pass after the patch is applied.

Keep in mind that while it would be great if your contribution gets accepted, it's okay if your contribution is rejected. In the latter case, you should provide an explanation (with evidence) as to why your contribution was unacceptable to the project maintainers.

Part 1 (Due October 23rd)

An OpenSourceProject directory has been created for you under your CVS repository. All required materials for this project must be placed under this directory. At the moment, there are two files under this directory:
  1. questionnaire
  2. workLog

As was detailed in the class slides, you should select a project and propose what kind of contribution you intend to make. This information should be placed in the Plan file.

After selecting a project, download the project and build it successfully from source. Document this process, in detail, in the workLog file. We should be able to easily follow your instructions in this file to download and build your selected open source project. Particularly, you may be required to download additional components such as libraries, Eclipse plug-ins, or the Ant build manager. The download location, installation, and configuration of all such components should be explicitly detailed in workLog.

Part 2 (Due November)

Update your Plan and workLog files with your progress. At a minimum we should see the following.

In the Plan file, identify the exact contribution you are making. E.g., if you previously proposed that you would find a bug and fix it, identify the specific bug you have discovered. If you were adding a new feature, give specifics of that feature.

In the workLog file, provide a detailed update of your status. If you are fixing a bug, provide explicit details of exactly how you discovered that bug and detail how you plan to fix that bug. If you are adding a feature, give us a status of what is implemented and what remains to be implemented. Furthermore, in the latter case, you should have something demoable and provide exact instructions on incorporating the demoable version of your feature into your selected open source project.

Also in workLog, detail your communication with the project developers to have your contribution accepted.


The simplest acceptable contribution for this project would be to run FindBugs on an open source project, find a bug, and fix it.

If an open source project proves inordinately difficult to build, you may want to move on and find another project. This means you could be working backward on Part 1. In other words, you would document your download and build progress in workLog as you go along, and once you successfully build a project, then you "select" that open source project as the one you wish to contribute to in Plan.