<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  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. 
-->
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
  <link rel="stylesheet" href="../style/style.css" type="text/css" />
        <title>Apache UIMA Incubation Status - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row">
<div class="span12">
  <a href="http://www.apache.org/"><img src="http://incubator.apache.org/images/asf_logo_wide_small.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" width="62%"/></a>
</div>
<div class="span4">
<a href="http://incubator.apache.org/"><img src="../images/egg-logo2.png" alt="Apache Incubator" border="0"/></a>
</div>
</div>
  <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  
  <div class="row">
   <div class="span4">
    <form action="http://www.google.com/search" method="get">
     <input value="incubator.apache.org" name="sitesearch" type="hidden"/>
     <input size="20" name="q" id="query" type="text" value="search..."
      onclick="if(this.value == 'search...') {this.value = ''}"/>
     <input name="Search" value="Go" type="submit"/>
    </form>
          <div class="menuheader">General</div>
    <menu compact="compact">
          <li><a href="../index.html">Welcome</a></li> 
          <li><a href="../incubation/Process_Description.html">Incubation Overview</a></li> 
          <li><a href="../incubation/Incubation_Policy.html">Incubation Policy</a></li> 
          <li><a href="../guides/index.html">Incubation Guides</a></li> 
          <li><a href="../incubation/Roles_and_Responsibilities.html">Roles and Responsibilities</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li> 
          <li><a href="../whoweare.html">Who We Are</a></li> 
          <li><a href="../sitemap.html">Site Map</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects/index.html">Project List</a></li> 
          <li><a href="../clutch.html">Clutch Report</a></li> 
          <li><a href="../ip-clearance/index.html">IP Clearance</a></li> 
          <li><a href="../history/index.html">Incubator History</a></li> 
            </menu>
      <div class="menuheader">Entry Guides</div>
    <menu compact="compact">
          <li><a href="../guides/proposal.html">Proposal Guide</a></li> 
            </menu>
      <div class="menuheader">Podling Guides</div>
    <menu compact="compact">
          <li><a href="../guides/committer.html">Podling Committers</a></li> 
          <li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li> 
          <li><a href="../guides/mentor.html">Podling Mentor</a></li> 
          <li><a href="../guides/releasemanagement.html">Podling Releases</a></li> 
          <li><a href="../guides/branding.html">Podling Branding/Publicity</a></li> 
          <li><a href="../guides/sites.html">Podling Websites</a></li> 
          <li><a href="../guides/graduation.html">Graduation</a></li> 
          <li><a href="../guides/retirement.html">Retirement</a></li> 
            </menu>
      <div class="menuheader">Other Guides</div>
    <menu compact="compact">
          <li><a href="../guides/participation.html">Participation</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="../guides/pmc.html">Incubator PMC (IPMC)</a></li> 
          <li><a href="../guides/chair.html">IPMC Chair</a></li> 
          <li><a href="../guides/lists.html">Mailing Lists</a></li> 
          <li><a href="../guides/website.html">Incubator Website</a></li> 
            </menu>
      <div class="menuheader">ASF</div>
    <menu compact="compact">
          <li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li> 
          <li><a href="http://www.apache.org/dev/">Developer Documentation</a></li> 
          <li><a href="http://www.apache.org/foundation/">Foundation</a></li> 
          <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li> 
          <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> 
            </menu>
    <!-- start Ads Server -->
    <iframe src="http://www.apache.org/ads/buttonbar.html"
     style="border-width:0; float: left" frameborder="0" scrolling="no"
     width="135" height="265"></iframe>
    <!-- end Ads Server -->
   </div>
   
   <div class="span12">
            <h2 id='Apache+UIMA+Project+Incubation+Status'><img src="../images/redarrow.gif" />Apache UIMA Project Incubation Status</h2>
<div class="section-content">
<p>This page tracks the project status, incubator-wise. For more general project status, look on the project website.</p>
<p><span class="graduated">The UIMA project graduated on 2010-03-18</span></p>
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<p>The Apache UIMA Project will create a standardized component framework for the analysis of unstructured data, 
        guided by the UIMA Oasis Standard (http:/www.oasis-open.org)  
        It will include an SDK and tooling for composing and running analytic components written in Java and C++; 
        a scaleout capability, and a set of annotators and other components that can be used with the framework.</p>
</div>
        <h2 id='News'><img src="../images/redarrow.gif" />News</h2>
<div class="section-content">
<p>
      <i>Listed newest first.</i>
      </p>
