<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--
  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 lang="en">
  <head>
    <title>Draft Board Report</title>

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <meta property="og:image" content="http://www.apache.org/images/asf_logo.gif" />

    <link href='http://fonts.googleapis.com/css?family=Overlock' rel='stylesheet' type='text/css'>
    <link href="http://fonts.googleapis.com/css?family=Mate+SC" rel="stylesheet" type="text/css"/>
    <link rel="stylesheet" type="text/css" media="screen" href="/css/style.css">
    <link rel="stylesheet" type="text/css" media="screen" href="/css/code.css">
    <link rel="stylesheet" type="text/css" media="screen" href="/css/creadur.css">

    

    
    <!-- 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 &quot;License&quot;); 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 &quot;AS IS&quot; 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. -->
  </head>

  <body>
    <div id="page" class="container_16">
      <div id="header" class="grid_8">
        <img src="http://www.apache.org/images/feather-small.gif" alt="The Apache Software Foundation">
        <h1>The Apache Creadur&trade; Project</h1>
        <h2>Draft Board Report</h2>
      </div>
      <div id="nav" class="grid_8">      
        <a href="http://www.apache.org/" id="bannerRight">
           <img 
                src="http://www.apache.org/images/asf-logo.gif" 
                alt="The Apache Software Foundation" 
                title="The Apache Software Foundation" />
        </a>
        <p><a href="/">Home</a></p>  
    </div>
      <div class="clear"></div>
      <div id='nav-bar' class="grid_4 alpha">
        <ul>
          <li>
        <a href="http://community.apache.org/">
           <img 
                src="http://www.apache.org/images/feather-small.gif" 
                alt="The Apache Community"
                title="The Apache Community" />
        </a>             </li>
          <li><h5>Apache Creadur&trade;</h5>
            <ul>
              <li><a href="http://creadur.apache.org">Creadur Project Home</a></li>
              <li><a href="http://creadur.apache.org/rat">Apache Rat&trade;</a></li>
              <li><a href="http://creadur.apache.org/tentacles">Apache Tentacles&trade;</a></li>
              <li><a href="http://creadur.apache.org/whisker">Apache Whisker&trade;</a></li>
              <li><a href='http://www.apache.org/security/'>Security</a></li>
              <li><a href='http://www.apache.org/licenses/'>License</a></li>
              <li><a
                href='http://www.apache.org/foundation/sponsorship.html'>Sponsorship</a></li>
              <li><a href='http://www.apache.org/foundation/thanks.html'>Thanks</a></li>
            </ul>
         </li>
        <li><h5>The Apache Software Foundation</h5>
            <ul>
              <li><a href="http://www.apache.org/foundation">About the Foundation</a></li>
              <li><a href="http://projects.apache.org" title="The Projects">The projects</a></li>
              <li><a href="http://people.apache.org" title="The People">The people</a></li> 
              <li><a href='http://www.apache.org/foundation/how-it-works.html'>How we work</a></li>
              <li><a href='http://www.apache.org/foundation/how-it-works.html#history'>Our history</a></li>
              <li><a href='http://blogs.apache.org/foundation/'>News</a></li>
            </ul>
        </li>
        <li><h5>Contribute</h5>
            <ul>
              <li><a href="http://www.apache.org/foundation/getinvolved.html" title="Get Involved">Get Involved</a></li>
              <li><a href="http://mail-archives.apache.org/mod_mbox/creadur-dev/" title="Our mailing lists">Mailing lists</a></li>
              <li><a href="https://issues.apache.org/jira/secure/BrowseProjects.jspa#11060" title="Issue tracking">Record an issue</a></li>
              <li><a href="http://community.apache.org/contributors/index.html" title="Apache community guide to contribution">Contributors guide</a></li>
              <li><a href="http://www.apache.org/dev/#committers" title="Some notes for Apache contributions">Contributors' FAQ</a></li>
            </ul>
        </li>
        <li><h5>Committer Info</h5>
            <ul>
              <li><a href='http://www.apache.org/dev/committers.html'>Committers' FAQ</a></li>
              <li><a href='http://www.apache.org/dev/new-committers-guide.html'>New Committers Guide</a></li>
              <li><a href='http://planet.apache.org/committers/'>Plant Apache</a></li>
              <li><a href='http://community.apache.org/'>Community</a></li>
              <li><a href='http://www.apache.org/legal/'>Legal</a></li>
              <li><a href='http://www.apache.org/foundation/marks/'>Branding</a></li>
              <li><a href='http://www.apache.org/press/'>Media Relations</a></li>
            </ul>
        </li>          
        <li>
        <a href="http://community.apache.org/">
            <img 
                src="http://www.apache.org/images/feather-small.gif" 
                alt="The Apache Community"
                title="The Apache Community" />
 </a>
        </li>
        
      </ul>
    </div>
      <div id="content" class="grid_12 omega"><div class="section-content"><h1 id="draft-board-reports">Draft Board Reports</h1>
