<!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" />
  <script src="https://www.apachecon.com/event-images/snippet.js"></script>
        <title>geronimo
 - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row"><div class="span6"><a href="https://www.apache.org/"><img src="http://www.apache.org/img/asf_logo.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span7"><a href="/"><img src="https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png" alt="The Apache Software Foundation Incubator" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span2"><a href="https://www.apache.org/foundation/contributing.html"><img src="https://www.apache.org/images/SupportApache-small.png" height="100" width="100"/></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="../cookbook/">Incubator Cookbook</a></li> 
          <li><a href="../policy/incubation.html">Incubation Policy</a></li> 
          <li><a href="../guides/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> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects">Project List</a></li> 
          <li><a href="../clutch">Clutch Report</a></li> 
          <li><a href="../ip-clearance">IP Clearance</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/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>
    <div id="menuheader">
      <a class="acevent" data-format="square" data-width="135" data-mode="light" data-event="random"></a>
    </div>
   </div>
   
   <div class="span12">
            <h2 id='Geronimo+Project+Incubation+status'><img src="../images/redarrow.gif" />Geronimo Project Incubation status
</h2>
<div class="section-content">
<h3 id='Apache+Geronimo+Now+A+Top+Level+Project'>Apache Geronimo Now A Top Level Project
</h3>
<div class="section-content">
<p>The Apache Geronimo project has completed incubation. Please go to
the main project site :
</p>
<p>
          <a href="http://geronimo.apache.org/">http://geronimo.apache.org/
</a>
        </p>
<p>This page tracked the project status, incubator-wise. Items marked

          <strong>DONE
</strong>have been completed.

        </p>
<p><span class="graduated">The Geronimo project graduated on 2004-05-26</span></p>
<p>This page is of historical interest only.
</p>
</div>
</div>
        <h2 id='News'><img src="../images/redarrow.gif" />News
</h2>
<div class="section-content">
<h3 id='2003-11-11'>2003-11-11
</h3>
<div class="section-content">
<p>We have recieved a mail

          <a href="geronimo/20031031_jboss.pdf">a letter on behalf of the JBoss Group, LCC dated October 31, 2003
</a>that asks for clarifications regarding similarity between parts of
the Geronimo codebase and the JBoss codebase.

        </p>
<p>We are thus in the process of actively reviewing not only the
specific claims but also the code base in general.
</p>
</div>
</div>
        <h2 id='Project+Website'><img src="../images/redarrow.gif" />Project Website
</h2>
<div class="section-content">
<p>A small info page for Geronimo can be found

        <a href="geronimo/index.html">here
</a>.

      </p>
<p>The wiki for Geronimo is at

        <a href="http://wiki.apache.org/geronimo/">http://wiki.apache.org/geronimo/
</a>
      </p>
</div>
        <h2 id='Identify+the+project+to+be+incubated'><img src="../images/redarrow.gif" />Identify the project to be incubated
</h2>
<div class="section-content">
<p>
        <strong>DONE
</strong>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.

      </p>
<p>
        <strong>DONE
</strong>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.

      </p>
<p>
        <strong>DONE
</strong>If request from outside Apache to enter an existing Apache project,
then post a message to that project for them to decide on acceptance.

      </p>
<p>
        <strong>DONE
</strong>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.

      </p>
</div>
        <h2 id='Interim+responsibility'><img src="../images/redarrow.gif" />Interim responsibility
</h2>
<div class="section-content">
<p>
        <strong>DONE
</strong>Who has been identified as the Mentor for the incubation?

      </p>
<p>Geir Magnusson Jr. Jim Jagielski
</p>
<p>
        <strong>DONE
</strong>Are they tracking progress in the file

      </p>
<p>incubator/projects/{project_name}/status
</p>
</div>
        <h2 id='Copyright'><img src="../images/redarrow.gif" />Copyright
</h2>
<div class="section-content">
<p>
        <strong>DONE
</strong>Have the papers that transfer rights to the ASF been received? It is
only necessary to transfer rights for the package, the core code, and
any new code produced by the project.

      </p>
<p>
        <strong>(new codebase)
</strong>
      </p>
<p>
        <strong>DONE
</strong>Have the files been updated to reflect the new ASF copyright?

      </p>
<p>Verify distribution rights:
</p>
<ul>
        <li>For all code included with the distribution that is not under the
Apache license, do we have the right to combine with Apache-licensed
code and redistribute?
</li>
      </ul>
<p>done except for questions about the Sun j2ee schemas. We are waiting
for information from Geir on the Sun and Apache position on this
question.
</p>
<p>
        <strong>DONE
</strong>Is all source code distributed by the project 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?

      </p>
