<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>LLVM Developer Policy</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>
      
<div class="doc_title">LLVM Developer Policy</div>
<ol>
  <li><a href="#introduction">Introduction</a></li>
  <li><a href="#policies">Developer Policies</a>
  <ol>
    <li><a href="#informed">Stay Informed</a></li>
    <li><a href="#patches">Making a Patch</a></li>
    <li><a href="#reviews">Code Reviews</a></li>
    <li><a href="#owners">Code Owners</a></li>
    <li><a href="#testcases">Test Cases</a></li>
    <li><a href="#quality">Quality</a></li>
    <li><a href="#commitaccess">Obtaining Commit Access</a></li>
    <li><a href="#newwork">Making a Major Change</a></li>
    <li><a href="#incremental">Incremental Development</a></li>
    <li><a href="#attribution">Attribution of Changes</a></li>
  </ol></li>
  <li><a href="#clp">Copyright, License, and Patents</a>
  <ol>
    <li><a href="#copyright">Copyright</a></li>
    <li><a href="#license">License</a></li>
    <li><a href="#patents">Patents</a></li>
    <li><a href="#devagree">Developer Agreements</a></li>
  </ol></li>
</ol>
<div class="doc_author">Written by the LLVM Oversight Team</div>

<!--=========================================================================-->
<div class="doc_section"><a name="introduction">Introduction</a></div>
<!--=========================================================================-->
<div class="doc_text">
  <p>This document contains the LLVM Developer Policy which defines the
  project's policy towards developers and their contributions. The intent of 
  this policy is to eliminate mis-communication, rework, and confusion that 
  might arise from the distributed nature of LLVM's development.  By stating 
  the policy in clear terms, we hope each developer can know ahead of time
  what to expect when making LLVM contributions.</p>
  <p>This policy is also designed to accomplish the following objectives:</p>
  <ol>
    <li>Attract both users and developers to the LLVM project.</li>
    <li>Make life as simple and easy for contributors as possible.</li>
    <li>Keep the top of Subversion trees as stable as possible.</li>
  </ol>
  
  <p>This policy is aimed at frequent contributors to LLVM. People interested in
  contributing one-off patches can do so in an informal way by sending them to
  the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">
  llvm-commits mailing list</a> and engaging another developer to see it through
  the process.</p>
  
</div>

<!--=========================================================================-->
<div class="doc_section"><a name="policies">Developer Policies</a></div>
<!--=========================================================================-->
<div class="doc_text">
  <p>This section contains policies that pertain to frequent LLVM
  developers.  We always welcome <a href="#patches">one-off patches</a> from
  people who do not routinely contribute to LLVM, but we expect more from 
  frequent contributors to keep the system as efficient as possible for 
  everyone.
  Frequent LLVM contributors are expected to meet the following requirements in
  order for LLVM to maintain a high standard of quality.<p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="informed">Stay Informed</a> </div>
<div class="doc_text">
  <p>Developers should stay informed by reading at least the 
  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> 
  email list.  If you are doing anything more than just casual work on LLVM, 
  it is suggested that you also subscribe to the 
  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a> 
  list and pay attention to changes being made by others.</p>
  <p>We recommend that active developers register an email account with 
  <a href="http://llvm.org/bugs/">LLVM Bugzilla</a> and preferably subscribe to
  the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs">llvm-bugs</a>
  email list to keep track of bugs and enhancements occurring in LLVM.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="patches">Making a Patch</a></div>

<div class="doc_text">

  <p>When making a patch for review, the goal is to make it as easy for the
  reviewer to read it as possible.  As such, we recommend that you:</p>
  <ol>
    <li>Make your patch against the Subversion trunk, not a branch, and not an 
    old version of LLVM.  This makes it easy to apply the patch.</li>
        
    <li>Similarly, patches should be submitted soon after they are generated.
    Old patches may not apply correctly if the underlying code changes between
    the time the patch was created and the time it is applied.</li>
        
    <li>Patches should be made with this command:
    <div class="doc_code"><pre>svn diff -x -u</pre></div>
    or with the utility <tt>utils/mkpatch</tt>, which makes it easy to read the
    diff.</li>
     
    <li>Patches should not include differences in generated code such as the
    code generated by <tt>autoconf</tt> or <tt>tblgen</tt>. The
    <tt>utils/mkpatch</tt> utility takes care of this for you.</li>
  </ol>
  
  <p>When sending a patch to a mailing list, it is a good idea to send it as an
  <em>attachment</em> to the message, not embedded into the text of the
  message.  This ensures that your mailer will not mangle the patch when it 
  sends it (e.g. by making whitespace changes or by wrapping lines).</p>
  
  <p><em>For Thunderbird users:</em> Before submitting a patch, please open 
  <em>Preferences &#8594; Advanced &#8594; General &#8594; Config Editor</em>,
  find the key <tt>mail.content_disposition_type</tt>, and set its value to
  <tt>1</tt>. Without this setting, Thunderbird sends your attachment using
  <tt>Content-Disposition: inline</tt> rather than <tt>Content-Disposition:
  attachment</tt>. Apple Mail gamely displays such a file inline, making it
  difficult to work with for reviewers using that program.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="reviews">Code Reviews</a></div>
