<!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>Apache XML Beans C++ Incubation Status - 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='Apache+xmlbeanscxx+Incubation+Status'><img src="../images/redarrow.gif" />Apache XML Beans C++ Incubation Status</h2>
<div class="section-content">
<div class="section">
        <p>This page tracks the incubation status of the Apache XML Beans C++ project.</p>
        <p><span class="retired">The XMLBeans/C++ project retired in 2007-05-16</span></p>
      </div>
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<div class="section">
        <p> 
        
          The Apache XML Beans C++ project will produce a C++ equivalent 
          to Apache's XMLBeans project for Java.


        </p>
        <p> 
          
          XMLBeans provides the developer with an 'object' representation of 
          structured XML data conforming to Schema language. Additionally, 
          XMLBeans enables the developer to handle XML documents directly, 
          achieving increased performance and flexibility in a single framework.
          The C++ version will provide a similar user experience to the popular 
          Java version, but will be optimized to take advantage of the powerful, 
          high-performance features of C++.


        </p>
      </div>
</div>
        <h2 id='News'><img src="../images/redarrow.gif" />News</h2>
<div class="section-content">
<div class="section">
        <ul>
          <li>

            2005-06-06 Project accepted by the Web services PMC.

          </li>
          <li>

            2005-05-15 Project proposed on general@incubator mailing.

          </li>
          <li>

            2005-02-09 xmlbeanscxx <a href="http://incubator.apache.org/xmlbeanscxx">project
            page</a> and <a href="http://incubator.apache.org/projects/xmlbeanscxx.html">status
            page</a> committed to subversion.

          </li>
        </ul>
      </div>
</div>
        <h2 id='Project+Info'><img src="../images/redarrow.gif" />Project Info</h2>
<div class="section-content">
<div class="section">
        <table>
          <tr>
            <th>item</th>
            <th>id</th>
            <th>reference</th>
          </tr>
          <tr>
            <td>Web site</td>
            <td>www</td>
            <td>
              <a href="http://incubator.apache.org/xmlbeanscxx/">
                http://incubator.apache.org/xmlbeanscxx/</a>
            </td>
          </tr>
          <tr>
            <td />
            <td>wiki</td>
            <td><a href="http://wiki.apache.org/xmlbeanscxx/">http://wiki.apache.org/xmlbeanscxx/</a></td>
          </tr>
          <tr>
            <td>Mailing lists</td>
            <td>dev</td>
            <td>
              <a href="mailto:cxx-dev@xmlbeans.apache.org">cxx-dev@xmlbeans.apache.org</a>
            </td>
          </tr>
          <tr>
            <td />
            <td>svn</td>
            <td>
              <a href="mailto:cxx-commits@xmlbeans.apache.org">
                cxx-commits@xmlbeans.apache.org</a>
            </td>
          </tr>
          <tr>
            <td />
            <td>ppmc</td>
            <td>
              <a href="mailto:">
                TBD</a>
            </td>
          </tr>
          <tr>
            <td>Moderators</td>
            <td>abrookes</td>
            <td>
              <a href="mailto:abrookes_at_apache.org">Allen Brookes</a>
            </td>
          </tr>
          <tr>
            <td />
            <td>dhaney</td>
            <td>
              <a href="mailto:dhaney_at_apache.org">David Haney</a>
            </td>
          </tr>
          <tr>
            <td>Bug tracking</td>
            <td>TBD</td>
            <td>
              <a href="">
                TBD</a>
            </td>
          </tr>
          <tr>
            <td>Source code</td>
            <td>svn</td>
            <td>
              <a href=" ">
                </a>
            </td>
          </tr>
          <tr>
            <td>Sponsor</td>
            <td />
            <td>
              <a href="mailto:pmc_at_incubator.apache.org">
                Incubator PMC</a>
            </td>
          </tr>
          <tr>
            <td>Mentors</td>
            <td>Cliff Schmidt</td>
            <td>
              <a href="mailto:">
                Cliff Schmidt</a>(See this <a href="http://www.mail-archive.com/general@incubator.apache.org/msg04836.html">post</a>.)

            </td>
          </tr>
          <tr>
            <td id="committers">Committers</td>
            <td>abrookes</td>
            <td><a href="mailto:abrookes_at_roguewave_dot_com">
                Allen Brookes</a></td>
          </tr>
          <tr>
            <td>hbuelow</td>
            <td>
              <a href="mailto:heidi.buelow_at_apache.org">
                Heidi Buelow</a>
            </td>
          </tr>
          <tr>
            <td />
            <td>dhaney</td>
            <td>
              <a href="mailto:dhaney_at_apache.org">
                David Haney</a>
            </td>
          </tr>
          <tr>
            <td />
            <td>myoder</td>
            <td>
              <a href="mailto:yoder_at_roguewave.com">Michael Yoder</a>
            </td>
          </tr>
          <tr>
            <td />
            <td>ttriemstra</td>
            <td>
              <a href="mailto:ttriemstra_at_apache_dot_org">Tim Triemstral</a>
            </td>
          </tr>
          <tr>
            <td />
            <td> </td>
            <td>
              <a href="mailto:tbd">TBD</a>
            </td>
          </tr>
        </table>
        <p>

          Committers  in  <em>italics</em>do  not  have  a  signed  <a href="http://incubator.apache.org/forms/ASF_Contributor_License_2_form.pdf">Contributor
          License Agreement</a> on file.

        </p>
      </div>
