<?xml version="1.0"?>
<!--
Copyright 2002-2005 The Apache Software Foundation.
 
Licensed 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>
 <head>
  <title>Jakarta Commons-Codec: Proposal</title>
 </head>

 <body bgcolor="white">
  <div align="center">
   <h1>Proposal for <em>Codec</em> Package</h1><br/>
   <h4>January 24, 2002</h4>
  </div>

  <h3>(0) Rationale</h3>
  <p>
   Many software projects have a need to use various formats of data, 
   and to be able to switch between various formats.  The codec package 
   seeks to encapsulate some of the most popular encode/decode 
   algorithms in one easy to use, well tested package.  A base64 codec 
   is the first candidate, with others to follow soon.
  </p>

  <h3>(1) Scope of the Package</h3>
  <p>
   This proposal is to create a package of Java utility classes for the
   encoding/decoding of various types of data. A base64 codec will be the
   first implementation.
  </p>

  <h3>(1.5) Interaction With Other Packages</h3>

  <p>
   <em>Codec</em> relies only on standard JDK 1.2 (or later) APIs for
   production deployment.  It utilizes the JUnit unit testing framework for
   developing and executing unit tests, but this is of interest only to
   developers of the component.  Codec will be a dependency for
   several existing components in the open source world.
  </p>

  <p>No external configuration files are utilized.</p>

  <h3>(2) Initial Source of the Package</h3>

  <p>
   The original Java classes (<code>Base64</code>, etc.) are splashed around
   various Apache subprojects.  We intend to seek them out and integrate them.
  </p>

  <p>
   The proposed package name for the new component is
   <code>org.apache.commons.codec</code>.
  </p>

  <h3>(3)  Required Jakarta-Commons Resources</h3>

  <ul>
   <li>
    CVS Repository - New directory <code>codec</code> in the
    <code>jakarta-commons</code> CVS repository.
   </li>
   <li>
    Mailing List - Discussions will take place on the general
    <em>commons-dev@jakarta.apache.org</em> mailing list.  To help
    list subscribers identify messages of interest, it is suggested that
    the message subject of messages about this component be prefixed with
    [Codec].
   </li>
   <li>
    Bugzilla - New component "Codec" under the "Commons" product
    category, with appropriate version identifiers as needed.
   </li>
  </ul>

  <h3>(4) Initial Committers</h3>

  <p>
   The initial committers on the Codec component shall be as follows:
   <ul>
    <li><a href="mailto:sanders@apache.org">Scott Sanders</a></li>
    <li><a href="mailto:bayard@apache.org">Henri Yandell</a></li>
    <li><a href="mailto:rwaldhoff@apache.org">Rodney Waldhoff</a></li>
    <li><a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a></li>
    <li><a href="mailto:jon@collab.net">Jon S. Stevens</a></li>
    <li><a href="mailto:tobrien@apache.org">Tim O'Brien</a></li>
   </ul>
  </p>

 </body>
</html>