<div class="doc_text">
  <p>LLVM has a code review policy. Code review is one way to increase the
  quality of software. We generally follow these policies:</p>
  <ol>
    <li>All developers are required to have significant changes reviewed 
    before they are committed to the repository.</li>
    <li>Code reviews are conducted by email, usually on the llvm-commits
        list.</li>
    <li>Code can be reviewed either before it is committed or after.  We expect
        major changes to be reviewed before being committed, but smaller
        changes (or changes where the developer owns the component) can be
        reviewed after commit.</li>
    <li>The developer responsible for a code change is also responsible for
        making all necessary review-related changes.</li>
    <li>Code review can be an iterative process, which continues until the patch
        is ready to be committed.</li>
  </ol>
  
  <p>Developers should participate in code reviews as both reviewers and 
    reviewees. If someone is kind enough to review your code, you should
    return the favor for someone else.  Note that anyone is welcome to review
    and give feedback on a patch, but only people with Subversion write access 
    can approve it.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="owners">Code Owners</a></div>
<div class="doc_text">

  <p>The LLVM Project relies on two features of its process to maintain rapid
     development in addition to the high quality of its source base: the
     combination of code review plus post-commit review for trusted maintainers.
     Having both is a great way for the project to take advantage of the fact
     that most people do the right thing most of the time, and only commit
     patches without pre-commit review when they are confident they are
     right.</p>
     
  <p>The trick to this is that the project has to guarantee that all patches 
     that are committed are reviewed after they go in: you don't want everyone
     to assume someone else will review it, allowing the patch to go unreviewed.
     To solve this problem, we have a notion of an 'owner' for a piece of the
     code.  The sole responsibility of a code owner is to ensure that a commit
     to their area of the code is appropriately reviewed, either by themself or
     by someone else.  The current code owners are:</p>
  
  <ol>
    <li><b>Anton Korobeynikov</b>: Exception handling, debug information, and
        Windows codegen.</li>
    <li><b>Duncan Sands</b>: llvm-gcc 4.2.</li>
    <li><b>Evan Cheng</b>: Code generator and all targets.</li>
    <li><b>Chris Lattner</b>: Everything else.</li>
  </ol>
  
  <p>Note that code ownership is completely different than reviewers: anyone can
     review a piece of code, and we welcome code review from anyone who is
     interested.  Code owners are the "last line of defense" to guarantee that
     all patches that are committed are actually reviewed.</p>

  <p>Being a code owner is a somewhat unglamorous position, but it is incredibly
     important for the ongoing success of the project.  Because people get busy,
     interests change, and unexpected things happen, code ownership is purely
     opt-in, and anyone can choose to resign their "title" at any time. For now,
     we do not have an official policy on how one gets elected to be a code 
     owner.
  </p>

</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="testcases">Test Cases</a></div>
<div class="doc_text">
  <p>Developers are required to create test cases for any bugs fixed and any new
  features added.  Some tips for getting your testcase approved:</p>
  <ol>
    <li>All feature and regression test cases are added to the 
    <tt>llvm/test</tt> directory. The appropriate sub-directory should be 
    selected (see the <a href="TestingGuide.html">Testing Guide</a> for 
    details).</li>
    <li>Test cases should be written in 
    <a href="LangRef.html">LLVM assembly language</a> unless the
    feature or regression being tested requires another language (e.g. the
    bug being fixed or feature being implemented is in the llvm-gcc C++
    front-end, in which case it must be written in C++).</li>
    <li>Test cases, especially for regressions, should be reduced as much as 
    possible, by <a href="Bugpoint.html">bugpoint</a> or
    manually. It is unacceptable 
    to place an entire failing program into <tt>llvm/test</tt> as this creates
    a <i>time-to-test</i> burden on all developers. Please keep them short.</li>
  </ol>
  
  <p>Note that llvm/test is designed for regression and small feature tests
    only. More extensive test cases (e.g., entire applications, benchmarks,
    etc) should be added to the <tt>llvm-test</tt> test suite.  The llvm-test
    suite is for coverage (correctness, performance, etc) testing, not feature
    or regression testing.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="quality">Quality</a></div>
