<?php
/**
 * Copyright (c) 2014, 2018 Eclipse Foundation.
 *
 * 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:
 *   Christopher Guindon (Eclipse Foundation) - Initial implementation
 *   Mike Milinkovich (Eclipse Foundation)
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<h1><?php print $pageTitle; ?></h1>
<h2>Fostering open industry collaboration to develop new industry platforms</h2>
<h3 id="wg-intro">Introducing Eclipse Working Groups</h3>
<p>Companies looking to drive innovation and efficiencies within their own
  organizations are increasingly looking to external sources to advance new
  ideas. Commonly referred to as “open innovation,” this paradigm encourages
  collaboration across organizational boundaries, and is often practiced in the
  open source community. Eclipse Working Groups allow organizations to combine
  the best practices of open source development with a set of services required
  for open innovation, enabling organizations to foster industry collaborations.</p>
<p>Eclipse Working Groups provide a vendor-neutral governance structure that
  allow organizations to freely collaborate on new technology development. Based
  on the experience within the Eclipse community, collaboration among
  organizations can:</p>
<ul>
  <li>help improve the supply chain of software development tools in a
    particular industry</li>
  <li>create a new technology platform that increases interoperability among
    organizations and technologies</li>
  <li>allow organizations to increase their use of open source technology.</li>
</ul>
<p>The Eclipse Foundation, through Eclipse Working Groups, provides five basic
  services to enable these types of collaborations:</p>
<ul>
  <li><a href="#wg-neutral">Governance</a></li>
  <li><a href="#wg-ip">Intellectual Property Management and Licensing</a></li>
  <li><a href="#wg-process">Development Processes</a></li>
  <li><a href="#wg-infra">IT Infrastructure</a></li>
  <li><a href="#wg-eco">Ecosystem Development</a></li>
</ul>
<p>Any collaboration needs these services. Eclipse Working Groups make it easy
  to reuse the services provided by the Eclipse Foundation rather than creating
  them from scratch.</p>
<h2 id="wg-neutral" class="h3">Vendor-Neutral Governance</h2>
<p>Good governance controlling how decisions are made, policies are set and
  disputes resolved is important for any successful collaboration.</p>
<p>The Eclipse Foundation, a not-for-profit corporation, is governed by a set of
  bylaws, agreements, and policies that ensure a vendor-neutral governance model
  for Working Group collaborations.</p>
<p>All entities in a Working Group participate based on their contributions and
  merit. No one individual or organization has any special status or veto.</p>
<h2 id="wg-ip" class="h3">Intellectual Property (IP) Management</h2>
<p>Collaborations among different organizations requires due diligence on the
  co-developed intellectual property. Eclipse Working Groups are established
  under the IP policies of the Eclipse Foundation. These policies ensure that
  any open source software created in Eclipse projects is available for use by
  anyone, including developers of commercial software products.</p>
<p>The Eclipse Foundation consciously promotes and encourages software vendors
  to use Eclipse technology for building their commercial software products and
  services. This is made possible by the requirement that all Eclipse projects
  are licensed under the Eclipse Public License (EPL), a commercial-friendly OSI
  approved licensed.</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 made under the
  EPL. All committers are required to sign a committer agreement stipulating
  that all of their contributions are their original work and are being
  contributed under the EPL.</p>
<p>The second step is requiring that all source code for contributions created
  outside the Eclipse development process go through the Eclipse Foundation IP
  approval process. This process includes analyzing selected code contributions
  to ascertain the provenance of the code and its license compatibility with the
  EPL. Contributions that contain code not compatible with the EPL are intended
  to be screened out through this approval process and thus not added to an
  Eclipse project.</p>
<p>The end result is a level of confidence that Eclipse open source projects can
  be safely distributed in commercial products.</p>
<h2 id="wg-infra" class="h3">IT Infrastructure</h2>
<p>The Eclipse Foundation manages the IT infrastructure for Eclipse Working
  Groups, including Git code repositories, Bugzilla databases, Hudson CI
  servers, development-oriented mailing lists and newsgroups, download sites and
  websites.</p>
<p>The infrastructure is designed to provide reliable and scalable services for
  the committers developing the Eclipse technology and the consumers using the
  technology.</p>
<h2 id="wg-process" class="h3">Development Process</h2>
<p>The Eclipse community has created a successful development process for
  large-scale distributed development that involves many different
  organizations. At the core of the Eclipse process are the common open source
  development principles of openness, transparency, and meritocracy. The Eclipse
  Foundation provides services and support to help Working Groups implement and
  succeed in their collaborative development.</p>
<h2 id="wg-eco" class="h3">Ecosystem Development</h2>
<p>An important way that the Eclipse Foundation supports the community is
  through active marketing and promotion of Eclipse Working Groups and the wider
  Eclipse ecosystem.</p>
<p>To assist in the development of the Eclipse Working Groups, the Eclipse
  Foundation organizes a number of activities, including co-operative marketing
  events, community conferences (EclipseCon, Eclipse Day), online resource
  (Eclipse Marketplace), bi-annual Members meetings, and other programs to
  promote the entire Eclipse community.</p>
