The community of contributors to the [Melange](MelangeIntro.md) project
wants to foster an environment where the [SoC framework](SoCOverview.md) and the
web applications that use it are developed and improved to the benefit of
pen source and free software organizations everywhere.  One
way to foster such a friendly and harmonious environment is to adopt
a set of community standards to which everyone agrees.

These guidelines strive to encourage sense of community and mutual
respect between Melange contributors, existing open source and free
software organizations, and sponsoring organizations that use Melange
and the SoC framework to provide programs like
[Google Summer of Code](GSoC.md) <sup>TM</sup> that benefit many people.  The
goal is to avoid situations like those described in
[this talk](http://www.youtube.com/watch?v=ZSFDm3UYkeE).

So, in order to participate in the Melange contributor community, you need
to agree to abide by the same guidelines and standards that have been
accepted by the rest of that community.  The Melange contributors, as a
community, will update these guidelines as needed, as the community grows.

## CLA

A completed Contributor License Agreement (CLA) is needed in order to
contribute to the Melange project.  Please choose the
[CLA](ContributorLicenseAgreements.md) appropriate to your situation, complete
it, and submit it by following the instructions in the selected CLA.

## Reviews

Contributions to the Melange project, including
[source code](ContributionReviews#Code_reviews.md),
[documentation](ContributionReviews#Documentation.md), and
the like, are subject to reviews by the other contributors to the project.
You need to agree to the [contribution review processes](ContributionReviews.md)
developed by the Melange community in order to contribute to the Melange
project.

## Testing

Source code contributions to the Melange project are subject to
[testing guidelines](TestingGuidelines.md) that should be met _before_
requesting a [code review](ContributionReviews#Code_reviews.md) of a new
[patch](ContributionReviews#Patches.md) or
[major feature in a developer branch](ContributionReviews#Branches.md).
You need to agree to the [testing policies](TestingGuidelines#Policies.md)
developed by the Melange community in order to contribute to the Melange
project.

## Mailing lists

The Melange community uses a pair of mailing lists to communicate.
The first, the
[discussion mailing list](MailingListsGuidelines#General_discussion_list.md),
is used for general announcements.  The second, the
[developer mailing list](MailingListsGuidelines#Developer_list.md), is
used strictly by project owners and members of the
[SoC project](http://code.google.com/p/soc/) on
[Google Code](http://code.google.com).  Please take a look at the
[mailing list guidelines](MailingListsGuidelines.md).  Everyone
participating on these mailing lists is asked to abide by them, not
just Melange contributors.

## IRC channel

The Melange community communicates informally using the `#melange` channel
on `irc.freenode.net` ([Freenode](http://freenode.net)).  Please take a look
at the [IRC channel guidelines](IrcChannelGuidelines.md).  Everyone
participating on the `#melange` channel is asked to abide by them, not
just Melange contributors.


---

_Copyright 2008 Google Inc._
_This work is licensed under a_
[Creative Commons Attribution 2.5 License](http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html).
[![](http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png)](http://creativecommons.org/licenses/by/2.5/)