<div class="doc_text">
  <p>The minimum quality standards that any change must satisfy before being
    committed to the main development branch are:</p>
  <ol>
    <li>Code must adhere to the 
    <a href="CodingStandards.html">LLVM Coding Standards</a>.</li>
    <li>Code must compile cleanly (no errors, no warnings) on at least one 
    platform.</li>
    <li>Bug fixes and new features should <a href="#testcases">include a
        testcase</a> so we know if the fix/feature ever regresses in the
        future.</li>
    <li>Code must pass the dejagnu (<tt>llvm/test</tt>) test suite.</li>
    <li>The code must not cause regressions on a reasonable subset of llvm-test,
        where "reasonable" depends on the contributor's judgement and the scope
        of the change (more invasive changes require more testing). A reasonable
        subset might be something like
        "<tt>llvm-test/MultiSource/Benchmarks</tt>".</li>
  </ol>
  <p>Additionally, the committer is responsible for addressing any problems
  found in the future that the change is responsible for.  For example:</p>
  <ul>
    <li>The code should compile cleanly on all supported platforms.</li>
    <li>The changes should not cause any correctness regressions in the
       <tt>llvm-test</tt> suite and must not cause any major performance
       regressions.</li>
    <li>The change set should not cause performance or correctness regressions 
    for the LLVM tools.</li>
    <li>The changes should not cause performance or correctness regressions in 
    code compiled by LLVM on all applicable targets.</li>
    <li>You are expected to address any <a href="http://llvm.org/bugs/">bugzilla
    bugs</a> that result from your change.</li>
  </ul>
  
  <p>We prefer for this to be handled before submission but understand that it
     isn't possible to test all of this for every submission.  Our nightly
     testing
     infrastructure normally finds these problems.  A good rule of thumb is to 
     check the nightly testers for regressions the day after your change.</p>
     
  <p>Commits that violate these quality standards (e.g. are very broken) may
    be reverted. This is necessary when the change blocks other developers from
    making progress. The developer is welcome to re-commit the change after 
    the problem has been fixed.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection">
  <a name="commitaccess">Obtaining Commit Access</a></div>
<div class="doc_text">

<p>
We grant commit access to contributors with a track record of submitting high
quality patches.  If you would like commit access, please send an email to  
<a href="mailto:sabre@nondot.org">Chris</a> with the following information:</p>

<ol>
  <li>The user name you want to commit with, e.g. "sabre".</li>
  <li>The full name and email address you want message to llvm-commits to come
      from, e.g. "Chris Lattner &lt;sabre@nondot.org&gt;".</li>
  <li>A "password hash" of the password you want to use, e.g. "2ACR96qjUqsyM".  
      Note that you don't ever tell us what your password is, you just give it
      to us in an encrypted form.  To get this, run "htpasswd" (a utility that
      comes with apache) in crypt mode (often enabled with "-d"), or find a web
      page that will do it for you.</li>
</ol>

<p>Once you've been granted commit access, you should be able to check out an
   LLVM tree with an SVN URL of "https://username@llvm.org/..." instead of the
   normal anonymous URL of "http://llvm.org/...".  The first time you commit
   you'll have to type in your password.  Note that you may get a warning from
   SVN about an untrusted key, you can ignore this.  To verify that your commit
   access works, please do a test commit (e.g. change a comment or add a blank
   line).  Your first commit to a repository may require the autogenerated email
   to be approved by a mailing list.  This is normal, and will be done when
   the mailing list owner has time.</p>

<p>If you have recently been granted commit access, these policies apply:</p>

<ol>
  <li>You are granted <i>commit-after-approval</i> to all parts of LLVM.
  To get approval, submit a <a href="#patches">patch</a> to
  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">
  llvm-commits</a>.  When approved you may commit it yourself.</li>
  <li>You are allowed to commit patches without approval which you think are
  obvious. This is clearly a subjective decision &mdash; we simply expect you
  to use good judgement.  Examples include: fixing build breakage, reverting
  obviously broken patches, documentation/comment changes, any other minor
  changes.</li>
  <li>You are allowed to commit patches without approval to those portions 
  of LLVM that you have contributed or maintain (i.e., have been assigned 
  responsibility for), with the proviso that such commits must not break the 
  build.  This is a "trust but verify" policy and commits of this nature are 
  reviewed after they are committed.</li>
  <li>Multiple violations of these policies or a single egregious violation
  may cause commit access to be revoked.</li>
</ol>

