<?php
/**
 * Copyright (c) 2005, 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Eric Poirier (Eclipse Foundation) - initial API and implementation
 */
?>
<div id="maincontent">
  <div id="midcolumn">
    <h1><?php print $pageTitle; ?></h1>
    <p>The Eclipse Foundation provides our global community of individuals and
      organizations with a mature, scalable, and business-friendly environment for
      open source software collaboration and innovation. The Foundation is home to
      the Eclipse IDE, Jakarta EE, and over 350 open source projects, including
      runtimes, tools, and frameworks for a wide range of technology domains
      such as the Internet of Things, automotive, geospatial, systems
      engineering, and many others.</p>
    <p>
      The Eclipse Foundation is a 501(c)(6) not-for-profit organization
      supported by over 275 <a href="/membership">members</a> who
      value the Foundation’s unique <a href="/org/workinggroups/">Working Group</a>
      governance model, open innovation processes, and <a
        href="http://events.eclipse.org/"
      >community-building events</a>. Our members include industry leaders who
      have embraced open source as a <a href="/org/value">key
        enabler for business strategy</a>.
    </p>
    <h2>Origins</h2>
    <p>
      The <a href="/eclipse/">Eclipse Project</a> was originally created by IBM
      in November 2001 and supported by a consortium of software vendors. The
      Eclipse Project continues to be used by millions of developers.
    </p>
    <p>The Eclipse Foundation was created in January 2004 as an independent
      not-for-profit corporation to act as the steward of the Eclipse community.
      The independent not-for-profit corporation was created to allow a
      vendor-neutral, open, and transparent community to be established around
      Eclipse.</p>
    <h2>Structure</h2>
    <p>
      The Eclipse community consists of individual developers and organizations
      spanning many industries. The Foundation employs a full-time <a
        href="/org/foundation/staff.php"
      >professional staff</a> to provide services to the community. The Eclipse
      Foundation is funded by annual dues from our <a href="/membership ">members</a>
      and governed by a <a href="/org/foundation/directors.php">Board of
        Directors</a>. Strategic Developers and Strategic Consumers hold seats
      on this Board, as do representatives elected by Add-in Providers and Open
      Source committers. Eclipse committers are typically employed by
      organizations or are independent developers that volunteer their time to
      work on the Eclipse projects.
    </p>
    <h2>Services</h2>
    <p>
      The Eclipse Foundation provides four key services to the Eclipse
      community: 1)&nbsp;<a href="/org/#IP_Management">IP Management</a>, 2)&nbsp;<a
        href="/org/#Ecosystem"
      >Ecosystem Development</a>, 3)&nbsp;<a href="/org/#Development">Development
        Process</a>, and 4)&nbsp;<a href="/org/#IT">IT Infrastructure</a>. Full-time
      staff are associated with each of these areas and work with the greater
      Eclipse community to assist in meeting the needs of stakeholders.
    </p>
    <h2 id="IP_Management">Intellectual Property (IP) Management</h2>
    <p>
      An important aspect of the Eclipse Foundation is the focus on enabling the
      use of open source technology in commercial software products and
      services. We consciously promote and encourage software vendors to use
      Eclipse technology for building their commercial software products and
      services. This is made possible by the fact that all Eclipse projects are
      licensed under the <a href="/org/documents/epl-2.0">Eclipse Public License
        (EPL)</a>, a commercial friendly OSI approved license.
    </p>
    <p>
      The Eclipse Foundation also undertakes a number of steps to attempt to
      ensure the pedigree of the intellectual property contained within Eclipse
      projects. The first step in the due diligence process is trying to ensure
      that all contributions are made by the rightful copyright holder and under
      the Eclipse Public License (EPL). All committers are required to sign a <a
        href="/legal/committer_process/EclipseIndividualCommitterAgreementFinal.pdf"
      >committer agreement</a> that stipulates all of their contributions are
      their original work and are being contributed under the EPL. If a
      committer is sponsored to work on an Eclipse project by a Member
      organization, then that organization is asked to sign a <a
        href="/legal/EclipseMemberCommitterAgreementFinal.pdf"
      >Member Committer Agreement</a> to ensure the intellectual property rights
      of the organization are contributed under the EPL.
    </p>
    <p>
      The second step is that the source code related to all contributions which
      are developed outside of the Eclipse development process is processed
      through the Eclipse Foundation <a
        href="/legal/EclipseLegalProcessPoster.pdf"
      >IP approval process</a>. This process includes analyzing selected code
      contributions to try to ascertain the provenance of the code, and license
      compatibility with the EPL. Contributions that contain code licensed under
      licenses not compatible with the EPL are intended to be screened out
      through this approval process and thus not added to an Eclipse project.
      The end result is a level of confidence that Eclipse open source projects
      release technology that can be safely distributed in commercial products.
    </p>
    <h2 id="Ecosystem">Ecosystem Development</h2>
    <p>A unique aspect of the Eclipse community and the role of the Eclipse
      Foundation is the active marketing and promotion of Eclipse projects and
      wider Eclipse ecosystem. A healthy vibrant ecosystem that extends beyond
      the Eclipse open source community to include things like commercial
      products based on Eclipse, other open source projects using Eclipse,
      training and services providers, magazines and online portals, books, etc,
      are all key to the success of the Eclipse community.</p>
    <p>
      To assist in the development of the Eclipse ecosystem, the Eclipse
      Foundation organizes a number of activities, including co-operative
      marketing events with Member companies, <a
        href="https://www.eclipsecon.org"
      >community conferences</a>, online resource catalogs (<a
        href="http://marketplace.eclipse.org/"
      >Eclipse Marketplace</a> and the <a
        href="http://www.youtube.com/user/EclipseFdn"
      >Eclipse YouTube Channel</a>), bi-annual Members meetings and other
      programs to promote the entire Eclipse community.
    </p>
    <h2 id="Development">Development Community Support</h2>
    <p>The Eclipse community has a well-earned reputation for providing quality
      software in a reliable and predictable fashion. This is due to the
      commitment of the committers and organizations contributing to the open
      source projects. The Eclipse Foundation also provides services and support
      for the projects to help them achieve these goals.</p>
    <p>
      The Foundation staff help implement the <a
        href="/projects/dev_process/development_process.php"
      >Eclipse Development Process</a>. This process assists new project startup
      and ensures that all Eclipse projects are run in an open, transparent and
      meritocratic manner. As part of this process, the Foundation organizes
      member community reviews for projects to ensure consistent interaction
      between the projects and the broader membership.
    </p>
    <p>The Eclipse community organizes an annual release train that provides a
      coordinated release of those Eclipse projects which wish to participate.
      The release train makes it easier for downstream consumers to adopt new
      releases of the projects because 1) all the projects are available on the
      same schedule, so you don't have to wait for independent project
      schedules, and 2) a level of integration testing occurs before the final
      release to help identify cross-project issues.</p>
    <h2 id="IT">IT Infrastructure</h2>
    <p>The Eclipse Foundation manages the IT infrastructure for the Eclipse open
      source community, including Git code repositories and code review tools,
      bug trackers, Jenkins build farm, development-oriented mailing lists and
      forums, download site and website. The infrastructure is designed to
      provide reliable and scalable service for the committers developing the
      Eclipse technology and the consumers who use the technology.</p>
    <h2>A Unique Model for Open Source Development</h2>
    <p>The Eclipse Foundation has been established to serve the Eclipse open
      source projects and the Eclipse community. As an independent
      not-for-profit corporation, the Foundation and the Eclipse governance
      model ensures no single entity is able to control the strategy, policies
      or operations of the Eclipse community.</p>
    <p>The Foundation is focused on creating an environment for successful open
      source projects and to promote the adoption of Eclipse technology in
      commercial and open source solutions. Through services like IP Due
      Diligence, annual release trains, development community support, and
      ecosystem development, the Eclipse model of open source development is a
      unique and proven model for open source development.</p>
  </div>
  <div id="rightcolumn">
    <div class="sideitem">
      <h6>Related Links</h6>
      <ul>
        <li><a href="../membership/">Membership</a></li>
        <li><a href="../membership/become_a_member/">Become a member</a></li>
      </ul>
    </div>
    <div class="sideitem">
      <h6>Thank you!</h6>
      <p>
        Thanks to our many <a href="/corporate_sponsors/">Corporate Sponsors</a>
        for their generous donations to our infrastructure.
      </p>
    </div>
  </div>
</div>