<?xml version="1.0" standalone="no"?>
<!--
 * 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.
-->

<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">

<s1 title="&XercesCFullName;">

<s2 title="Xerces Project Charter">
<p>
The following charter applies to all Xerces projects.
</p>
</s2>

<s2 title="1 INTRODUCTION" >
<p>
1.1 Apache Xerces is a collaborative software development project
dedicated to providing robust, full-featured, commercial-quality, and
freely available XML parsers and closely related technologies 
on a wide variety of platforms supporting several languages.  This
project is managed in cooperation with various individuals worldwide
(both independent and company-affiliated experts), who use the
Internet to communicate, plan, and develop XML software and related
documentation.
</p>
<p>
1.2 This charter briefly describes the mission, history, organization, and
processes of the project.
</p>
</s2>

<s2 title="2 MISSION" >
<p>
2.1 Apache Xerces exists to promote the use of XML. We view XML as a
compelling paradigm that structures data as information, thereby
facilitating the exchange, transformation, and presentation of
knowledge. The ability to transform raw data into usable information
has great potential to improve the functionality and use of
information systems. We intend to build freely available XML
parsers and closely related technologies in order to engender such 
improvements.
</p>

<p>
2.2 The Apache Xerces parsers support standard APIs (formal, de facto, 
or proposed). 
They are designed to be high performance, reliable, and easy to use. 
To facilitate easy porting of ideas between languages, the API's supported
should be as similar as possible, given the constraints of the languages 
and existing architectures.  Apache Xerces parsers should also be designed
to work efficiently with other Apache projects that deal
with XML whenever possible.
</p>

<p>
2.3 We believe that the best way to further these goals 
is by having both individuals and corporations
collaborate on the best possible infrastructure, APIs, code, testing,
and release cycles. Components must be vendor neutral and usable as
core components for all.
</p>
<p>
2.4 In order to achieve a coherent architecture between Apache Xerces 
parsers
and other components and applications, standards (formal or
de facto) will be used as much as possible for both protocols and
APIs. Where appropriate, experiences and lessons learned will be fed 
back to standards bodies in an effort to assist in the development of 
those standards.  We will also encourage the innovation of new
protocols, APIs, and components in order to seed new concepts not
yet defined by standards.
</p>

</s2>
<s2 title="3 HISTORY" >
<p>
3.1 The code base which formed the foundations of both the
Xerces-Java and Xerces-C++ subprojects of the Apache XML Project
was originally donated to Apache by IBM in 1999.  Xerces-Perl
came into existence as a subproject of the Apache XML project
after the Xerces-C++ community had already matured to a
significant extent.  All three were subprojects of the Apache XML
Project until late 2004.  At this time, reflecting the growth in
the Apache XML project and these communities themselves, Apache
Xerces became a top-level Project of the Apache Software
Foundation.  Apache Xerces still shares much infrastructure with
the Apache XML project and the other former subprojects of Apache
XML that have become projects in their own right.
</p>

</s2>

<s2 title="4 TERMS" >
<p>
4.1 The ASF Board.  The management board of the Apache Software 
Foundation.
</p>

<p>
4.2 The Project.  The Apache Xerces Project; intended
to refer to the source code, website and community that are Apache Xerces.
</p>

<p>
4.3 Subproject.  Apache Xerces is composed of a number of subprojects
which fit into one of two categories:
</p>
<p>
a) An XML parser implementation in some particular programming 
   language.  There may be multiple parsers for a given
   language, if the API's the parsers support are sufficiently
   dissimilar.  At the time of writing, there is one parser for 
   each of Java, C/C++ and Perl.
</p>
<p>
b) A set of components serving some purpose not directly 
   pertinent to XML parsing, but which are used in related 
   applications and are tightly bound, usually through internal
   API's, to one (or more) of the parser subprojects. 
</p>

<p>
4.4 Product.  Some deliverable (usually a binary or source
package) that a subproject releases to the public.  Subprojects
may have multiple products.
</p>

<p>
4.5 Contributor.  Anyone who makes a contribution to the development
of the Apache Xerces project or a subproject.
</p>
<p>
4.6 Committer.  Apache Xerces has a set of committers.  Committers
are contributors who have read/write access to the source code
repository. 
</p>


</s2>

<s2 title="5 THE PROJECT MANAGEMENT COMMITTEE" >
<p>
5.1 The Apache Xerces project is managed by a core group of
committers known as the Project Management Committee [PMC],
which is composed of volunteers from among the active committers 
(see 8.3 below) from all subprojects.  Each subproject must have
at least one representative on the PMC, to ensure active
supervision of the subproject.
</p>

