<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>ASF: Xalan Project Charter</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" type="text/css" href="resources/apache-xalan.css" />
</head>
<!--
 * 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.
 -->
<body>
<div id="title">
<table class="HdrTitle">
<tbody>
<tr>
<th rowspan="2">
<a href="index.html">
<img alt="Trademark Logo" src="resources/Xalan-Logo-tm.png" width="190" height="90" />
</a>
</th>
<th text-align="center" width="75%">
<a href="index.html">Apache Xalan Project </a>
</th>
</tr>
<tr>
<td valign="middle">Xalan Project Charter</td>
</tr>
</tbody>
</table>
<table class="HdrButtons" align="center" border="1">
<tbody>
<tr>
<td>
<a href="http://www.apache.org">Apache Foundation</a>
</td>
<td>
<a href="http://xalan.apache.org">Xalan Project</a>
</td>
<td>
<a href="http://xerces.apache.org">Xerces Project</a>
</td>
<td>
<a href="http://www.w3.org/TR">Web Consortium</a>
</td>
<td>
<a href="http://www.oasis-open.org/standards">Oasis Open</a>
</td>
</tr>
</tbody>
</table>
</div>
<div id="navLeft">
<ul>
<li>
<a href="index.html">Apache Xalan</a>
</li>
<li>Charter<br />
</li></ul><hr /><ul></ul>
<p class="navGroup">
<em>Projects</em>
</p><ul>
<li>
<a href="xalan-c/index.html">Xalan C++</a>
</li>
<li>
<a href="old/xalan-c/index.html">Xalan C++ (old)</a>
</li>
<li>
<a href="xalan-j/index.html">Xalan Java</a>
</li>
<li>
<a href="old/xalan-j/index.html">Xalan Java (old)</a>
</li></ul><hr /><ul></ul>
<p class="navGroup">
<em>Mail Lists</em>
</p><ul>
<li>
<a href="http://mail-archives.apache.org/mod_mbox/xalan-dev">Developers Archive</a>
</li>
<li>
<a href="http://mail-archives.apache.org/mod_mbox/xalan-c-users">C Users Archive</a>
</li>
<li>
<a href="http://mail-archives.apache.org/mod_mbox/xalan-j-users">J Users Archive</a>
</li></ul>
<p class="navGroup">
<em>Old Archives</em>
</p><ul>
<li>
<a href="http://marc.info/?l=xalan-dev">Developers OLD</a>
</li>
<li>
<a href="http://marc.info/?l=xalan-c-users">C Users OLD</a>
</li>
<li>
<a href="http://marc.info/?l=xalan-j-users">J Users OLD</a>
</li></ul><hr /><ul></ul>
<p class="navGroup">
<em>Resources</em>
</p><ul>
<li>
<a href="http://www.apache.org/">Apache</a>
</li>
<li>
<a href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
</li>
<li>
<a href="http://www.apache.org/licenses/">Licenses</a>
</li>
<li>
<a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
<li>
<a href="http://www.apache.org/security/">Security</a>
</li></ul><hr /><ul></ul>
</div>
<div id="content">
<h2>Xalan Project Charter</h2>
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Xalan Project Charter</h3>
  <p>The following charter applies to all Xalan projects.</p>
  

  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>1 INTRODUCTION</h3>
   <p>1.1 Apache Xalan is a collaborative software development project
      dedicated to providing robust, full-featured, commercial-quality, and
      freely available XSLT support on a wide variety of platforms. 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 XSLT software and related
      documentation.</p>
   <p>1.2 This charter briefly describes the mission, history, organization
      and processes of the project.</p>
  

  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>2 MISSION</h3>
   <p>2.1 Apache Xalan exists to promote the use of XSLT. We view XSLT
      (Extensible Stylesheet Language Transformations) as a compelling 
      paradigm that transforms XML documents, thereby facilitating the
      exchange, transformation, and presentation of knowledge. The ability
      to transform XML documents into usable information has great potential
      to improve the functionality and use of information systems. We intend
      to build freely available XSLT processing components in order to
      engender such improvements.</p>
   <p>2.2 Apache Xalan consists of a set of components that transform XML
      documents.  Where appropriate, these components plug into other XML
      components using standard APIs (formal, de facto, or proposed).  The
      components must be high performance, reliable, and easy to use.  Where
      inter-related, the components must be part of an underlying architectural
      orchestration that will allow them to work together without major
      negotiations or breakage.</p>
   <p>2.3 We believe that the best way to define this XML transformation
      architecture 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 Xalan
      components 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>
  
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>3 HISTORY</h3>
   <p>3.1 This project was established under the direction of the Apache
     Software Foundation in October 2004 to facilitate joint open-source
     development.  Prior to October 2004 this project was a subproject
     of the Apache XML project.</p>
  
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>4 TERMS</h3>
   <p>4.1 The ASF Board.  The management board of the Apache Software 
      Foundation.</p>
   <p>4.2 The Project.  The Apache Xalan project; intended to refer to the 
      source code, website, subprojects, and community that are Apache Xalan.</p>
   <p>4.3 Subproject.  The Apache Xalan project may have subprojects; a 
      subproject is responsible for a component or application whose scope
      is well defined.</p>
   <p>4.4 Product.  Some deliverable (usually a binary or source package)
      that a subproject makes available to the public.  Subprojects may have
      multiple products.</p>
   <p>4.5 Release.  A specific version of a product.  Subprojects may have
      multiple releases of a given product.</p>
   <p>4.6 Contributor.  Anyone who makes a contribution to the development
      of the Apache Xalan project.</p>
   <p>4.7 Committer.  The Apache Xalan project has a set of committers.  
      Committers are contributors who have read/write access to the source
      code repository.</p>
   <p>4.8 PMC. The PMC (Project Management Committee) is the group of people
      that form the entity that makes decisions and controls the project.  
      Individual people or committers do not control the project.</p>
       
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>5 THE PROJECT MANAGEMENT COMMITTEE</h3>
   <p>5.1 The Apache Xalan project is managed by a core group of committers 
      known as the Project Management Committee [PMC]. Subprojects, if any,
      much each have at least one representative committer on the PMC.</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 Xalan project.</p>
   <p>5.3 The PMC has the following responsibilities:</p>
   <p>a) Accepting new subproject proposals, formally submitting these
      proposals for Apache Xalan committer vote, and creating the subproject
      (see SUBPROJECTS below).  This is done in collaboration with the 
      Incubator (see <a href="http://incubator.apache.org">http://incubator.apache.org</a>).</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 projects and subprojects.</p>
   <p>f) Facilitating relationships between the Apache Xalan project and the 
      external world.</p>
   <p>g) Overseeing Apache Xalan 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>j) Propose new releases of projects or subprojects.  Such proposals pass
      if 75% of the PMC members vote in agreement.</p>   
      
   <p>5.4 A contributor can, at any time, nominate a committer to be on the PMC,
      by calling for a vote.  If two thirds, or more, of the active committers 
      vote in agreement then the nomination is given to the PMC.  The person
      becomes a new PMC member if 75% or more of the PMC members vote in
      agreement, with no dissenting votes among the PMC members.  This individual
      should be elected based on merit for the evolution of the project and 
      demonstration of commitment.</p>
   <p>5.5 In cases where the subproject is unable to directly provide a 
      representative on the PMC, another member of the PMC will be required to
      represent that subproject on the PMC.  This will be strongly discouraged.
      It is preferable that all subprojects have direct representation on the
      PMC.</p>
   <p>5.6 At least every twelve months, or more often if directed by the ASF
      board, the PMC members will elect a Chairperson from among themselves;
      the person with the most votes from the other PMC members is recommended
      to the ASF board for the position of Chairperson, and with the ASF board's
      approval, becomes the Chairperson for the new term.</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
      <a href="http://www.apache.org/foundation/bylaws.html">
      http://www.apache.org/foundation/bylaws.html</a> for more information.</p>
   <p>5.8 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. Proposed changes
      to this charter by the PMC are passed if 75% or more of the PMC members
      approve the proposal, with no dissenting votes. However, an active Apache
      Xalan committer may challenge the change.</p>
   <p>5.9 An active Apache Xalan committer may challenge a change to this charter
      proposed by the PMC within two weeks of its proposal.  When challenged the
      proposed change is passed if within two weeks of the challenge the active
      committers approve the change with a two-thirds majority vote.</p>
   <p>5.10 The PMC ultimately makes the decisions for the project, not the individual
      people.  At any time the PMC can reject patches or other contributions to the
      project if 75% or more of the PMC members vote to reject the contribution.</p>
   <p>5.11 A PMC member may resign their membership at any time.  However, in the
      unlikely event that a member of the PMC becomes disruptive to the process,
      such as ceasing to take part in PMC votes, the PMC member may be removed from
      the PMC by a vote among the other PMC members.  The PMC member is removed if
      75% or more of the other PMC members approve the removal, with no dissenting
      votes among the other PMC members.</p>
   <p>5.12 A person remains a PMC member until he or she resigns, is removed by a
      vote from among the other PMC members, dies or is incapacitated.</p>
   

  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>6 SUBPROJECTS</h3>
   <p>6.1 A subproject of the Apache Xalan project is responsible for a component 
      or application whose scope is well defined.  Each subproject has its own set 
      of developers, and is responsible for approving its own committers. Apache 
      Xalan is composed of subprojects which fit into one of two categories:</p>
   <p>(a) An XSLT processor implementation in some particular programming
      language.  There may be multiple processors for a given language if
      the API's the processors support are sufficiently dissimilar.  At the
      time of writing, there is one processor for C++ and two for Java.</p>
   <p>(b) A set of components which are used in related applications and are
      tightly bound, usually through internal API's, to one (or more) of the
      processor subprojects.</p>
   <p>6.2 A new subproject proposal is submitted to the PMC, and then accepted
      by a majority Apache Xalan project active committer vote within two weeks
      after the proposal.</p>
   <p>6.3 Each subproject must have a set of requirements as well as an
      up-to-date release plan and design document on its dedicated web page.</p>
   <p>6.4 It is recommended that each subproject have a smoke-test system
      that works at least as a basic integration test.</p>
   <p>6.5 A subproject may be removed if 75% or more of the PMC members approve
      the proposal, there are no dissenting votes among the PMC members,
      and no challenges by active Apache Xalan project committers
      within two weeks after the proposal.
      A contributor may challenge the proposed removal
      of a subproject within two weeks of the proposal.
      In this case the proposed removal is passed if within two weeks of the
      challenge the active committers approve the removal with a two-thirds
      majority vote. Any subproject removal is subject to the approval of the
      ASF board.</p>
       
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>7 CONTRIBUTORS</h3>
   <p>7.1 Like all Apache projects, the Apache Xalan project is a
      meritocracy -- the more work you do, the more you are allowed to do.</p>
   <p>7.2 People who make regular and substantial contributions may become
      committers as described below. Contributions include: participating in
      mailing lists, reporting issues or bugs in issue-records in the Issue Database, 
      providing patches, and proposing changes to a product.</p>
   <p>7.3 In order to ensure that all code contained in the Apache Xalan
      project's code repository is free of licensing, intellectual property and patent
      issues, any person wishing to contribute a new feature to Apache Xalan must either
      sign:</p>
   <p>a) If contributing as an individual, sign the "Individual
      Contributor License Agreement (CLA)"
      (<a href="http://www.apache.org/licenses/icla.txt">http://www.apache.org/licenses/icla.txt</a>)
      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)", 
      (<a href="http://www.apache.org/licenses/cla-corporate.txt">http://www.apache.org/licenses/cla-corporate.txt</a>)
      and file a copy with the Secretary of the Corporation.</p>
   <p>7.4 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 (<a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)?</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 align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>8 COMMITTERS</h3>
   <p>8.1 The Apache Xalan project has a set of committers. If there
      are subprojects, each subproject will also have a set of committers.
      Committers are contributors who have read/write access to the source code 
      repository. New committers are added when a contributor is nominated by a 
      committer and approved by at least 50 percent of the active committers for 
      that subproject with no opposing votes.  In most cases, new committers will 
      already be participating in the development process by submitting suggestions
      and/or fixes via issue-records in the Issue Database or mailing lists.</p>
   <p>8.2 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.</p>
   <p>8.3 Committers remain active as long as they are contributing code or
      posting to the project or subproject mailing lists.  If a committers has
      neither contributed code nor posted to the mailing lists in 3
      months, a member of the PMC will e-mail the committer,
      the project or subproject development list, and the PMC mailing list
      notifying the committer that they are now in inactive status.</p>
   <p>8.4 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.</p>
     
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>9 INFRASTRUCTURE</h3>
   <p>9.1 The Apache Xalan project relies on the Apache XML project
      and the Apache Infrastructure project for the following:</p>
   <p>a) Issue Database -- This is a system with issue-records,
      for tracking bugs, issues, features and requests.</p>
   <p>b) Repository -- The xalan.apache.org project has its set
      of parts that make up the software, and these parts are
      managed in a repository. Committers make changes to the source code,
      documentation and other associated parts that are stored in
      the repository. Any subproject will have its set of committers
      for its repository.</p>
   <p>c) Website -- The website <a href="http://xalan.apache.org">xalan.apache.org</a> 
      will contain information about the Apache Xalan project and its subprojects,
      including documentation, downloads of releases, and this charter.</p>
   <p>d) Mailing Lists -- appropriate mailing lists will be created
      at the discretion of the PMC. Such mailing lists could
      for example include: a PMC mailing list, a general mailing list,
      project or subproject public developer mailing lists,
      project or subproject public user mailing lists.</p>
   
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>10 LICENSING</h3>
   <p>10.1 All contributions to the Apache Xalan project adhere to the "Apache
      Software Foundation License, Version 2.0"
      (<a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>).
      All further contributions, including patches, 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.3 and 7.4.  </p>
       
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>11 THE DEVELOPMENT PROCESS</h3> 
   <p>11.1 For a committer to commit a change to the MAIN branch of the
      repository an issue-record must be opened in the "Issue Database"
      to track the change. The status of the issue must be kept up to date.</p>
   <p>11.2 No voting is required to commit changes, but one other active 
      committer must review the changes.  Before the changes are committed, the reviewer
      must add a comment in the corresponding issue-record indicating that
      they have reviewed and approve the changes.</p>
   <p>11.3 Issue-records and reviews are not required for committing changes to
      other experimental branches (not the MAIN branch) in a repository.</p>
   
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>12 VOTING</h3>
   <p>12.1 Unless otherwise stated in this mission, votes cast on Apache Xalan
      proposals must be made within two weeks of the proposal. A challenge to
      a proposal must also be made within two weeks of the proposal. Likewise,
      votes cast on challenges must be cast within two weeks of the challenge.</p>
   
  
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>13 RELATIONSHIP TO OTHER APACHE PROJECTS</h3>
   <p>13.1 The Apache Xalan project should work closely with other Apache
      projects, such as Xerces and XML, to avoid redundancy
      and achieve a coherent architecture among Apache Xalan and these
      projects.</p>
         
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
</div>
<div id="footer">Copyright © 1999-2012 The Apache Software Foundation<br />Apache, Xalan, and the Feather logo are trademarks of The Apache Software Foundation<div class="small">Web Page created on - Sun 09/09/2012</div>
</div>
</body>
</html>
