<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You 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.
-->

<document>

<properties>
  <title>Apache JSPWiki</title>
  <author email="jspwiki-dev@incubator.apache.org">JSPWiki Developer Team</author>
</properties>

<body>

<section name="Getting involved">

<p>JSPWiki requires the help of many kinds of people.  The best way to get involved
is to join the <a href="mailing.html">mailing lists</a> and say that you would like
to help.  Some ideas on how you could improve us are:</p>

<ul>
    <li>Contribute a new plugin - it takes only a bit of coding effort to write
    a new plugin or a filter.</li>
    <li>Contribute to the web design - we all like the software to look better
    and be more logical</li>
    <li>Help maintain the documentation wiki - we need people who fight against spammers
    and keep the documentation in a logical order.  Even a few edits a week will be
    of a big help!</li>
    <li>File bugs - despite our best efforts, we are not perfect.</li>
    <li>Contribute hard code into the trunk - just take a moment to familiarize yourself
    with the the coding guidelines
    and you'll be fine.</li>
    <li>Participate on the mailing list and encourage others to do the stuff above</li>
    <li>Co-ordinate things - there's a whole lot of stuff that needs co-ordination
    in a large project like this.  Our JIRA is filled with issues that need triaging,
    and clarification and all that stuff.</li>    
</ul>

<p>The point really is that despite your skill levels at coding or the time you can
afford to put into helping us, there's something you can always do!  Five minutes per
week of deleting wikispam is five minutes for someone else to spend in improving
the software.</p>

</section>

</body>
</document>
