#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 `soc@googlecode.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
`soc@googlecode.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.

== Build list ==

The mailing list used for discussing passing and failing tests and other build health issues is the `melange-soc-build` [http://groups.google.com/group/melange-soc-build build health mailing list].

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