#summary Guidelines for Melange mailing lists
#labels Contents-Complete,Phase-Guidelines,Importance-Useful

The [MelangeIntro Melange] community uses some mailing lists as the
primary method of communication.  Our goal is to use these mailing lists
to 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 all 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 all of Melange 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
[ContributionReviews#Code_reviews code reviews]) is the `melange-soc-dev`
[http://groups.google.com/group/melange-soc-dev developer mailing list].

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.  (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].

== Issues list ==

The mailing list used by the `codesite-noreply@google.com` account on
[http://code.google.com/ Google Code]
when comments are made in the
[http://code.google.com/p/soc/issues/list issue tracker]
and on
[http://code.google.com/p/soc/wiki wiki pages]
is the `melange-soc-issues`
[http://groups.google.com/group/melange-soc-issues issues mailing list].

This list should probably be treated mostly as an "announcement" list,
since any discussion carried on using the mailing list, instead of in
the issue tracker or wiki comments systems, will not be recorded back
on Google Code.  This leaves someone reading the issue or wiki comments
via Google Code web interface with an incomplete picture.  That being
said, the community will use this mailing list whichever way works
best, and people can always venture over to the `melange-soc-issues`
[http://groups.google.com/group/melange-soc-issues Google Group]
to see what they are missing.

Please use the 
[http://code.google.com/p/soc/issues/list Melange project issue tracker] on
[http://code.google.com/ Google Code] to report new issues or make feature
requests, instead of the mailing lists.

== Commits list ==

The mailing list used for SVN commit messages sent out by the
`codesite-noreply@google.com` account on
[http://code.google.com/ Google Code] is the `melange-soc-commits`
[http://groups.google.com/group/melange-soc-commits svn commits mailing list]. 

Please consider forwarding any replies you might have to a commit
message to the original `melange-soc-dev`
[MailingListsGuidelines#Developer_list developer mailing list]
instead of this list, so that discussions can take place there, in
front of a wider audience. This mailing list exists by request,
merely to make filtering and sorting of `svn commit` noise easier.

Please use the 
[http://code.google.com/p/soc/issues/list Melange project issue tracker] on
[http://code.google.com/ Google Code] to report issues or make feature requests,
instead of the mailing lists.

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