
======================
= Code Contributions =
======================

To make a contribution to a TianoCore project, follow these steps.
1. Create a change description in the format specified below to
   use in the source control commit log.
2. Your commit message must include your "Signed-off-by" signature,
   and "Contributed-under" message.
3. Your "Contributed-under" message explicitly states that the
   contribution is made under the terms of the specified
   contribution agreement.  Your "Contributed-under" message
   must include the name of contribution agreement and version.
   For example: Contributed-under: TianoCore Contribution Agreement 1.0
   The "TianoCore Contribution Agreement" is included below in
   this document.
4. Submit your code to the TianoCore project using the process
   that the project documents on its web page.  If the process is
   not documented, then submit the code on development email list
   for the project.
5. It is preferred that contributions are submitted using the same
   copyright license as the base project. When that is not possible,
   then contributions using the following licenses can be accepted:
   * BSD (2-clause): http://opensource.org/licenses/BSD-2-Clause
   * BSD (3-clause): http://opensource.org/licenses/BSD-3-Clause
   * MIT: http://opensource.org/licenses/MIT
   * Python-2.0: http://opensource.org/licenses/Python-2.0
   * Zlib: http://opensource.org/licenses/Zlib

   Contributions of code put into the public domain can also be
   accepted.

   Contributions using other licenses might be accepted, but further
   review will be required.

=====================================================
= Change Description / Commit Message / Patch Email =
=====================================================

Your change description should use the standard format for a
commit message, and must include your "Signed-off-by" signature
and the "Contributed-under" message.

== Sample Change Description / Commit Message =

=== Start of sample patch email message ===

From: Contributor Name <contributor@example.com>
Subject: [PATCH] CodeModule: Brief-single-line-summary

Full-commit-message

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Contributor Name <contributor@example.com>
---

An extra message for the patch email which will not be considered part
of the commit message can be added here.

Patch content inline or attached

=== End of sample patch email message ===

=== Notes for sample patch email ===

* The first line of commit message is taken from the email's subject
  line following [PATCH]. The remaining portion of the commit message
  is the email's content until the '---' line.
* git format-patch is one way to create this format

=== Definitions for sample patch email ===

* "CodeModule" is a short idenfier for the affected code.  For
  example MdePkg, or MdeModulePkg UsbBusDxe.
* "Brief-single-line-summary" is a short summary of the change.
* The entire first line should be less than ~70 characters.
* "Full-commit-message" a verbose multiple line comment describing
  the change.  Each line should be less than ~70 characters.
* "Contributed-under" explicitely states that the contribution is
  made under the terms of the contribtion agreement.  This
  agreement is included below in this document.
* "Signed-off-by" is the contributor's signature identifying them
  by their real/legal name and their email address.

========================================
= TianoCore Contribution Agreement 1.0 =
========================================

