#summary Terms for contributing to Melange
#labels Contents-Draft,Phase-Guidelines

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
[CodeReviews source code], [DocumentationReviews 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 [CodeReview code review] of a new [CodeReview#Patches patch] or
[CodeReview#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]