<ul>
        <li>2010-03-18 Apache UIMA graduates to a top-level project</li>
        <li>2010-01-26 Apache UIMA 2.3.0-incubating released</li>
        <li>2010-01-04 New committer: Bhavani Iyer</li>
        <li>2009-08-10 New committer: Tommaso Teofili</li>
        <li>2009-07-11 New committer: Burn Lewis</li>
        <li>2009-03-19 UIMA approved as an OASIS Standard</li>
        <li>2008-11-19 New committer: Tong Fin</li>
        <li>2008-11-19 New committer: Jerry Cwiklik</li>
        <li>2008-07-24 Apache UIMA-AS 2.2.2-incubating released</li>
        <li>2008-05-07 Apache UIMA 2.2.2-incubating released</li>
        <li>2007-12-19 Apache UIMA 2.2.1-incubating released</li>
        <li>2007-10-08 New committer: Jörn Kottmann</li>
        <li>2007-08-23 Apache UIMA 2.2.0-incubating released</li>
        <li>2007-03-14 Apache UIMA 2.1.0-incubating released</li>
        <li>2006-12-07 Establish UIMA Sandbox</li>
        <li>2006-10-05 Project accepted by the Incubator PMC</li>
        <li>2006-08-23 Project <a href="http://wiki.apache.org/incubator/UimaProposal">proposed</a> to the Incubator PMC</li>
      </ul>
</div>
        <h2 id='Project+info'><img src="../images/redarrow.gif" />Project info</h2>
<div class="section-content">
<ul>
        <li><a href="http://uima.apache.org/">Main Website</a></li>
      </ul>
<ul>
        <li>link to the page(s) that tell how to participate (Website, Mailing
lists, Bug tracking, Source code) : 
         <ul>
          <li><a href="http://uima.apache.org/contribution-policy.html">Contribution Policy</a></li>
          <li><a href="http://uima.apache.org/project-guidelines.html">Project Guidelinese</a></li>
          <li><a href="http://uima.apache.org/get-involved.html">Getting Involved</a></li>
         </ul></li>
      </ul>
<ul>
        <li>link to the project status file (Committers, non-incubation action
         items, project resources, etc)</li>
      </ul>
<p>
      If the project website and code repository are not yet setup, use the
      following table:
      </p>
<table class="colortable" width="100%">
        <tr>
          <th>item</th>
          <th>type</th>
          <th>reference</th>
        </tr>
        <tr>
          <td>Website</td>
          <td>www</td>
          <td id="www">
            <a href="http://uima.apache.org/">http://uima.apache.org/</a></td>
        </tr>
        <tr>
          <td />
          <td>wiki</td>
          <td><a href="http://cwiki.apache.org/UIMA/">http://cwiki.apache.org/UIMA/</a><br /></td>
        </tr>
        <tr>
          <td>Mailing lists</td>
          <td>dev</td>
          <td id="mail-dev"><code>dev</code><code>@</code><code>uima.apache.org</code></td>
        </tr>
        <tr>
          <td />
          <td>commits</td>
          <td id="mail-commits"><code>commits</code><code>@</code><code>uima.apache.org</code></td>
        </tr>
        <tr>
          <td />
          <td>user</td>
          <td id="mail-user"><code>user</code><code>@</code><code>uima.apache.org</code></td>
        </tr>
        <tr>
          <td />
          <td>private (PPMC)</td>
          <td id="mail-private"><code>private</code><code>@</code><code>uima.apache.org</code></td>
        </tr>
        <tr>
          <td>Bug tracking</td>
          <td>JIRA</td>
          <td id="tracker"><a href="http://issues.apache.org/jira/browse/UIMA">http://issues.apache.org/jira/browse/UIMA</a></td>
        </tr>
        <tr>
          <td>Source code</td>
          <td>svn</td>
          <td id="svn"><a href="http://svn.apache.org/repos/asf/uima">http://svn.apache.org/repos/asf/uima</a></td>
        </tr>
        <tr>
          <td>Mentors</td>
          <td>jukka</td>
          <td>Jukka Zitting</td>
        </tr>
        <tr>
          <td />
          <td>rubys</td>
          <td>Sam Ruby</td>
        </tr>
        <tr>
          <td />
          <td>coar</td>
          <td>Ken Coar</td>         
        </tr>
        <tr>
          <td>Committers</td>
          <td>mbaessler</td>
          <td>Michael Baessler</td>
        </tr>
        <tr>
          <td />
          <td>cwiklik</td>
          <td>Jerry Cwiklik</td>
        </tr>
        <tr>
          <td />
          <td>eae</td>
          <td>Edward Epstein</td>
        </tr>
        <tr>
          <td />
          <td>tongfin</td>
          <td>Tong Fin</td>
        </tr>
        <tr>
          <td />
          <td>twgoetz</td>
          <td>Thilo Goetz</td>
        </tr>
        <tr>
          <td />
          <td>bhavani</td>
          <td>Bhavani Iyer</td>
        </tr>
        <tr>
          <td />
          <td>joern</td>
          <td>Jörn Kottmann</td>
        </tr>
       <tr>
          <td />
          <td>alally</td>
          <td>Adam Lally</td>
        </tr>
        <tr>
          <td />
          <td>burn</td>
          <td>Burn Lewis</td>
        </tr>
        <tr>
          <td />
          <td>schor</td>
          <td>Marshall Schor</td>
        </tr>
        <tr>
          <td />
          <td>tommaso</td>
          <td>Tommaso Teofili</td>
        </tr>
      </table>
