#summary Terms for contributing to Melange
#labels Contents-Complete,Phase-Guidelines,Importance-Useful

The community of contributors to the [MelangeIntro Melange] project
wants to foster an environment where the [SoCOverview SoC framework] 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
[GSoC Google Summer of Code] ^TM^ that benefit many people.  The
goal is to avoid situations like those described in
[http://www.youtube.com/watch?v=ZSFDm3UYkeE this talk].

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 
[ContributorLicenseAgreements CLA] appropriate to your situation, complete
it, and submit it by following the instructions in the selected CLA.

== Reviews ==

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

==  Testing ==

Source code contributions to the Melange project are subject to
[TestingGuidelines testing guidelines] that should be met _before_
requesting a [ContributionReviews#Code_reviews code review] of a new
[ContributionReviews#Patches patch] or
[ContributionReviews#Branches major feature in a developer branch].
You need to agree to the [TestingGuidelines#Policies testing policies]
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
[MailingListsGuidelines#General_discussion_list discussion mailing list],
is used for general announcements.  The second, the
[MailingListsGuidelines#Developer_list developer mailing list], is
used strictly by project owners and members of the
[http://code.google.com/p/soc/ SoC project] on
[http://code.google.com Google Code].  Please take a look at the
[MailingListsGuidelines mailing list guidelines].  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` ([http://freenode.net Freenode]).  Please take a look
at the [IrcChannelGuidelines IRC channel guidelines].  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_
[http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License].
[http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png]