<ul>
        <li>Check all clarification requests from the JBoss group, and in
particular check that

          <a href="geronimo/20031031_jboss.pdf">this letter dated 2003-10-31
</a>has been properly addressed. These claims were extensively researched
by many Apache contributors and Geronimo committers. The official
conclusions are ???

        </li>
      </ul>
</div>
        <h2 id='Establish+a+list+of+active+committers'><img src="../images/redarrow.gif" />Establish a list of active committers
</h2>
<div class="section-content">
<ul>
        <li>Are all active committers in the STATUS file?

          <strong>DONE
</strong>Do they have accounts on cvs.apache.org?

          <strong>DONE
</strong>Have they submitted a contributors agreement?

        </li>
      </ul>
</div>
        <h2 id='Infrastructure'><img src="../images/redarrow.gif" />Infrastructure
</h2>
<div class="section-content">
<p>
        <strong>DONE
</strong>CVS modules created and committers added to avail file?

        <strong>DONE
</strong>Mailing lists set up and archived?

        <strong>DONE
</strong>Problem tracking system (JIRA)?

        <strong>DONE
</strong>Has the project migrated to our infrastructure?

      </p>
</div>
        <h2 id='Collaborative+Development'><img src="../images/redarrow.gif" />Collaborative Development
</h2>
<div class="section-content">
<p>
        <strong>DONE
</strong>Have all of the active long-term volunteers been identified and
acknowledged as committers on the project?

      </p>
<p>
        <strong>DONE
</strong>Are there three or more independent committers?

      </p>
<p>(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.)
</p>
<p>
        <strong>DONE
</strong>Are project decisions being made in public by the committers?

      </p>
<ul>
        <li>Are the decision-making guidelines published and agreed to by all of
the committers?
</li>
      </ul>
</div>
        <h2 id='Incubation+status+reports'><img src="../images/redarrow.gif" />Incubation status reports
</h2>
<div class="section-content">
<h3 id='2004-01-20'>2004-01-20
</h3>
<div class="section-content">
<div class="source"><code>Status report for the Incubator Geronimo Project * is the STATUS file
up to date? (also post link) Yes
/home/cvs/incubator/site/projects/geronimo.cwiki * any legal,
cross-project or personal issues that still need to be addressed? A
serious legal issue was raised by JBoss Group LLC in a letter dated
10/31/2003. This issue has been thoroughly investigated and the
conclusion of the community is that the issues raised in the letter
are unfounded. A question has arisen whether it is permissible to
include XML Schema documents for J2EE deployment descriptors in CVS.
We have raised the issue with Sun and are awaiting a response. * what
has been done for incubation since the last report? The establishment
of a PPMC has aided the organization of the project. Added Gianny
D'Amour as committer. The community voted to keep the name &quot;Geronimo&quot;
The ASF has become a J2EE licensee, allowing us to start the
certification process. * plans and expectations for the next period?
To start testing with the J2EE TCK. To work with the Incubator PMC to
provide an interim release allowing people to use Geronimo without
building from source making it available to a larger community. To
address any remaining issues before applying to leave the Incubator.
* any recommendations for how incubation could run more smoothly for
you? The establishment of the PPMC has been a great help.
</code>
</div>
</div>
</div>
        <h2 id='Organizational+acceptance+of+responsibility+for+the+project'><img src="../images/redarrow.gif" />Organizational acceptance of responsibility for the project
</h2>
<div class="section-content">
<p>If graduating to an existing PMC, has the PMC voted to accept it?
(Not applicable)
</p>
<ul>
        <li>If graduating to a new PMC, has the board voted to accept it?
</li>
      </ul>
</div>
        <h2 id='Incubator+sign-off'><img src="../images/redarrow.gif" />Incubator sign-off
</h2>
<div class="section-content">
<ul>
        <li>Has the Incubator decided that the project has accomplished all of
the above tasks?
</li>
      </ul>
<p>Other issues: 2003/12/21 vote on keeping the name Geronimo +1
jboynes, dblevins, adc, gstein, jdillon, djencks, dims, chirino,
dain, janb, gregwilkins, bsnyder, rmonson, jules, geir -1 jstrachan
Decision made on 2003/12/24 to keep the name Geronimo
</p>
<p>List of active committers: (see also the root project.xml maven
control file)
</p>
<p>Jan Bartel Jeremy Boynes Alan Cabrera Hiram Chinirio Gianni Damour
Jason Dillon Jules Gosnell David Jencks Richard Monson-Haefel Aaron
Mulder Bruce Snyder James Strachan Dain Sundstrom Greg Wilkins
</p>
</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-2024 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>
