<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright 2003-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.
-->
  

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

<faqs title="Frequently Asked Questions">

  <part id="general">
    <title>General</title>
   
    <faq id="what-is">
      <question>What is Geronimo?</question>
      <answer>
        Geronimo is Apache's ASF-licenced J2EE server project.
        Please see the <a href="index.html">Overview</a> for more
        information.
      </answer>
    </faq>

    <faq id="how-to-help">
      <question>I'd like to find out more about the project and
        possibly contribute. What do I do next?
      </question>
      <answer>Participation on the project is via the mailing
        list and the source code repository. You join by subscribing
        to the mailing list and participating in discussions. You
        can help by contributing your ideas, enthusiasm, code,
        documentation, and tests. The fundamental tenet of the Apache
        Software Foundation is that great communities build great
        code. The emphasis is on community; the code comes from that.
        If you want to help, just join the mailing list, see what
        needs to be done, and do it. Welcome!
      </answer>
    </faq> 
    
    <faq id="mailing-list">
      <question>Where is the mailing list, and how can I
        subscribe?
      </question>
      <answer>
        The developers mailing list is dev@geronimo.apache.org, a
        high-volume list currently receiving from 600 to 1,000 messages
        a month. You can subscribe by sending an e-mail to
        <a href="mailto:dev-subscribe@geronimo.apache.org">dev-subscribe@geronimo.apache.org</a>. To catch up on old messages, read the
        <a href="http://nagoya.apache.org/eyebrowse/SummarizeList?listName=dev@geronimo.apache.org">mailing
        list archive</a>.
        <br/>
        <br/>
        The users mailing list is user@geronimo.apache.org. You can subscribe by sending an e-mail to
        <a href="mailto:user-subscribe@geronimo.apache.org">user-subscribe@geronimo.apache.org</a>. To catch up on old messages, read the
        <a href="http://nagoya.apache.org/eyebrowse/SummarizeList?listName=user@geronimo.apache.org">mailing
        list archive</a>.
      </answer>
    </faq>

    <faq id="introductions">
      <question>Does this project use a wiki?
      </question>
      <answer>
        It does -- the
        <a href="http://wiki.apache.org/geronimo/FrontPage">Geronimo wiki</a>
        compliments the work taking place on the mailing list and provides
        additional information on the project. To track changes to the wiki,
        visit the <a href="http://wiki.apache.org/geronimo/RecentChanges">recent
        changes</a> page.
      </answer>
    </faq>
  </part>
  <!--
    <faq id="">
      <question></question>
      <answer>
      </answer>
    </faq>
  -->
</faqs>
   