</div>
        <h2 id='Incubation+Status+Reports'><img src="../images/redarrow.gif" />Incubation Status Reports</h2>
<div class="section-content">
<div class="section">
        <table>
          <tr>
            <th>file</th>
            <th>note</th>
          </tr>
          <tr>
            <td>
              TBD
            </td>
            <td>TBD</td>
          </tr>
        </table>
      </div>
</div>
        <h2 id='Incubation+Work+Items'><img src="../images/redarrow.gif" />Incubation Work Items</h2>
<div class="section-content">
<p />
<h3 id='Project+Setup'>Project Setup</h3>
<div class="section-content">
<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>TBD</td>
              <td>

                Make  sure that  the requested  project name  does not
                already        exist        and        check        <a href="http://www.nameprotect.com">NameProtect</a>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>N/A</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>TBD</td>
              <td>

                Identify all the Mentors for the incubation, by asking
                all that can be Mentors.

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>Subscribe all Mentors on the pmc and general lists.</td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Give all  Mentors access to all  incubator SVN modules
                (to be done by PMC chair).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>Tell Mentors to track progress in the status file.</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>TBD</td>
              <td>

                Check  and make  sure  that 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.

              </td>
            </tr>
            <tr>
              <td>TBD</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>TBD</td>
              <td>

                Check and  make sure that  for all code  included with
                the distribution that is not under the Apache license,
                has the right to combine with Apache-licensed code and
                redistribute.

              </td>
            </tr>
            <tr>
              <td>TBD</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>TBD</td>
              <td>

                Check  that  all active  committers  have submitted  a
                contributors   agreement   (see   the   list   of   <a href="#committers">committers</a>above     for     any
                exceptions).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>Add all active committers to the status page.</td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Ask   root   to   create   committers'   accounts   on
                cvs.apache.org                                      (<a href="http://issues.apache.org/jira/browse/INFRA-440">INFRA-440</a>).

              </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>TBD</td>
              <td>

                Ask infrastructure to create source repository modules
                and     grant     the     committers     karma     (<a href="http://issues.apache.org/jira/browse/INFRA-441">INFRA-441</a>).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Ask infrastructure to set up and archive mailing lists
                (<a href="http://issues.apache.org/jira/browse/INFRA-339">INFRA-339</a>).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Decide about  and then ask infrastructure  to setup an
                issue           tracking           system          (<a href="http://issues.apache.org/jira/browse/INFRA-438">INFRA-438</a>).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>Migrate the project to our infrastructure.</td>
            </tr>
          </table>
</div>
<h4 id='Project-specific'>Project-specific</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Publish                      a                      <a href="http://incubator.apache.org/xmlbeanscxx/bugs.html">page</a>on
                how  to file  issues against  the project  and  how to
                submit                   patches                   (<a href="http://issues.apache.org/jira/browse/XMLBEANSCXX-9">XMLBEANSCXX-9</a>).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Improve                     the                     <a href="http://incubator.apache.org/xmlbeanscxx/">project
                page</a>(<a href="http://issues.apache.org/jira/browse/XMLBEANSCXX-6">XMLBEANSCXX-6</a>).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Make                       the                      <a href="http://svn.apache.org/repos/asf/incubator/xmlbeanscxx/trunk/doc/stdlibref/">Class
                Reference</a>and                                     <a href="http://svn.apache.org/repos/asf/incubator/xmlbeanscxx/trunk/doc/stdlibug/">Users
                Guide</a>available online,  from the project  page (<a href="http://issues.apache.org/jira/browse/XMLBEANSCXX-12">XMLBEANSCXX-12</a>).

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Make a tarball of stable project sources available for
                download from the project site.

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Document  the  design  and development  practices  and
                publish them on the project site.

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Put together a list of  things to do and publish it on
                the project site.

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Check      in       the      test      driver.

              </td>
            </tr>
            <tr>
              <td>TBD</td>
              <td>

                Check    in    the     project    test    suite.

              </td>
            </tr>
          </table>
</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-N10439'>Project-specific</h4>
<div class="section-content">
<p>
            <em>No project-specific tasks.</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-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>