</div>
        <h2 id='Incubation+status+reports'><img src="../images/redarrow.gif" />Incubation status reports</h2>
<div class="section-content">
<p>These are kept on the incubator wiki.
       <br /><br />
      <a href="http://wiki.apache.org/incubator/January2010">January 2010</a><br />
      <a href="http://wiki.apache.org/incubator/October2009">October 2009</a><br />
      <a href="http://wiki.apache.org/incubator/July2009">July 2009</a><br />
      <a href="http://wiki.apache.org/incubator/April2009">April 2009</a><br />
      <a href="http://wiki.apache.org/incubator/January2009">January 2009</a><br /> 
      <a href="http://wiki.apache.org/incubator/October2008">October 2008</a><br />
      <a href="http://wiki.apache.org/incubator/July2008">July 2008</a><br />
      <a href="http://wiki.apache.org/incubator/April2008">April 2008</a><br />
      <a href="http://wiki.apache.org/incubator/January2008">January 2008</a><br />
      <a href="http://wiki.apache.org/incubator/October2007">October 2007</a><br />
      <a href="http://wiki.apache.org/incubator/July2007">July 2007</a><br />
      <a href="http://wiki.apache.org/incubator/April2007">April 2007</a><br />
      <a href="http://wiki.apache.org/incubator/January2007">January 2007</a><br />
      <a href="http://wiki.apache.org/incubator/December2006">December 2006</a><br />
      <a href="http://wiki.apache.org/incubator/November2006">November 2006</a>
              </p>
</div>
        <h2 id='Incubation+work+items'><img src="../images/redarrow.gif" />Incubation work items</h2>
<div class="section-content">
<h3 id='Project+Setup'>Project Setup</h3>
<div class="section-content">
<p>
        This is the first phase of incubation, needed to start the project at
        Apache.
        </p>
<p>
        <em>Item assignment is shown by the Apache id.</em>
        <em>Completed tasks are shown by the completion date (YYYY-MM-dd).</em>
        </p>
<h4 id='Identify+the+project+to+be+incubated'>Identify the project to be incubated</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2007 02 07</td>
              <td>Make sure that the requested project name does not
               already exist and check www.nameprotect.com to be sure
               that the name is not already trademarked for an existing
               software product.</td>
            </tr>
            <tr>
              <td>N/A</td>
              <td>If request from an existing Apache project to adopt
               an external package, then ask the Apache project for the
               cvs module and mail address names.</td>
            </tr>
            <tr>
              <td>N/A</td>
              <td>If request from outside Apache to enter an existing
               Apache project, then post a message to that project for
               them to decide on acceptance.</td>
            </tr>
            <tr>
              <td>2006-10-27</td>
              <td>If request from anywhere to become a stand-alone PMC,
               then assess the fit with the ASF, and create the lists
               and modules under the incubator address/module names if
               accepted.</td>
            </tr>
          </table>
</div>
<h4 id='Interim+responsibility'>Interim responsibility</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2006-10-05</td>
              <td>Identify all the Mentors for the incubation, by asking
               all that can be Mentors.</td>
            </tr>
            <tr>
              <td>2006-11-03</td>
              <td>Subscribe all Mentors on the incubator PMC and general
               lists.</td>
            </tr>
            <tr>
              <td>legacy</td>
              <td>Give all Mentors access to all incubator CVS modules.
               (to be done by PMC chair)</td>
            </tr>
            <tr>
              <td>2006-10-27</td>
              <td>Tell Mentors to track progress in the file
               'incubator/projects/uima.html'</td>
            </tr>
          </table>
