To those of you who are taking a look at this project with an interest in contributing:

  * this was a new project, not a port of existing GSoC source code, so it started from scratch.  There are part that are not done yet, or incomplete.

Parts of the code are not finished yet, but we're slowly getting there. As of January 29, 2010 we have successfully ran GSoC09. We are working towards making it better for the next GSoC and are also thinking about running the Google Highly Open Participation Contest.

We have had some emails like "I wanted to contribute, but I can't find anything".  We'd like your help to change that.

# How to Help

Tell us what you expected to find.  Tell us where you'd expect to find it.  Help us get more organised.  Use whatever route you find works best.  There's an IRC channel (#melange on irc.freenode.net). There is a developers mailing list, and some for commits, comments and issues.  Comments on wiki pages are welcome.  New issues on the [issue tracker](http://tinyurl.com/melange-issue-grid) are encouraged, but please check if your issue is in the tracker already (make sure to check closed issues as well!).

If you're interested in working on something that is unlikely to be fixed by the team anytime soon, have a look at the [unassigned issues](http://tinyurl.com/melange-todo-issue-grid) grid. We welcome patches, even (especially!) on issues that we have marked as 'WontFix'. See GettingStarted for details on how to get hacking, and ContributionReviews on how to submit patches!

# What we are Working on

Have a look at the [issue tracker](http://tinyurl.com/melange-assigned-issue-grid) grid.  This will give you a good idea of what we are each working on at this moment. The high priority issues will in general be worked on first, although medium/low priority might be done sooner if they are easy to fix.