<!--

    Copyright 2004 The Apache Software Foundation

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!-- $Rev$ $Date$ -->

<html>
<head>
</head>
<body>

<h1>Apache Geronimo Mailing Lists</h1>

<p>
There are currently three publicly available mailing lists for Geronimo:
</p>

<h2>User Mailing List</h2>
<p>The user mailing list is for users of Geronimo to share their experiences
and ask questions.  Many of the developers monitor that list as well, to
make sure questions don't go unanswered.  Currently this list has relatively
low traffic, since Geronimo has not yet published a 1.0 release.</p>
<ul>
  <li><a href="mailto:user-subscribe@geronimo.apache.org">Subscribe</a> to user@geronimo.apache.org</li>
  <li><a href="mailto:user-unsubscribe@geronimo.apache.org">Unsubscribe</a> from user@geronimo.apache.org</li>
  <li>View the <a href="http://nagoya.apache.org/eyebrowse/SummarizeList?listName=user@geronimo.apache.org">user@geronimo.apache.org archives</a></li>
</ul>

<h2>Developer Mailing List</h2>

<p>The developer mailing list is used by the developers to discuss
plans, make decisions, vote on technical issues, etc.  It also gets
change notices whenever issues are added to or updated in JIRA.  This
list has a higher volume, though some conversations take place on IRC as
well.</p>
<ul>
  <li><a href="mailto:dev-subscribe@geronimo.apache.org">Subscribe</a> to dev@geronimo.apache.org</li>
  <li><a href="mailto:dev-unsubscribe@geronimo.apache.org">Unsubscribe</a> from dev@geronimo.apache.org</li>
  <li>View the <a href="http://nagoya.apache.org/eyebrowse/SummarizeList?listName=dev@geronimo.apache.org">dev@geronimo.apache.org archives</a></li>
</ul>

<h2>Source Control Mailing List</h2>
<p>This list receives notifications (with diffs) every time a change is
committed to the Geronimo source tree.  It also receives change notices
for changes to the Geronimo Wiki.</p>
<ul>
  <li><a href="mailto:scm-subscribe@geronimo.apache.org">Subscribe</a> to scm@geronimo.apache.org</li>
  <li><a href="mailto:scm-unsubscribe@geronimo.apache.org">Unsubscribe</a> from scm@geronimo.apache.org</li>
  <li>View the <a href="http://nagoya.apache.org/eyebrowse/SummarizeList?listName=scm@geronimo.apache.org">scm@geronimo.apache.org archives</a></li>
</ul>

<h2>Other Mailing Lists</h2>
<p>The Geronimo PMC has a mailing list to resolve any administrative issues,
and the group working on TCK has a mailing list to discuss compliance issues.
The first is limited to PMC members (most committers on the project), while the
second is limited to committers who have signed an NDA to work on the TCK
compliance effort.</p>

</body>
</html>
