<!--
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>Proposal for Lang Package</title>
</head>
<body bgcolor="white">

<div align="center">
<h1>Proposal for <em>Lang</em> Package</h1>
</div>

<h3>(0) Rationale</h3>

<p>The standard Java libraries fail to provide enough methods for 
manipulation of its main components. The <em>Lang</em> Package provides 
these extra methods. There are other classes which might justifiably 
be included in java.lang someday, this package also provides for them.</p>


<h3>(1) Scope of the Package</h3>

<p>This proposal is to create a package of Java utility classes for the
classes that are in java.lang's hierarchy, or are considered to be so 
standard as to justify existence in java.lang. The <em>Lang</em> Package 
also applies to primitives and arrays.</p>


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

<p><em>Lang</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.  Lang 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 initial classes came from the Commons.Util subproject.</p>

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


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

<ul>
<li>CVS Repository - New directory <code>lang</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
    [lang].</li>
<li>Bugzilla - New component "Lang" under the "Commons" product
    category, with appropriate version identifiers as needed.</li>
<li>Jyve FAQ - New category "commons-lang" (when available).</li>
</ul>


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

<p>The initial committers on the Lang component shall be as follows:
<ul>
<li>Henri Yandell (bayard)</li>
<li>Daniel Rall (dlr)</li>
<li>Stephen Colebourne (scolebourne)</li>
</ul>
</p>

</body>
</html>