<p>Like every top level project at The Apache Software Foundation, Apache Creadur regularly reports to the board. Quarterly reports are due in February, May, August and November, together with monthly reports immediately after graduation.</p>
<p>The final, official board reports are submitted by the Apache Creadur PMC Chair and are recorded in the board minutes. To help a wider community develop their content, this page contains drafts of these reports. </p>
<h2 id="august-2013-draft">August 2013 (Draft)</h2>
<p>Just a draft: see the board minutes for the canonical version.</p>
<pre>
Status report for the Apache Creadur project - AUGUST 2013

    Apache Creadur creates and maintains a suite of open source
    software related to the auditing and comprehension of
    software distributions. Any language and build system are
    welcomed.

    Project Status
    --------------
    Creadur graduated from the Apache Incubator in April, 2012.
    The final handover tasks were completed with the Rat 0.9 
    release.

    Issues
    ------
    None at this time.

    Community
    ---------
    A warm welcome to Manuel Suárez Sánchez, our Google Summer 
    of code student. And a warm welcome to newcomers to our
    mailing lists.

    Last committer was elected in August, 2012 and no new 
    PMC members have been elected since graduation.

    Releases
    --------
    Rat 0.9 was released in June.

    Rat 0.10 and Whisker 0.1 releases are being prepared.

    Community Objectives
    --------------------
    * Release Apache Rat 0.10
    * Release Apache Whisker 0.1
    * Refactor Apache Rat core with Manuel's help
</pre>

<h2 id="may-2013-draft">May 2013 (Draft)</h2>
<p>Just a draft: see the board minutes for the canonical version.</p>
<pre>
Status report for the Apache Creadur project - MAY 2013

    Apache Creadur creates and maintains a suite of open source
    software related to the auditing and comprehension of
    software distributions. Any language and build system are
    welcomed.

    Project Status
    --------------
    Creadur graduated from the Apache Incubator in April, 2012.
    The final handover tasks associated with the first 
    release are now in progress.

    Issues
    ------
    We have no issues requiring board attention at the moment.

    Community
    ---------
    More traffic on the list, and some interest in one of our 
    GSOC project ideas.

    Stefan Bodewig has resigned from the PMC. 

    Releases
    --------
    None (yet). The last release happened while the project was
    incubating: RAT 0.8 released in November 2011.

    Rat 0.9 has been approved but the announcement is pending 
    completion of final release infrastructure handover tasks. 

    Whisker is waiting to be released.

    Community Objectives
    --------------------
    * Complete release of Apache Rat 0.9
    * Release Apache Whisker 0.1
</pre>

<h2 id="february-2013-draft">February 2013 (Draft)</h2>
<p>Just a draft: see the board minutes for the canonical version.</p>
<pre>
Status report for the Apache Creadur project - FEBRUARY 2013

    Apache Creadur creates and maintains a suite of open source
    software related to the auditing and comprehension of
    software distributions. Any language and build system are
    welcomed.

    Project Status
    --------------
    Creadur graduated from the Apache Incubator in April, 2012.
    Except for tasks performed after the first release as a top
    level project, handover is now complete.

    Issues
    ------
    We have no issues requiring board attention at the moment.

    Community
    ---------
    Quiet since the last report.

    Releases
    --------
    None (yet). The last release happened while the project was
    incubating: RAT 0.8 released in November 2011.

    Rat and Whisker are waiting to be released.

    Community Objectives
    --------------------
    * Release Apache Rat 0.9
    * Release Apache Whisker 0.1
</pre>

<h2 id="november-2012-draft">November 2012 (Draft)</h2>
<p>Just a draft: see the board minutes for the canonical version.</p>
<pre>
    Status report for the Apache Creadur project - NOVEMBER 2012

    Apache Creadur creates and maintains a suite of open source 
    software related to the auditing and comprehension of 
    software distributions. Any language and build system are 
    welcomed.

    Project Status
    -------------- 
    Creadur graduated from the Apache Incubator in April, 2012.
    Except for tasks performed after the first release as a top
    level project, handover is now complete.    

    Issues
    ------
    We have no issues requiring board attention at the moment.

    Branding and Trademarks
    -----------------------
    Replaced ApacheConEU banners with ApacheCon NA banners.

    Community
    ---------
    Thanks to contributions, in particular, from the Apache 
    Maven and Apache CloudStack communities, activity is 
    increasing. Thanks to everyone for getting involved.

    Infrastructure
    --------------
    Hoping to trial a plugin that integrates Apache CMS
    with Maven.

    Releases
    --------
    None (yet). The last release happened while the project was 
    incubating: RAT 0.8 released in November 2011.

    A new Rat release is on track, once improvements based on 
    feedback from the Apache Maven community are completed.  

    The first Whisker release is on track, once improvements 
    based on feedback from the Apache CloudStack community 
    are completed. 

    Community Objectives
    --------------------
    * Release Apache Rat 0.9
    * Release Apache Whisker 0.1
</pre>