<p>In any case, your changes are still subject to <a href="#reviews">code
review</a> (either before or after they are committed, depending on the nature
of the change).  You are encouraged to review other peoples' patches as well,
but you aren't required to.</p>
  
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="newwork">Making a Major Change</a></div>
<div class="doc_text">
  <p>When a developer begins a major new project with the aim of contributing 
  it back to LLVM, s/he should inform the community with an email to 
  the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> 
  email list, to the extent possible. The reason for this is to:
  <ol>
    <li>keep the community informed about future changes to LLVM, </li>
    <li>avoid duplication of effort by preventing multiple parties working on
     the same thing and not knowing about it, and</li>
    <li>ensure that any technical issues around the proposed work are 
    discussed and resolved before any significant work is done.</li>
  </ol>
  
  <p>The design of LLVM is carefully controlled to ensure that all the pieces
  fit together well and are as consistent as possible. If you plan to make a
  major change to the way LLVM works or want to add a major new extension, it
  is a good idea to get consensus with the development
  community before you start working on it.</p>
  
  <p>Once the design of the new feature is finalized, the work itself should be
     done as a series of <a href="#incremental">incremental changes</a>, not as
     a long-term development branch.</p>
     
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"> <a name="incremental">Incremental Development</a>
</div>
<div class="doc_text">
  <p>In the LLVM project, we do all significant changes as a series of
     incremental patches.  We have a strong dislike for huge changes or
     long-term development branches.  Long-term development branches have a
     number of drawbacks:</p>
     
   <ol>
   <li>Branches must have mainline merged into them periodically.  If the branch
       development and mainline development occur in the same pieces of code,
       resolving merge conflicts can take a lot of time.</li>
   <li>Other people in the community tend to ignore work on branches.</li>
   <li>Huge changes (produced when a branch is merged back onto mainline) are
       extremely difficult to <a href="#reviews">code review</a>.</li>
   <li>Branches are not routinely tested by our nightly tester
       infrastructure.</li>
   <li>Changes developed as monolithic large changes often don't work until the
       entire set of changes is done.  Breaking it down into a set of smaller
       changes increases the odds that any of the work will be committed to the
       main repository.</li>
   </ol>    
  
  <p>
  To address these problems, LLVM uses an incremental development style and we
  require contributors to follow this practice when making a large/invasive
  change.  Some tips:</p>
  
  <ul>
    <li>Large/invasive changes usually have a number of secondary changes that
     are required before the big change can be made (e.g. API cleanup, etc).
     These sorts of changes can often be done before the major change is done,
     independently of that work.</li>
    <li>The remaining inter-related work should be decomposed into unrelated 
    sets of changes if possible.  Once this is done, define the first increment
    and get consensus on what the end goal of the change is.</li>
    
    <li>Each change in the set can be stand alone (e.g. to fix a bug), or part
    of a planned series of changes that works towards the development goal.</li>
    
    <li>Each change should be kept as small as possible. This simplifies your 
    work (into a logical progression), simplifies code review and reduces the
    chance that you will get negative feedback on the change. Small increments
    also facilitate the maintenance of a high quality code base.</li>
    
    <li>Often, an independent precursor to a big change is to add a new API and
        slowly migrate clients to use the new API.  Each change to use the new
        API is often "obvious" and can be committed without review.  Once the 
        new API is in place and used, it is much easier to replace the
        underlying implementation of the API.  This implementation change is
        logically separate from the API change.</li>
  </ul>
  
  <p>If you are interested in making a large change, and this scares you, please
     make sure to first <a href="#newwork">discuss the change/gather
     consensus</a> then ask about the best way to go about making
     the change.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="attribution">Attribution of 
Changes</a></div>
<div class="doc_text">
  <p>We believe in correct attribution of contributions to 
  their contributors.  However, we do not want the source code to be littered
  with random attributions "this code written by J Random Guy" (this is noisy
  and distracting).  In practice, the revision control system keeps a perfect
  history of who changed what, and the CREDITS.txt file describes higher-level
  contributions.  If you commit a patch for someone else, please say "patch 
  contributed by J Random Guy!" in the commit message.</p>

  <p>Overall, please do not add contributor names to the source code.</p>
</div>



<!--=========================================================================-->
<div class="doc_section">
  <a name="clp">Copyright, License, and Patents</a>
</div>
<!--=========================================================================-->

<div class="doc_text">
  <p>This section addresses the issues of copyright, license and patents for 
  the LLVM project.
  Currently, the University of Illinois is the LLVM copyright holder and the 
  terms of its license to LLVM users and developers is the 
  <a href="http://www.opensource.org/licenses/UoI-NCSA.php">University of 
    Illinois/NCSA Open Source License</a>.</p>

