<!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>XML Graphics FOP - AFP Renderer Codebase Intellectual Property (IP) Clearance 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='XYZ+Codebase+Intellectual+Property+%28IP%29+Clearance+Status'><img src="../images/redarrow.gif" />XML Graphics FOP - AFP Renderer Codebase Intellectual Property (IP) Clearance Status</h2>
<div class="section-content">
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<p>
        The AFP Renderer is an additional output backend (like PDF and PostScript) for Apache FOP. AFP is
        a printer language from IBM mostly used in high-volume printing.
      </p>
<p>
        The AFP Renderer for FOP version 0.20.5 was developed by Pete Townsend with support from
        Joe Schmetzer. The project is currently hosted on SourceForge 
        (<a href="http://afp-renderer.sourceforge.net/">http://afp-renderer.sourceforge.net/</a>).
        Both developers have indicated their willingness to donate the code to the ASF.
      </p>
<p>
        The code has already been extensively reviewed and adapted to the latest FOP release by
        Manuel Mall an active FOP committer.
      </p>
</div>
        <h2 id='Project+info'><img src="../images/redarrow.gif" />Project info</h2>
<div class="section-content">
<ul>
        <li>Which PMC will be responsible for the code: XML Graphics</li>
      </ul>
<ul>
        <li>Into which existing project/module: FOP</li>
      </ul>
<ul>
        <li>Officer or member managing donation: Jeremias Märki</li>
      </ul>
<p>
        <em>Completed tasks are shown by the completion date (YYYY-MM-dd).</em>
      </p>
<h3 id='Identify+the+codebase'>Identify the codebase</h3>
<div class="section-content">
<table class="colortable" width="100%">
          <tr>
            <th>date</th>
            <th>item</th>
          </tr>
          <tr>
            <td>2006-01-05</td>
            <td>
              <p>
                If applicable, make sure that any associated 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><em>
                The codebase consists exclusively of Java sources in the package 
                org.apache.fop.renderer.afp and subpackages. Once integrated into the FOP
                codebase this codebase will not have its own name as such but be simply 
                part of FOP.
              </em></p>
            </td>
          </tr>
        </table>
<p>
          MD5 or SHA1 sum for donated software:
        </p>
<p><a href="http://prdownloads.sourceforge.net/afp-renderer/afp-renderer-handover-src.tar.gz?download">http://prdownloads.sourceforge.net/afp-renderer/afp-renderer-handover-src.tar.gz?download</a></p>
<p>MD5: <strong>15a9710c6d5d2a2f400e33aaf41d4b66</strong>  afp-renderer-handover-src.tar.gz</p>
<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-04-19</td>
              <td>
                <p>
                  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.
                </p>
                <p><em>Software grants received from all three contributors.</em></p>
              </td>
            </tr>
            <tr>
              <td>2006-01-05</td>
              <td>
                <p>
                  Check and make sure that the files that have been donated
                  have been updated to reflect the new ASF copyright.
                </p>
                <p><em>All sources have the ALv2 copyright header (checked by Manuel Mall)</em></p>
              </td>
            </tr>
          </table>
<p>
Identify name recorded for software grant:
          </p>
<p>
<quote><pre>
Joseph Francis Schmetzer / Representing Self
    "Source Code for an AFP Renderer for Apache FOP
     (to Apache XML Graphics PMC):
       http://prdownloads.sourceforge.net/afp-renderer/afp-renderer-handover-src.tar.gz?download"
     ALSO: Licensors Pete Townsend, Joe Schmetzer, Manuel Mall

Manuel Mall / Representing Self
    "Source Code for an AFP Renderer for Apache FOP
     (to Apache XML Graphics PMC):
       http://prdownloads.sourceforge.net/afp-renderer/afp-renderer-handover-src.tar.gz?download"
     ALSO: Licensors Pete Townsend, Joe Schmetzer, Manuel Mall

Pete Townsend / Representing Self
    "Source Code for an AFP Renderer for Apache FOP
     (to Apache XML Graphics PMC):
       http://prdownloads.sourceforge.net/afp-renderer/afp-renderer-handover-src.tar.gz?download"
     ALSO: Licensors Pete Townsend, Joe Schmetzer, Manuel Mall
</pre></quote>
          </p>
</div>
<h4 id='Verify+distribution+rights'>Verify distribution rights</h4>
<div class="section-content">
<p>
Corporations and individuals holding existing distribution rights:
            </p>
<ul>
<li>
<em>For individuals, use the name as recorded on the <a href="http://people.apache.org/~jim/committers.html">committers page</a></em>
</li>
            </ul>
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2006-04-19</td>
              <td>
                <p>
                  Check that all active committers have a signed CLA on
                  record.
                </p>
                <ul>
                  <li>Pete Townsend (ICLA on record)</li>
                  <li>Joseph Francis Schmetzer (ICLA on record)</li>
                  <li>Manuel Mall (ID: manuel, exisiting ASF committer, ICLA on record)</li>
                </ul>
                <p><em>
                  The active committers are Pete Townsend and Joe Schmetzer. Manuel Mall has
                  conducted an extensive review of the codebase. Based on the structure
                  and comments in the code, the coding style and the overall appearance
                  it can be concluded that these two active committers are the original
                  authors of the codebase.
                </em></p>
              </td>
            </tr>
            <tr>
              <td>2006-04-20</td>
              <td>Remind active committers that they are responsible for
                  ensuring that a Corporate CLA is recorded if such is
                  required to authorize their contributions under their
                  individual CLA.</td>
            </tr>
            <tr>
              <td>2006-01-05</td>
              <td>
                <p>
                  Check and make sure that for all items included with the
                  distribution that is not under the Apache license, we have
                  the right to combine with Apache-licensed code and
                  redistribute.
                </p>
                <p><em>
                  The distribution consists exclusively of Java source files all of which are
                  Apache-licensed (checked by Manuel Mall).
                </em></p>
              </td>
            </tr>
            <tr>
              <td>2006-01-05</td>
              <td>
                <p>
                  Check and make sure that all items depended upon 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.
                </p>
                <p><em>
                  The project depends only on items already under Apache license, i.e. FOP
                  (checked by Manuel Mall).
                </em></p>
              </td>
            </tr>
          </table>
<p>Generally, the result of checking off these items will be a
             Software Grant, CLA, and Corporate CLA for ASF licensed code,
             which must have no dependencies upon items whose licenses that
             are incompatible with the Apache License.</p>
</div>
</div>
<h3 id='Organizational+acceptance+of+responsibility+for+the+project'>Organizational acceptance of responsibility for the project
</h3>
<div class="section-content">
<p>
Related VOTEs: 
        </p>
<ul>
          <li>
            <a href="http://mail-archives.apache.org/mod_mbox/xmlgraphics-general/200602.mbox/%3c20060201160916.22D4.DEV@jeremias-maerki.ch%3e">Vote on general@xmlgraphics.a.o, 2006-02-01</a>
          </li>
        </ul>
</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>