<p>
5.2 The activities of the PMC are coordinated by the Chairperson,
who is an officer of the corporation and reports to the Apache
Board.  The Chairperson will, on the request of the Apache Board, 
provide reports to the Board on issues related  to the running of 
the Apache Xerces project.
</p>

<p>
5.3 The PMC has the following responsibilities:
</p>

<p>
a) Accepting new subproject proposals, voting on these
   proposals and creating the
   subproject (see SUBPROJECTS below).  This is done in collaboration
   with the Incubator (see http://incubator.apache.org).

</p>
<p>
b) Facilitating code or other donations by individuals or companies,
   in collaboration with the Incubator.
</p>
<p>
c) Resolving license issues and other legal issues in conjunction with
   the ASF board.
</p><p>
d) Ensuring that administrative and infrastructure work is completed.
</p><p>
e) Facilitating relationships among subprojects and other Apache projects.
</p><p>
f) Facilitating relationships between Apache Xerces and the external
   world.
</p><p>
g) Overseeing Apache Xerces to ensure that the mission defined in
   this document is being fulfilled.
</p><p>
h) Resolving conflicts within the project.
</p><p>
i) Reporting to the ASF board (through the Chair) on the progress
   of the project.

</p><p>
5.4 In cases where the sub-project is unable to directly provide 
at least one representative on the PMC--implying that there are no 
active committers on that code base--then the subproject should 
be considered dormant, and any relevant Apache policies for dormant
projects should be implemented.  At the least, the subproject's status 
should
be updated on its website.

</p><p>
5.5 Every 12 months, or at the request of the Board, the PMC will provide 
a recommendation to the Apache Board for the position of Chairperson 
of the PMC. 
</p><p>
5.6 This recommendation will be made on the basis of an election held 
within the PMC.  The election will be performed using a simple
majority vote of PMC members.
</p><p>
5.7 Upon agreement by the Apache Board, the recommended Chairperson will, 
if they are not already, be appointed an officer of the corporation. 
See http://www.apache.org/foundation/bylaws.html for more information.
</p><p>
5.8 In the unlikely event that a member of the PMC becomes disruptive to
the process, ceases to make codebase contributions for an extended 
period, or ceases to take part in PMC votes for an extended period of
time, said member may be removed by unanimous vote of remaining PMC 
members.
</p><p>
5.9 The PMC is responsible for maintaining and updating this
charter. Development must follow the process outlined below, so any
change to the development process necessitates a change to the
charter. Changes must be approved by a two-thirds majority of all members 
of the PMC.
</p>
</s2>



<s2 title="6 SUBPROJECTS" >
<p>
6.1 When a new subproject proposal is submitted to the PMC, it
may be accepted by a two-thirds vote of the PMC.

</p><p>
6.2 A subproject may be removed by unanimous vote of the PMC, subject to 
the
approval of the ASF board. 

</p>
</s2>
<s2 title="7 CONTRIBUTORS" >
<p>
7.1 Like all Apache projects, the Apache Xerces project is a meritocracy 
-- 
the more work you do, the more you are allowed to do.  Contributions 
will include participating in mailing lists, reporting bugs, providing 
patches and proposing changes to a product.

</p><p>
7.2 In order to ensure that all code contained in the Apache 
Xerces project's code repository is free of licensing, 
intellectual property and patent issues, any developer wishing 
to contribute a new feature to Xerces must either sign:

</p><p>
a) If contributing as an individual, sign the "Individual 
   Contributor License Agreement (CLA)" 
   (http://www.apache.org/licenses/icla.txt) and file a copy with
   the Secretary of the Corporation; or 
</p><p>
b) If making the contribution as part of their employment
   responsibilities, sign the "Corporate CLA (CCLA)", 
   (http://www.apache.org/licenses/cla-corporate.txt) and file a
   copy with the Secretary of the Corporation.

</p><p>
7.3 If the contribution in question is a small bugfix, the
contributor need not sign a CLA, but need only provide the
following information, attaching it to the communication 
containing the patch:

</p><p>
a) Name and employer 
</p><p>
b) Are you the author of the code being contributed? 
</p><p>
c) Do you have the right to grant the copyright and patent 
   licenses for the contribution that are set forth in the ASF v.2.0 
   license (http://www.apache.org/licenses/LICENSE-2.0)?
</p><p>
d) Does your employer have any rights to code that you have 
   written, for example, through your contract for employment?  If 
   so, has your employer given you permission to contribute the code 
   on its behalf or waived its rights in the code? 
</p><p>
e) Are you aware of any third-party licenses or other 
   restrictions (such as related patents or trademarks) that could 
   apply to your contribution?  If so, what are they?

</p><p>
7.4 Contributors who make regular and substantial contributions may become
committers as described below.

</p>
</s2>

