<?xml version="1.0"?>
<!--
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>
 <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>dev@commons.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>