<h2 id="august-2012-draft">August 2012 (Draft)</h2>
<p>Just a draft: see the board minutes for the canonical version.</p>
<pre>
    Status report for the Apache Creadur project - AUGUST 2012

    Apache Creadur creates and maintains a suite of open source 
    software related to the auditing and comprehension of 
    software distributions. Any language and build system are 
    welcomed.

    Project Status
    --------------    
    Creadur graduated from the Apache Incubator in April, 2012.
    Except for tasks performed after the first release as a top
    level project, handover is now complete. 

    Issues
    ------
    We have no issues requiring board attention at the moment.

    Branding and Trademarks
    -----------------------
    ApacheCon banners added.  

    Community
    ---------
    Improved documentation to help explain our products to a
    wider audience. A quiet month on the mailing lists.

    We welcomed Philipp Ottlinger as a new committer.

    Infrastructure
    --------------
    Still yet to discover a good way to maintain our mix 
    of hand and generated contents in Apache CMS. 

    Releases
    --------
    None (yet). The last release happened while the project was 
    incubating: RAT 0.8 released in November 2011.

    We hope to cut the first release of Apache Whisker very 
    soon.

    Community Objectives
    --------------------
    * Release Apache Whisker 0.1
    * Continue to improve documentation

</pre>

<h2 id="july-2012-draft">July 2012 (Draft)</h2>
<p>Just a draft: see the board minutes for the canonical version.</p>
<pre>
    Status report for the Apache Creadur project - JULY 2012

    Apache Creadur creates and maintains a suite of open source 
    software related to the auditing and comprehension of 
    software distributions. Any language and build system are 
    welcomed.

    Project Status
    --------------    
    Creadur graduated from the Apache Incubator in April, 2012.
    Except for tasks performed after the first release as a top
    level project, handover is now complete. 

    Issues
    ------
    We have no issues requiring board attention at the moment.

    Branding and Trademarks
    -----------------------
    The site has now been checked and updated against the 
    branding policy. In particular:
      * Project Website Basics
      * Website Navigation Links
      * Trademark Attributions
      * Logos and Graphics
      * Project Metadata
      * Read PMC Branding Responsibilities 

    Community
    ---------
    Interest seems to be slowly building, which is encouraging.
    We hope to focus on continuing to improve the documentation
    and creating a first release for Apache Whisker.

    Infrastructure
    --------------
    We are still trying to discover the best way to maintain 
    a mix of subsites generated by and hand maintained content
    in Apache CMS. Thanks to Infrastructure for their help
    and advice.

    Releases
    --------
    None (yet). The last release happened while the project was 
    incubating: RAT 0.8 released in November 2011.

    We hope to cut the first release of Apache Whisker very 
    soon.

    Community Objectives
    --------------------
    * Improve quantity of documentation on site
    * Release Apache Whisker 0.1

</pre>

<h2 id="june-2012-draft">June 2012 (Draft)</h2>
<p>Just a draft: see the board minutes for the canonical version.</p>
<pre>
    Status report for the Apache Creadur project - JUNE 2012

    Apache Creadur creates and maintains a suite of open source 
    software related to the auditing and comprehension of 
    software distributions. Any language and build system are 
    welcomed.

    Project Status
    --------------

    Creadur graduated from the Apache Incubator in April, 2012.
    The handover has been very slow going, but is very nearly
    complete. Thanks to the infrastructure team for their help.

    Handover
    --------
    Complete: 
     * New Chair tasks (subscriptions, update officers, etc)
     * Reporting schedule
     * PMC bootstrap tasks
     * Transfer source
     * Transfer mailing lists
     * Update issue tracker
     * Infra tasks
     * Transfer website
     * Update incubator records
    Pending Next Release (as per guidelines)
     * Distribution mirrors

    Community
    ---------
    * Creadur needs to rebuild momentum and to attract new 
      contributors. Our first steps will be website 
      improvements and the first release of Apache Whisker 
      (see below). 

    Infrastructure
    --------------
    * Thanks to the infra team for a smooth handover
    * Our website uses the CMS, and is ready for svnsubpub. The 
      community is still discussing the best approach towards 
      maintaining content generated by Maven.  

    Releases
    --------
    None (yet). The last release happened while the project was 
    incubating: RAT 0.8 released in November 2011.

    We hope to cut the first release of Apache Whisker very 
    soon. This tool generates and audits licensing information
    from meta-data. Helpful for applications assembled from 100s 
    of components, such as Apache James Server.

    Branding and Trademarks
    -----------------------
    Currently our website doesn't conform to all requirements. 
    In particular the product subsites need more work. 

    Community Objectives
    --------------------
    * Improve impact and visibility of site, and bring the site fully 
      into line with the branding guidelines
    * Release Apache Whisker 0.1

</pre></div></div>
      <div class="clear"></div>
    </div>

    <div id="copyright" class="container_16">
      <p>Copyright &#169; 2012 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
      Apache Creadur, Creadur, Apache Rat, Apache Tentacles, Apache Whisker, Apache and the Apache feather logo are <a href=http://www.apache.org/foundation/marks/'>trademarks</a> of <a href='http://www.apache.org'>The Apache Software Foundation</a>.<br/>
      All other marks mentioned may be trademarks or registered trademarks of their respective owners.
      </p>
    </div>
  </body>
</html>