INTEL CORPORATION ("INTEL") MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
INFORMATION AND/OR OTHER MATERIALS FOR USE IN THE TIANOCORE OPEN SOURCE
PROJECT (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE
TERMS AND CONDITIONS OF THIS AGREEMENT BETWEEN YOU AND INTEL AND/OR THE
TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR
REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE
CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS
OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
USE THE CONTENT.

Unless otherwise indicated, all Content made available on the TianoCore
site is provided to you under the terms and conditions of the BSD
License ("BSD"). A copy of the BSD License is available at
http://opensource.org/licenses/bsd-license.php
or when applicable, in the associated License.txt file.

Certain other content may be made available under other licenses as
indicated in or with such Content. (For example, in a License.txt file.)

You accept and agree to the following terms and conditions for Your
present and future Contributions submitted to TianoCore site. Except
for the license granted to Intel hereunder, You reserve all right,
title, and interest in and to Your Contributions.

== SECTION 1: Definitions ==
* "You" or "Contributor" shall mean the copyright owner or legal
  entity authorized by the copyright owner that is making a
  Contribution hereunder. All other entities that control, are
  controlled by, or are under common control with that entity are
  considered to be a single Contributor. For the purposes of this
  definition, "control" means (i) the power, direct or indirect, to
  cause the direction or management of such entity, whether by
  contract or otherwise, or (ii) ownership of fifty percent (50%)
  or more of the outstanding shares, or (iii) beneficial ownership
  of such entity.
* "Contribution" shall mean any original work of authorship,
  including any modifications or additions to an existing work,
  that is intentionally submitted by You to the TinaoCore site for
  inclusion in, or documentation of, any of the Content. For the
  purposes of this definition, "submitted" means any form of
  electronic, verbal, or written communication sent to the
  TianoCore site or its representatives, including but not limited
  to communication on electronic mailing lists, source code
  control systems, and issue tracking systems that are managed by,
  or on behalf of, the TianoCore site for the purpose of
  discussing and improving the Content, but excluding
  communication that is conspicuously marked or otherwise
  designated in writing by You as "Not a Contribution."

== SECTION 2: License for Contributions ==
* Contributor hereby agrees that redistribution and use of the
  Contribution in source and binary forms, with or without
  modification, are permitted provided that the following
  conditions are met:
** Redistributions of source code must retain the Contributor's
   copyright notice, this list of conditions and the following
   disclaimer.
** Redistributions in binary form must reproduce the Contributor's
   copyright notice, this list of conditions and the following
   disclaimer in the documentation and/or other materials provided
   with the distribution.
* Disclaimer. None of the names of Contributor, Intel, or the names
  of their respective contributors may be used to endorse or
  promote products derived from this software without specific
  prior written permission.
* Contributor grants a license (with the right to sublicense) under
  claims of Contributor's patents that Contributor can license that
  are infringed by the Contribution (as delivered by Contributor) to
  make, use, distribute, sell, offer for sale, and import the
  Contribution and derivative works thereof solely to the minimum
  extent necessary for licensee to exercise the granted copyright
  license; this patent license applies solely to those portions of
  the Contribution that are unmodified. No hardware per se is
  licensed.
* EXCEPT AS EXPRESSLY SET FORTH IN SECTION 3 BELOW, THE
  CONTRIBUTION IS PROVIDED BY THE CONTRIBUTOR "AS IS" AND ANY
  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  CONTRIBUTOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
  CONTRIBUTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  DAMAGE.

== SECTION 3: Representations ==
* You represent that You are legally entitled to grant the above
  license. If your employer(s) has rights to intellectual property
  that You create that includes Your Contributions, You represent
  that You have received permission to make Contributions on behalf
  of that employer, that Your employer has waived such rights for
  Your Contributions.
* You represent that each of Your Contributions is Your original
  creation (see Section 4 for submissions on behalf of others).
  You represent that Your Contribution submissions include complete
  details of any third-party license or other restriction
  (including, but not limited to, related patents and trademarks)
  of which You are personally aware and which are associated with
  any part of Your Contributions.

== SECTION 4: Third Party Contributions ==
* Should You wish to submit work that is not Your original creation,
  You may submit it to TianoCore site separately from any
  Contribution, identifying the complete details of its source
  and of any license or other restriction (including, but not
  limited to, related patents, trademarks, and license agreements)
  of which You are personally aware, and conspicuously marking the
  work as "Submitted on behalf of a third-party: [named here]".

== SECTION 5: Miscellaneous ==
* Applicable Laws. Any claims arising under or relating to this
  Agreement shall be governed by the internal substantive laws of
  the State of Delaware or federal courts located in Delaware,
  without regard to principles of conflict of laws.
* Language. This Agreement is in the English language only, which
  language shall be controlling in all respects, and all versions
  of this Agreement in any other language shall be for accommodation
  only and shall not be binding. All communications and notices made
  or given pursuant to this Agreement, and all documentation and
  support to be provided, unless otherwise noted, shall be in the
  English language.

