#summary Guidelines for Melange mailing lists
#labels Contents-Draft,Phase-Guidelines

The [MelangeIntro Melange] community uses a pair of mailing lists as the
primary method of communication.  Our goal is to use these mailing lists
to the support the development of the [SoCOverview SoC framework] and
Melange web applications, and to assist the organizations
and users that rely on that framework to participate in programs such
as [GSoC Google Summer of Code] ^TM^.  Our guidelines for using these
mailing lists have been written with this goal in mind.  Like the other
guidelines related to participating in the Melange project, the Melange
contributors, in cooperation with the community at large, will update
these guidelines as needed.

We encourage participation on these mailing lists, but we also ask that
participants treat each other with mutual respect and remember that the
ultimate goal is to promote the development and use of open source and
free software.

These mailing lists are hosted on [http://groups.google.com Google Groups]
and share some common access settings.

"Project owners" of the [http://code.google.com/p/soc/ SoC project] hosted on
[http://code.google.com Google Code] are, by default (unless they decline),
made owners of both Google Groups used by the Melange project.  Similarly,
"project members" are, by default (again, unless they decline), made
managers of both of these Google Groups.

Group content (mailing list archives and discussions) can be viewed by
the public at large on both lists.  To help prevent list spam, only
actual group members can post to the mailing lists and discussions.  To
prevent email spam, only owners and managers can view the corresponding
Google Groups membership lists.

Due to lack of revision control in Google Groups, the Google Code wiki
is preferred for all documentation, and `svn` for files (usually, but
not necessarily, source code).  The Pages and Files sections of the
Google Groups used by the Melange project have been disabled and will not
be used.

== General Discussion List ==

The primary mailing list used by the Melange project is the `melange-soc`
[http://groups.google.com/group/melange-soc discussion mailing list].

To post to the mailing list, membership is required, but normal group
membership (with the limitations described above) is not restricted and
is open to anyone.  To sign up, visit http://groups.google.com/group/melange-soc

== Developer List ==

The mailing list used for development discussions (such as
[CodeReviews code reviews]) is the `melange-soc-dev`
[http://groups.google.com/group/melange-soc-dev developer mailing list].

This list, while its archives are viewable by the general public, is by
invitation only.  Only list managers (and, by extension, list owners)
can invite new members, though prospective members can request an
invitation.  Invitations are requested by visiting
http://groups.google.com/group/melange-soc-dev

Please keep in mind that this list is intended for current and potential
contributors to the Melange project, not for reporting issues or making
feature requests.  (Once it is enabled, issues can be reported and new
features requested using the 
[http://code.google.com/p/soc/issues/list issue tracker] on
[http://code.google.com/ Google Code].  Participation on this developer
mailing list (and in the
[IrcChannelGuidelines IRC channel]) is the "gateway" to earning commit
access in the SoC project hosted on [http://code.google.com/ Google Code].

== Abuse ==

List owners and managers reserve the right to decide what constitutes
abuse on the [http://groups.google.com Google Groups] mailing lists used by
the Melange project.  While spirited debate is encouraged in order to
stimulate creativity and produce web applications of which we can all
be proud, list participants are expected to respect the fellow list
participants and the Melange community guidelines.

----
_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]