</div>
<h4 id='Copyright'>Copyright</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2006 11 02</td>
              <td>Check and make sure that the papers that transfer
               rights to the ASF have been received. It is only
               necessary to transfer rights for the
               package, the core code, and any new code produced by
               the project.</td>
            </tr>
            <tr>
              <td>2007 02 01</td>
              <td>Check and make sure that the files that have
               been donated have been updated to reflect the new ASF
               copyright.</td>
            </tr>
          </table>
</div>
<h4 id='Verify+distribution+rights'>Verify distribution rights</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>N/A</td>
              <td>Check and make sure that for all code included with
               the distribution that is not under the Apache license, the
               ASF has the right to combine with Apache-licensed code and
               redistribute.</td>
            </tr>
            <tr>
              <td>2007 02 01</td>
              <td>Check and make sure that all source code distributed
               by the project is covered by one or more of the
               following approved licenses: Apache, BSD, Artistic,
               MIT/X, MIT/W3C, MPL 1.1, or something with essentially
               the same terms.</td>
            </tr>
          </table>
</div>
<h4 id='Establish+a+list+of+active+committers'>Establish a list of active committers</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2006-11-03</td>
              <td>Check that all active committers have submitted a
               contributors agreement.  Is required by ASF process.</td>
            </tr>
            <tr>
              <td>2006-11-03</td>
              <td>Add all active committers in the STATUS file.
               See above.</td>
            </tr>
            <tr>
              <td>2006-11-03</td>
              <td>Ask root for the creation of committers' accounts
               on svn.apache.org.</td>
            </tr>
          </table>
</div>
<h4 id='Infrastructure'>Infrastructure</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2006-11-03</td>
              <td>Ask infrastructure to create source repository modules
               and grant the committers karma.</td>
            </tr>
            <tr>
              <td>2006-11-03</td>
              <td>Ask infrastructure to set up and archive Mailing lists.</td>
            </tr>
            <tr>
              <td>2006-11-03</td>
              <td>Decide about and then ask infrastructure to setup
               an issuetracking system (Bugzilla, Scarab, Jira).</td>
            </tr>
            <tr>
              <td>2006-11-02</td>
              <td>Migrate the project to our infrastructure.</td>
            </tr>
          </table>
</div>
<h4 id='Project+specific'>Project specific</h4>
<div class="section-content">
<p>
          <em>None</em>
          </p>
</div>
</div>
<h3 id='Incubation'>Incubation</h3>
<div class="section-content">
<p>These action items have to be checked for during the whole
        incubation process.</p>
<p><em>These items are not to be signed as done during incubation,
        as they may change during incubation.</em>
        <em>They are to be looked into and described in the status reports and
        completed in the request for incubation signoff.</em></p>
<h4 id='Collaborative+Development'>Collaborative Development</h4>
<div class="section-content">
<ul>
            <li>Have all of the active long-term volunteers been identified and
acknowledged as committers on the project?</li>
            <li>Are there three or more independent committers? (The legal definition of independent is long and boring, but basically it means that there is no binding relationship between the individuals, such as a shared employer, that is capable of overriding their free will as individuals, directly or indirectly.)</li>
            <li>Are project decisions being made in public by the committers?</li>
            <li>Are the decision-making guidelines published and agreed to by all of the committers?</li>
          </ul>
</div>
<h4 id='Licensing+awareness'>Licensing awareness</h4>
<div class="section-content">
<ul>
            <li>Are all licensing, trademark, credit issues being taken care of and acknowleged by all committers?</li>
          </ul>
</div>
<h4 id='Project+Specific'>Project Specific</h4>
<div class="section-content">
<p>
            <em>None</em>
          </p>
</div>
</div>
<h3 id='Exit'>Exit</h3>
<div class="section-content">
<p>
          <em>Things to check for before voting the project out.</em>
        </p>
<h4 id='Organizational+acceptance+of+responsibility+for+the+project'>Organizational acceptance of responsibility for the project</h4>
<div class="section-content">
<ul>
            <li>If graduating to an existing PMC, has the PMC voted to accept it?</li>
            <li>If graduating to a new PMC, has the board voted to accept it?</li>
          </ul>
</div>
<h4 id='Incubator+sign-off'>Incubator sign-off</h4>
<div class="section-content">
<ul>
            <li>Has the Incubator decided that the project has accomplished all of the above tasks?</li>
          </ul>
</div>
</div>
</div>
       </div>
   </div>
  
   <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span16 footer">
     Copyright &#169; 2009-2016 The Apache Software Foundation<br />
     Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
     Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
     
     
    </div>
  </div>
 </div> 
 </body>
</html>