<div class="doc_notes">
  <p style="text-align:center;font-weight:bold">NOTE: This section
  deals with legal matters but does not provide legal advice.  We are not
  lawyers, please seek legal counsel from an attorney.</p>
</div>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="copyright">Copyright</a></div>
<div class="doc_text">
  <p>
  <p>For consistency and ease of management, the project requires the 
  copyright for all LLVM software to be held by a single copyright holder:
  the University of Illinois (UIUC).</p>
  
  <p>
  Although UIUC may eventually reassign the copyright of the software to another
  entity (e.g. a dedicated non-profit "LLVM Organization")
  the intent for the project is to always have a single entity hold the
  copyrights to LLVM at any given time.</p>
  
  <p>We believe that having a single copyright 
  holder is in the best interests of all developers and users as it greatly 
  reduces the managerial burden for any kind of administrative or technical 
  decisions about LLVM.  The goal of the LLVM project is to always keep the code
  open and <a href="#license">licensed under a very liberal license</a>.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="license">License</a></div>
<div class="doc_text">
  <p>We intend to keep LLVM perpetually open source 
  and to use a liberal open source license. The current license is the 
  <a href="http://www.opensource.org/licenses/UoI-NCSA.php">
    University of Illinois/NCSA Open Source License</a>, which boils
  down to this:</p>
  <ul>
    <li>You can freely distribute LLVM.</li>
    <li>You must retain the copyright notice if you redistribute LLVM.</li>
    <li>Binaries derived from LLVM must reproduce the copyright notice (e.g. 
        in an included readme file).</li>
    <li>You can't use our names to promote your LLVM derived products.</li>
    <li>There's no warranty on LLVM at all.</li>
  </ul>
  
  <p>We believe this fosters the widest adoption of LLVM because it <b>allows 
  commercial products to be derived from LLVM</b> with few restrictions and
  without a requirement for making any derived works also open source (i.e. 
  LLVM's license is not a "copyleft" license like the GPL). We suggest that you
  read the <a href="http://www.opensource.org/licenses/UoI-NCSA.php">License</a>
  if further clarification is needed.</p>
  
  <p>Note that the LLVM Project does distribute llvm-gcc, <b>which is GPL.</b>
  This means that anything "linked" into llvm-gcc must itself be compatible
  with the GPL, and must be releasable under the terms of the GPL.  This implies
  that <b>any code linked into llvm-gcc and distributed to others may be subject
  to the viral aspects of the GPL</b> (for example, a proprietary code generator
  linked into llvm-gcc must be made available under the GPL).  This is not a
  problem for code already distributed under a more liberal license (like the
  UIUC license), and does not affect code generated by llvm-gcc.  It may be a
  problem if you intend to base commercial development on llvm-gcc without
  redistributing your source code.</p>
  
  <p>We have no plans to change the license of LLVM.  If you have questions
    or comments about the license, please contact the <a
    href="mailto:llvm-oversight@cs.uiuc.edu">LLVM Oversight Group</a>.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="patents">Patents</a></div>
<div class="doc_text">

<p>To the best of our knowledge, LLVM does not infringe on any patents (we have
   actually removed code from LLVM in the past that was found to infringe).
   Having code in LLVM that infringes on patents would violate an important
   goal of the project by making it hard or impossible to reuse the code for
   arbitrary purposes (including commercial use).</p>
   
<p>When contributing code, we expect contributors to notify us of any potential
   for patent-related trouble with their changes.  If you or your employer
   own the rights to a
   patent and would like to contribute code to LLVM that relies on it, we
   require that
   the copyright owner sign an agreement that allows any other user of LLVM to
   freely use your patent.  Please contact the <a 
   href="mailto:llvm-oversight@cs.uiuc.edu">oversight group</a> for more
   details.</p>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="devagree">Developer Agreements</a></div>
<div class="doc_text">
  <p>With regards to the LLVM copyright and licensing, developers agree to 
  assign their copyrights to UIUC for any contribution made so that 
  the entire software base can be managed by a single copyright holder.  This
  implies that any contributions can be licensed under the license that the
  project uses.</p>

  <p>When contributing code, you also affirm that you are legally entitled to 
  grant this copyright, personally or on behalf of your employer.  If the code
  belongs to some other entity, please raise this issue with the oversight
  group before the code is committed.</p>
</div>

<!-- *********************************************************************** -->
<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
  Written by the 
  <a href="mailto:llvm-oversight@cs.uiuc.edu">LLVM Oversight Group</a><br>
  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>
</body>
</html>