<s2 title="8 COMMITTERS" >
<p>
8.1 Each subproject has a set of committers. Committers are 
contributors who have read/write access to the source code 
repository. 

</p><p>
8.2 Normally, a new committer is added after a contributor has
been nominated by a committer and approved by at least 50 percent
of the active committers for that subproject with no opposing
votes.  In the case that a subproject has a very small number of
active committers, the PMC may choose to require a PMC resolution
to approve the nomination of a contributor by one of the active
committers in that subproject.  All committers must have a signed
Contributor License Agreement on file with the Secretary of the
Corporation.  Since, in most cases, contributors will already
have contributed significant amounts of code, this should usually
have been done before nomination.

</p><p>
8.3 Although committers have write access to all Apache Xerces 
subprojects,
they are only permitted to make changes to the subprojects to which they
have been elected committers.  A committer may be elected to multiple
subprojects, but, except that no new access need be granted, the 
process is the same as for any other contributor.

</p><p>
8.4 For the purposes of voting, committers will be classed as "active" or
"inactive". Only active committers will be included in the totals used to 
determine the success or failure of a particular vote, and
only active committers are part of the PMC.

</p><p>
8.5 Committers remain active as long as they are contributing code or
posting to the subproject mailing lists.  If a committer has neither
contributed code nor posted to the subproject mailing lists in 3
months, the PMC chair may e-mail the 
committer, the subproject development list, and the PMC mailing list 
notifying the committer that they are going to be moved to inactive 
status.  If there is no response in 72 hours, the committer will become 
inactive, and may be removed from the PMC mailing list.

</p><p>
8.6 An inactive status will not prevent a committer committing new code
changes or posting to the mailing lists.  Either of these activities will
automatically re-activate the committer for the purposes of 
voting, and necessitate their addition to the PMC mailing list.

</p>
</s2>
<s2 title="9 INFRASTRUCTURE" >
<p>
9.1 The Apache Xerces project relies on the Apache XML project 
and the Apache Infrastructure project for the following:

</p><p>
a) Bug Database -- This is a system for tracking bugs and feature
   requests.

</p><p>
b) Subproject Source Repositories -- These are several repositories
   containing both the source code and documentation for the
   subprojects. 

</p><p>
c) Website -- A xerces.apache.org website will contain information about
   the Apache Xerces project, including documentation, downloads of
   releases, and this charter. Each subproject will have its own website
   with subproject information.

</p><p>
d) PMC Mailing List -- This list is for PMC business requiring
   confidentiality, particularly when an individual or company requests
   discretion. All other PMC business should be done on the general
   mailing list.

</p><p>
e) General Mailing List -- This mailing list is open to the public. It is
   intended for discussions that cross subprojects.

</p><p>
f) Subproject Mailing Lists -- Each subproject should have at least one 
devoted mailing
   list. Many subprojects may wish to have both user and development
   lists. The individual subprojects may decide on the exact structure of
   their mailing lists.

</p>
</s2>
<s2 title="10 LICENSING" >
<p>
10.1 All contributions to the Apache Xerces project adhere to the 
Apache Software Foundation License, v.2.0 
(http://www.apache.org/licenses/LICENSE-2.0)?
All further contributions must be made under the
same terms. 

</p><p>
10.2 When a committer is considering integrating a contribution 
from a contributor who has no CLA on file with the Corporation, 
it is the responsibility of the committer, in consultation with 
the PMC, to conduct due diligence on the pedigree of the 
contribution under consideration; see sections 7.2 and 7.3.

</p>
</s2>
<s2 title="11 THE DEVELOPMENT PROCESS" >
<p>
11.1 The development process is intentionally lightweight; like other
Apache projects, the committers decide which changes may be committed
to the repository. Three +1 ('yes' votes) with no -1 ('no' votes or
vetoes) are needed to approve a significant code change. For 
efficiency, some code changes from some contributors (e.g. 
feature additions, bug fixes) may be approved in advance, in 
which case they may be committed first and changed as needed, 
with conflicts resolved by majority vote of the committers.

</p>
</s2>
<s2 title="12 SUBPROJECT REQUIREMENTS" >
<p>
12.1 Each subproject should have a set of requirements as well as an
up-to-date release plan and design document on its dedicated web page.

</p><p>
12.2 It is recommended that each subproject have a smoke-test system 
that works at least as a basic integration test.

</p>
</s2>
<s2 title="13 RELATIONSHIP TO OTHER APACHE PROJECTS" >

<p>
13.1 The Apache Xerces project should work closely with other Apache
projects, such as XML, Jakarta and the Apache Server, to avoid redundancy
and achieve a coherent architecture among Apache Xerces and these
projects.

</p>

</s2>


</s1>
