---
title: Apache Polygene™ Community
layout: default
---
<div class="page-header">
    <h1>Apache Polygene™ Community</h1>
    <p class="lead">
        Apache Polygene™ is an open development community effort with an Apache ver 2.0 open source license.
    </p>
</div>
<div class="row-fluid">
    <div class="span2"></div>
    <div class="span8">

        <h2>What does this really mean?</h2>
        <p>
            First of all, we work together to achieve the visions of Apache Polygene™, based on technical merits alone in an open and
            friendly manner, mostly via the dev@polygene.apache.org mailing list. It means that everyone in the community are stake
            holders in the resulting codebase, and noone can claim it is mine.
        </p>
        <p>
            Secondly, all source code, artwork and documentation produced in Apache Polygene™ are licensed very liberally under the Apache
            License ver 2.0. This allows you to use our efforts in your own projects, whether they are open sourced, commercial
            or any other arrangement you like, subject to a few terms like "Must re-distribute a Notice that your product
            contains Apache Polygene™ and such. See the License text for exact details, and please consult with IP rights lawyers about
            this and other Open Source licenses.
        </p>
        <p>
            Thirdly, Apache Polygene™ invites everyone to participate. There are many ways to participate, not only by writing code. See
            list in the <a href="participate.html">Participation</a> section.
        </p>

    </div>
    <div class="span2"></div>
</div>
