<?php
/*******************************************************************************
 * Copyright (c) 2019 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *    Martin Lowe (Eclipse Foundation) - added membership prospectus HTML version
 *******************************************************************************/
 ?>

<div class="col-md-24">
    <h2>Who We Are</h2>
    <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 375 open source <a href="/projects/">projects</a>, including runtimes, tools, and frameworks for cloud native enterprise applications, the Internet of Things, automotive, geospatial, systems engineering, and many other technology domains.</p>
    <p>The Eclipse Foundation is a 501(c)(6) not-for-profit organization supported by over 300 <a href="/membership/exploreMembership.php">members</a> who value the Foundation’s governance framework, open innovation processes, collaborative <a href="/org/workinggroups/">Working Group</a> model, 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>Our Unique Approach</h2>
    <p>Our value proposition is simple and unique. We are community-driven, code-first, and commercial-ready. Over more than 15 years, we have earned our community-driven and business-friendly reputation by providing a home for open source projects proven to deliver high quality, scalable, and sustainable code that enterprises can use to build commercial products, grow revenues and drive market adoption. Business value and profits can then be reinvested in Eclipse projects and our developer community. </p>
    <p>The key to our approach are our Eclipse Working Groups, which provide an open and vendor-neutral governance framework for individuals and organizations to engage in collaborative development for specific technology domains. </p>
    <h2>The Opportunity</h2>
    <p>Organizations join the Eclipse Foundation because they want to take an active role in supporting sustainable, commercializable open source technologies that benefit all and to demonstrate the value of those open source technologies to the success of their businesses. </p>
    <p>Our members:</p>
    <ul>
        <li><strong>Participate</strong> in a thriving developer community, and provide contributions to the Eclipse projects they rely on</li>
        <li><strong>Protect</strong> their strategic investments by participating in defining priorities for advancing the technologies they care about, avoiding leaving the features, quality, and sustainability of important technologies to others or to chance</li>
        <li><strong>Share</strong> costs and innovation, especially on projects that represent core capabilities “below the value line”, while focusing their resources on rapidly building differentiated features that customers value most</li>
        <li><strong>Benefit</strong> from ensuring they comply with antitrust laws while sharing intellectual property and embedding clean intellectual property into their commercial products</li>
        <li><strong>Prosper</strong> by sharing open source commercialization best practices with industry peers </li>
        <li><strong>Promote</strong> their accomplishments and demonstrate their good corporate citizenship through contributions to open source projects</li>
    </ul>
    <h2>The Eclipse Foundation Governance Model</h2>
    <p>The Eclipse community consists of individual developers and organizations spanning many industries. The community participates in Eclipse open source projects, organized under top-level projects that provide oversight and guidance. Each top-level project has a charter and scope and is governed by a Project Management Committee. </p>
    <p>Eclipse Working Groups extend the best practices of the Eclipse Foundation’s collaborative open source development model to specific technology domains. In addition, Eclipse Working Groups enable collaboration on business functions important to the broader open source initiative, including the shared development of requirements, specifications, marketing strategy, and security policies. These unique industry collaborations span a variety of innovation areas, including cloud native enterprise Java, IoT, Edge Computing, the connected automotive mobility ecosystem, and other emerging technology domains. Explore all of our Working Groups <a href="/org/workinggroups/explore.php">here</a>.</p>
    <p>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>. The Foundation employs a full-time <a href="/org/foundation/staff.php">professional staff</a> to provide services to the community.</p>
    <h2>Key Services of the Eclipse Foundation</h2>
    <h3><a href="/org/#Development">Development Process</a></h3>
    <p>The Eclipse community has a well-earned reputation for providing high-quality software, reliably and predictably. The Eclipse Foundation provides services and supports to help projects consistently achieve their goals. Our staff assists new projects in implementing the <a href="/projects/dev_process/">Eclipse Development Process</a>, a set of procedures and rules that form our best practices. </p>
    <h3><a href="/org/#IP_Management">IP Management</a></h3>
    <p>We focus on enabling the use of open source technology in commercial software products and services. All Eclipse projects are licensed under the <a href="/legal/epl-2.0/">Eclipse Public License (EPL)</a>, a commercial friendly, OSI approved license. In addition, the Eclipse Foundation due diligence process helps to validate the pedigree of the intellectual property contained in Eclipse projects.</p>
    <h3><a href="/org/#Ecosystem">Ecosystem Development and Marketing</a></h3>
    <p>The Eclipse Foundation’s strategic marketing programs promote Eclipse community engagement, drive awareness and discoverability of Eclipse technologies, and increase the commercial adoption of Eclipse technologies. We organize a number of activities, including cooperative marketing events with member companies, conferences, local events, and quarterly and annual members meetings.</p>
    <h3><a href="/org/#IT">IT Infrastructure</a></h3>
    <p>The Eclipse Foundation provides vendor-neutral, reliable and scalable services for Eclipse technology developers and users. IT infrastructure services delivered to the Eclipse community include source code repositories, build infrastructure, development-oriented mailing lists and newsgroups, a download site, and website.</p>
    <h3>Membership at the Eclipse Foundation</h3>
    <p>The Foundation offers five levels of membership: Strategic, Enterprise, Solutions, Associate, and Committer. Collectively, these levels of membership comprise the Eclipse Membership-at-Large. </p>
    <h4>Strategic Members</h4>
    <p>Strategic Members play an integral role in the Eclipse ecosystem. Strategic members are organizations that view participation in Eclipse projects as strategic to their business and are investing significant developer and other resources to further drive Eclipse technology. Typically, Strategic Members lead one or more top-level project. Strategic membership benefits include:</p>
    <ul>
        <li>A seat on Board of Directors of Eclipse Foundation</li>
        <li>A seat on Foundation councils, including both the Planning and Architecture councils</li>
        <li>Access to a number of Strategic Members Only Programs such as banner and logo promotion on eclipse.org and eclipse.org/downloads</li>
        <li>Intellectual Property Analysis and Reporting</li>
        <li>Help to launch Open Source initiative(s)</li>
        <li>Direct influence through Board voting rights on key aspects of the Eclipse ecosystem, including licensing, governing policy development, project reviews, and amendments to Membership Agreement and Bylaws</li>
        <li>Significant discounts towards sponsorship and attendance of Eclipse Foundation run events such as:</li>
        <li>EclipseCons Access to Eclipse Foundation marketing and advertising programs</li>
        <li>Ability to lead in the establishment of Working Groups</li>
        <li>Access to Information (mail lists, attend members-only meetings)</li>
        <li>Show of support (logo exchange, etc.)</li>
    </ul>
    <h4>Enterprise Members</h4>
    <p>Enterprise Members are organizations that rely heavily on Eclipse technologies for their internal development projects and/or act strategically building products and services built on, or with, Eclipse technologies. Enterprise membership benefits include:</p>
    <ul>
        <li>Intellectual Property Analysis and Reporting</li>
        <li>Help to launch Open Source initiative(s)</li>
        <li>Voting rights for board representation, project reviews, and amendments to Membership Agreement and Bylaws</li>
        <li>Significant discounts towards sponsorship and attendance of Eclipse Foundation run events such as EclipseCons</li>
        <li>Access to Eclipse Foundation marketing and advertising programs</li>
        <li>Ability to participate in Working Groups</li>
        <li>Access to Information (mail lists, attend members-only meetings)</li>
        <li>Show of support (logo exchange, etc.)</li>
    </ul>
    <h4>Solutions Members</h4>
    <p>Solutions Members are organizations that view Eclipse technologies as important to their corporate and product strategy and offer products and services based on, or with, Eclipse technologies. These organizations want to participate in the development of the Eclipse ecosystem. Solutions membership benefits include:</p>
    <ul>
        <li>Voting rights for board representation, project reviews, and amendments to Membership Agreement and Bylaws</li>
        <li>Significant discounts towards sponsorship and attendance of Eclipse Foundation run events such as EclipseCons</li>
        <li>Access to Eclipse Foundation marketing and advertising programs</li>
        <li>Ability to participate in Working Groups</li>
        <li>Access to Information (mail lists, attend members-only meetings)</li>
        <li>Show of support (logo exchange, etc.)</li>
    </ul>
    <h4>Associate Members</h4>
    <p>Associate Members are organizations that participate in and want to show support for, the Eclipse ecosystem. Many research and educational institutions choose to join as an Associate member. Associate membership benefits include:</p>
    <ul>
        <li>Access to Information (mail lists, attend members-only meetings)</li>
        <li>Ability to join select Eclipse Working Groups as a Guest member </li>
        <li>Show of support (logo exchange, etc.)</li>
    </ul>
    <h4>Committer Members</h4>
    <p>Eclipse Foundation’s governance model provides individual committers with the ability to become full members and includes representation on the Eclipse Board of Directors. Committer Members are individuals that are the core developers of the Eclipse projects and can commit changes to project source code. </p>
    <p>Learn more about Committer membership in the Eclipse Foundation <a href="/membership/become_a_member/committer.php" >here</a>.</p>
    <p>Additional details regarding the various membership levels in the Eclipse Foundation are available <a href="/membership/become_a_member/membershipTypes.php#strategic" >here</a>.</p>
    <h2>Membership Fees</h2>
    <p>The Membership-at-Large Annual Fee Comparison Chart based on membership levels is provided below for illustration purposes only. Please see the Eclipse Membership Agreement for full details.</p>
    <div>
        <table class="table table-striped">
            <thead>
                <tr>
                    <th rowspan="2">Annual Corporate Revenue</th>
                    <th class="text-center" colspan="4">Annual Eclipse Foundation Membership-at-Large Fees*</th>
                </tr>
                <tr>
                    <th>Strategic **</th>
                    <th>Enterprise</th>
                    <th>Solutions</th>
                    <th>Associate</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>&gt; $250 million</td>
                    <td>$250,000</td>
                    <td>$100,000</td>
                    <td>$20,000</td>
                    <td>$5,000</td>
                </tr>
                <tr>
                    <td>$100 million - $250 million</td>
                    <td>$150,000</td>
                    <td>$75,000</td>
                    <td>$15,000</td>
                    <td>$5,000</td>
                </tr>
                <tr>
                    <td>$50 million - $100 million</td>
                    <td>$100,000</td>
                    <td>$62,500</td>
                    <td>$10,000</td>
                    <td>$5,000</td>
                </tr>
                <tr>
                    <td>$10 million - $50 million</td>
                    <td>$50,000</td>
                    <td>$50,000</td>
                    <td>$7,500</td>
                    <td>$5,000</td>
                </tr>
                <tr>
                    <td>&lt; $10 million</td>
                    <td>$25,000</td>
                    <td>N/A</td>
                    <td>$5,000</td>
                    <td>$5,000</td>
                </tr>
                <tr>
                    <td>&lt; $1 million, &lt; 10 employees</td>
                    <td>$25,000</td>
                    <td>$25,000</td>
                    <td>$5,000</td>
                    <td>N/A</td>
                </tr>
                <tr>
                    <td>Govt, academics, NGOs, etc.</td>
                    <td>$25,000</td>
                    <td>$25,000</td>
                    <td>$5,000</td>
                    <td>$0</td>
                </tr>
                <tr>
                    <td>Academic, Research or Publishing Organizations, etc</td>
 					<td>$25,000</td>
                    <td>$25,000</td>
                    <td>$5,000</td>
                    <td>$0</td>
                </tr>
            </tbody>
        </table>
        <div>
            <p class="small">*There is no cost to being a Committer member of the Foundation</p>
        </div>
    </div>
    <h2>How to Join as a Member of the Eclipse Foundation</h2>
    <p>Once you have chosen the level of membership (e.g., Strategic, Enterprise, Solutions, Associate, Committer):</p>
    <ul>
        <li>Complete and sign the <a href="/membership/documents/membership-information-form.pdf">Membership Information Form</a></li>
        <li>Complete and sign the <a href="/org/documents/eclipse_membership_agreement.pdf">Membership Agreement</a></li>
        <li>Complete and sign the <a href="/legal/committer_process/EclipseMemberCommitterAgreement.pdf" >Member Committer and Contributor Agreement</a> (optional, but recommended)</li>
        <li>Email us the signed documents, including the Membership Agreement, the Membership Application, and optionally, the Member Committer and Contributor Agreement</li>
    </ul>
    <p>Note: Membership in an Eclipse Working Group requires the execution of that Working Group’s Participation Agreement. A list of the current Eclipse Working Groups is <a href="/org/workinggroups/explore.php">here</a>.</p>
    <h2>Join Us!</h2>
    <p>To learn more about the benefits of Eclipse Foundation membership, or how Eclipse Working Groups enable community-driven industry collaborations, please contact the Membership Coordination Team at membership@eclipse.org.</p>
</div>