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