<?php
/**
 * Copyright (c) 2005, 2020 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License 2.0 which accompanies
 * this distribution, and is available at http://eclipse.org/legal/epl-2.0
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<div id="maincontent">
  <div id="midcolumn">
    <h1><?php echo $pageTitle; ?></h1>
    <p>Legal resource page for the Eclipse Foundation.</p>
    <blockquote>
      <ul>
        <li><a href="#GettingStarted" class=jump>Getting Started</a></li>
        <li><a href="#Agreements" class=jump>Agreement and Licenses</a></li>
        <li><a href="#Trademarks" class=jump>Privacy and Trademarks</a></li>
        <li><a href="#CommitterAgreements" class=jump>Committer Agreements</a></li>
        <li><a href="#Committers" class=jump>Committer Resources</a></li>
      </ul>
    </blockquote>
    <div class="homeitem3col">
      <h3>
        <a name="GettingStarted"></a>Getting Started
      </h3>
      <ul>
        <li>The <a href="guidetolegaldoc.php">Guide to the Legal Documents</a>
          provides an in-depth look at the many legal documents related to
          the Eclipse open source community. This content is of value to
          committers, contributors, redistributors of Eclipse content,
          developers of Eclipse-based products and users of Eclipse
          technologies;
        </li>
        <li>The <a href="epl-2.0">Eclipse Public License</a> (EPL) is the
          default license for Eclipse Project (please see the <a
            href="/org/documents/epl-2.0/faq.php">Eclipse Public License
          Frequently Asked Questions</a>);
        </li>
        <li>The <A href="legalfaq.php">Eclipse Foundation Legal Frequently
          Asked Questions</A> answers some of the commonly asked questions
          about Eclipse.org licensing, contributions, working as a committer,
          and cryptography;
        </li>
        <li><a href="licenses.php">Third Party Content Licenses</a> provides
          a list of licenses that are approved for third party content used
          by Eclipse projects; or
        </li>
        <li>For other questions, email: <a href="mailto:license@eclipse.org">license@eclipse.org</a>.
        </li>
      </ul>
    </div>
    <div class="homeitem3col">
      <h3><a name="Agreements"></a>Agreements and Licenses</h3>
      <ul>
        <li><a href="termsofuse.php">Web Site Terms of Use:</a>
          By accessing, browsing or using this web site, you acknowledge that you have
          read, understood, and agree to be bound by the terms and conditions
          contained in this agreement.
        </li>
        <li><a href="epl-2.0">Eclipse Public License</a> (EPL):
          The fundamental license document for the Eclipse projects and community.
        </li>
        <li><a href="../org/documents/edl-v10.php">Eclipse Distribution License</a> (EDL):
          The BSD license used by some Eclipse projects which require dual-licensing along with the EPL.
          Other than for <a href="noncodelicenses.php">example code or build scripts</a>.
        </li>
        <li><a href="ECA.php">Eclipse Contributor Agreement:</a>
          If you are contributing code or documentation to Eclipse Foundation projects you are
          required to complete this agreement.
        </li>
        <li><a href="DCO.php">Developer Certificate of Origin:</a>
          If you are contributing code or documentation to Eclipse Foundation projects, and using
          the git signed-off-by mechanism, you are agreeing to this certificate.
        </li>
        <li><a href="copyright.php">Copyright Agent:</a>
          Contact information for the Eclipse Foundation's Copyright Agent.
        </li>
        <li><a href="epl/notice.php">Eclipse Foundation Software User Agreement:</a>
          By downloading builds or accessing Eclipse Foundation source code repositories, you
          acknowledge that you have read, understood, and agree to be bound by the
          terms and conditions contained in this agreement.
        </li>
        <li><a href="noncodelicenses.php">Approved Licenses for Non-Code, Example, and Other Content:</a>
          The Board of Directors has approved the use of certain licenses for specific types of
          content on eclipse.org.
        </li>
        <li>
          <a href="documents/eclipse-adoptium-marketplace-publisher-agreement.pdf">Eclipse Foundation Adoptium Marketplace Publisher Agreement:</a> The license agreement Adoptium Working Group Members must agree to before publishing links in the Adoptium Marketplace from which publisher makes Java SE distributions in binary form.
        </li>
        <li><a href="documents/eclipse-openvsx-publisher-agreement.pdf">Eclipse Foundation Open VSX Publisher Agreement: </a>
        The license agreement Eclipse Open VSX Registry publishers must agree to before publishing extensions for VS Code compatible editors on <a href="https://open-vsx.org/">open-vsx.org</a>. You may read the Open VSX Registry FAQ <a href="open-vsx-registry-faq/">here</a>.
        </li>
        <li><a href="updatemanager.php">Eclipse Foundation Update Manager Agreement:</a>
          If you package &quot;downloadable features&quot; to be installed
          from your web site using the Eclipse Update Manager, you must read,
          understand, and agree to the terms and conditions contained in this agreement.
        </li>
        <li><a href="efsl.php">Eclipse Foundation Specification License:</a>
          The license used by Eclipse Foundation specifications created under the Eclipse Foundation Specification Process.
        </li>
        <li><a href="tck.php">Eclipse Foundation TCK License:</a>
          The binary license used by Technology Compatibility Kits to demonstrate compatibility with their corresponding Specifications.
        </li>
        <li><a href="usergroups.php">Eclipse Foundation User Group Trademark License Agreement:</a>
          Guidelines and agreements for user groups that are based on Eclipse Foundation projects 
          and/or working groups. 
        </li>
      </ul>
    </div>
    <div class="homeitem3col">
      <h3><a name="Trademarks"></a>Privacy and Trademarks</h3>
      <ul>
        <li><A href="privacy.php">Privacy Policy:</A>
          Your privacy is important to us. This statement discloses the information practices for this web site, including what type of
          information is gathered and tracked, how the information is used, and with whom the information is shared.
        </li>
        <li><A href="logo_guidelines.php">Eclipse Foundation Trademark Usage Guidelines:</A>
          Guidelines on permissable use of Eclipse logos and trademarks.
        </li>
        <li><A href="Trademark_Transfer_Agreement.pdf">Trademark and Domain Name Assignment Agreement:</A>
          Pre-existing projects which move to the Eclipse Foundation will be required to execute this agreement
          to ensure that the Eclipse Foundation has rights to any trademarks associated with the project name.
        </li>
        <li><A href="trademarks.php">Eclipse Foundation Trademarks:</A>
          The list of trademarks claimed by the Eclipse Foundation.
        </li>
        <li><A href="trademarks.php#attribution">Trademark Attributions:</A>
          Content on this web site may make reference to trademarks requiring attribution.
        </li>
      </ul>
    </div>
    <div class="homeitem3col">
      <h3><a name="CommitterAgreements"></a>Committer Agreements</h3>
      <p>For Eclipse projects (and the open source world in general), <em>committers</em> are the ones who hold the keys. 
      Committers decide what code goes into the code base, they decide how a project builds, and they ultimately 
      decide what gets delivered to the adopter community. Committer status is assigned following a demonstration
      of merit (generally a record of high-quality contribution to a project) and a successful 
      <a href="/projects/handbook#elections-committer">committer election</a>.</p>
      <p>The specific agreements required depends on the nature of the project. For committers on an open source
      <em>software</em> project (i.e., most Eclipse Foundation projects), the 
      <a href="https://www.eclipse.org/projects/handbook/#paperwork-documents">traditional agreements</a> are required. 
      For committers on an open source <em>specification</em> project, additional 
      <a href="https://www.eclipse.org/projects/handbook/#specifications-agreements">working group agreements</a> are required.</p>
      <p>Committer status is assigned on a project-by-project basis. That is, individuals have committer rights only 
      on those projects for which they hold committer status. For all other projects, they are contributors.</p>
      <p><strong>Our committer provisioning process is automated</strong>: new committers will&mdash;following their successful
      election&mdash;be contacted by email to engage in our <em>agreement workflow</em> (also referred to as our
      <a href="https://www.eclipse.org/projects/handbook/#paperwork">paperwork process</a>), which guides
      them through signing those agreements that they need. The agreements are provided below for convenience.</p>
      <ul>
        <li><A href="committer_process/EclipseMemberCommitterAgreement.pdf">Member Committer and Contributor Agreement:</A>
          The Member Committer and Contributor Agreement (MCCA) is used by organizations that are 
          <a href="/membership">members of the Eclipse Foundation</a> to cover all of their employees who participate 
          in Eclipse Foundation open source projects as committers and contributors. This agreement allows employees 
          of our member organizations to participate in Eclipse Foundation projects without any additional paperwork. 
        </li>
        <li><A href="committer_process/EclipseIndividualCommitterAgreementFinal.pdf">Individual Committer Agreement:</A>
          This agreement is used by committers participating in Eclipse open source projects whose employers are 
          either not <a href="/membership">members of the Eclipse Foundation</a> or are members that have not signed the
          Member Committer and Contributor Agreement.
        </li>
        <li><a href="EmployerConsentAgreementForSpecificationProjects-v1.0.pdf">Employer Consent Agreement for Eclipse 
          Foundation Specification Projects:</a>
          The Employer Consent Agreement for Eclipse Foundation Specification Projects ("Employer Consent Agreement") 
          is to be completed by the employer of a committer who is seeking Individual Committer status on an Eclipse 
          Foundation <a href="/projects/efsp">Specification Project</a> operating under the purview of an Eclipse Foundation
          Working Group. Note that this form is only required when the employer is not a participant of the 
          corresponding <a href="/org/workinggroups">working group</a>.
        </li>
        <li><a href="committer_process/re-sign">New Eclipse Foundation Committer and Contributor Agreements FAQ</a>
          In 2018, we updated our standard contributor and committer agreements, and all our committers and contributors, 
          as well as those members who have member committer agreements, were required to re-sign their agreement with us.
          This FAQ is mostly historical at this point, but does contain some generally useful information.
        </li>
        </ul>
    </div>
    <div class="homeitem3col">
      <h3><a name="Committers"></a>Resources for Committers</h3>
          <p>A committer is a person that has been granted commit rights to systems on the Eclipse servers 
          such as Git repositories, web pages, download servers, mailing lists and so forth. In addition to
          writing project content, committers play a critical role is other aspects of managing an open
          source project.</p>
      <ul>
        <li><a href="https://www.eclipse.org/projects/handbook">Eclipse Project Handbook:</a>
          This Eclipse Project Handbook is a reference guide for working as a committer on an Eclipse
          open source project.
        </li>
        <li><A href="https://www.eclipse.org/projects/handbook/#ip">Intellectual Property Due Diligence:</A>
          At least in some cases, the Eclipse Foundation's IP Team needs to be engaged to review 
          third-party content, or contributions of project content from non-committers. Committers have an
          important role to play in this process.
          <ul>
            <li><A href="committerguidelines.php">Eclipse Committer Due Diligence Guidelines:</A>
              This document outlines the issues to be aware of and the processes one should follow when working 
              as a committer on Eclipse projects.  
            </li>
			<li><a href="https://www.eclipse.org/projects/handbook/#ip-project-content">Project Content:</a>
				Project Content is content that is managed by the project team. This includes content that is 
				produced by project committers, along with content that is contributed to the project by 
				outside contributors.
			</li>
			<li><a href="https://www.eclipse.org/projects/handbook/#ip-third-party">Third-party Content:</a>
				The Eclipse Foundation IP Due Dilience Process defines three different types: Prerequisite, 
				Exempt Prerequisite, and Works With Dependency.			
			</li>
            <li><A href="https://www.eclipse.org/projects/handbook/#ip-iplog">IP Logs:</A>
              An IP Log is a record of the intellectual property contributions to a project. This includes such as a list of all committers, past and present, that have worked on the code and (especially) those who have made contributions to the current code base.
            </li>
          </ul>
        </li>
        <li><A href="https://www.eclipse.org/projects/handbook/#legaldoc">Legal Documentation:</A>
          This provides templates for <code>NOTICE</code>, <code>CONTRIBUTING</code>, <code>LICENSE</code> and other
          files that accompany project source code and distributions.
        </li>
        <li><A href="https://www.eclipse.org/projects/handbook/#elections">Committer Elections:</A>
          Contributors may become committers via committer election.
        </li>
      </ul>
    </div>
  </div>
</div>