<?php
/**
 * *****************************************************************************
 * Copyright (c) 2018 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * Eric Poirier (Eclipse Foundation) - Initial implementation
 * *****************************************************************************
 */

?>


<div id="maincontent">
  <div id="midcolumn">
    <h1>Eclipse Member Distro Downloads Program</h1>

    <h2>Goals of this Program</h2>
    <p>This program has two main goals:</p>

    <ol>
      <li>Make the ecosystem around Eclipse more visible to those who
        are downloading Eclipse.</li>
      <li>Improve the first user experience with Eclipse - a better
        solution than downloading many different files to get the
        Eclipse installation they need.</li>
    </ol>

    <p>This program is about encouraging Eclipse Member companies to
      interact with the Eclipse user base by offering downloads of
      packages that are part of the Eclipse project release trains.
      Organizations can also offer additional downloads including other
      OSS projects and commercial software.</p>

    <h2>Details</h2>
    <ol>
      <li>The eclipse.org downloads 'mirror selection page' will have a
        section devoted to downloading an Eclipse based distros from
        participating Eclipse Foundation members. <img
        src="public/images/screenshot.jpg" width="600px"
        alt="Screenshot" />
      </li>
      <li>Each member company distro entry on the page will link to a
        page on that member company's website with the Eclipse related
        distro. (In other words, the member company Eclipse distros will
        NOT be hosted at eclipse.org)</li>
    </ol>

    <p>Note that the order of the participating organizations is random,
      and weighted by the amount of bandwidth pledged and other factors
      as required by the Eclipse Foundation to ensure a good download
      experience for our millions of visitors.</p>

    <h3>Criteria</h3>
    <p>To participate, a member must:</p>
    <ul>
      <li>Be an Eclipse member company in good standing</li>
      <li>Provide at least 100 Mbits of bandwidth for Eclipse downloads</li>
      <li>Provide a 64x64 logo.</li>
      <li>Provide a max. 100 character description of the distro (such
        as server location, target audiences, etc.)</li>
      <li>Offer current Eclipse packages to be download without forcing
        a registration of any kind</li>
      <li>Offer a clear "Download" link to Eclipse.org package(s) from
        the landing page without forcing site navigation to find it
        <ul>
          <li>Good examples:
            <ul>
              <li>Member provides an All-in-one zip/installer of Eclipse
                projects/packages</li>
              <li>Member provides an All-in-one zip/installer of a
                useful subset of the Eclipse projects/packages (similar
                to the all-in-one zip that WTP provides)</li>
              <li>Member provides an Installshield or similar installer
                that provides options to install Eclipse
                projects/packages</li>
              <li>Member provides an Installer that provides options to
                install Eclipse projects and options to install Company
                X's for-pay projects - good as long as the Eclipse
                projects can be selected without paying for the other
                projects (similar to the <a href="http://www.yoxos.com/">Yoxos
                  installer</a>
              </li>
            </ul>
          </li>
          <li>Bad examples:
            <ul>
              <li>Member requires clicking through pages of marketing to
                get to the Eclipse download</li>
              <li>Member obscures download link and tricks people to
                download member application</li>
              <li>Member forces registration of email address or other
                personal information</li>
              <li>Member provides installer that offers only commercial
                projects even when those projects embedded Eclipse
                projects</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
    <p>
      The spirit of this effort is that members <b>can and should
        promote their company, brand, products, services</b> and
      involvement in the Eclipse Ecosystem, and they should do this
      clearly on the landing page! However, the spirit is also that, in
      the true nature of open source, personal information be gathered
      in a opt-in only basis and not through any trickery or hassle.
    </p>

    <h3>Ordering Of The List</h3>
    <p>Members will be listed based on random selection methods based
      approximately on the amount of bandwidth provided - however, the
      ratios will be managed to ensure a reasonable percentage of
      traffic for all perticipants and a quality download experience for
      our millions of visitors. For example, the weights will be by
      download bandwidth thus company A providing twice the bandwidth of
      company B may appear higher on the download page more as often. If
      there are more participants than space available on the download
      pages, the pages will contain a set of random distros, with a link
      to a distros page that will contain all participants.</p>

    <h3>Isn't this just a "Mirror"?</h3>
    <p>No. Eclipse has many mirrors, but mirrors merely donate
      bandwidth. The user only interacts with the eclipse.org website
      even though the download ultimately comes from donated bandwidth.
      This program is an opportunity to have someone voluntarily visit a
      landing page on your website to download Eclipse projects. Some
      visitors may simply be there for a faster download, but visitors
      will have had to explicitly choose to "download from member sites"
      and then explicitly choose your company link. Seems like a great
      opportunity to further promote yourself! Wording of the link on
      the eclipse.org download page will make every attempt to direct
      people who 'just want the download damnit' to the eclipse.org and
      mirror infrastructure. This project is aimed to promote the
      ecosystem to those who are interested!</p>

    <h3>How do I get the Eclipse Project Bits and keep them updated?</h3>
    <p>
      To get the release-train bits and keep the up to date, you will
      use the same tool as the mirrors - RSYNC. You will need to tell us
      (see mirror information page below) what the internet-Facing IP
      address of your RSYNC client is, so we can allow you to RSYNC from
      eclipse.org. The IT staff of the member companies can look <a
        href="http://www.eclipse.org/downloads/mir_request.php"> here</a>
      for more details on being an Eclipse mirror. You do not need to
      fill out the form at the mir_request page (just email us the IP
      you will RSYNC from), but should observe other mirror
      instructions. Please <a href="mailto:member-distros@eclipse.org">contact
        us</a> for more details.
    </p>

    <h3>How many clicks can we expect?</h3>
    <p>Current participants are reporting between 10-20k clicks per
      month coming from Eclipse.org. Some members have noted that by
      having a link from Eclipse.org, their hits from search engines has
      increased dramatically also.</p>

    <h3>Can I make my landing page smart about what the user is
      requesting?</h3>
    <p>
      Your webmaster can choose to make your landing page auto-select
      the package/os that the Eclipse user has selected while on
      eclipse.org. We will append the selected package and OS platform
      to the URL of your landing page. For instance, if the URL you've
      supplied is: <a
        href="http://www.ourcorp.com/eclipsedownloads/ourpage.html">http://www.ourcorp.com/eclipsedownloads/ourpage.html</a>
    </p>
    <p>
      Then the URL we will use will look like this: <a
        href="http://www.ourcorp.com/eclipsedownloads/ourpage.html?JAVA-LINUX64">http://www.ourcorp.com/eclipsedownloads/ourpage.html?JAVA-LINUX64</a>
    </p>

    <p>... where the package name is one of (capitalized) jee, standard,
      java, cpp, modeling, reporting, rcp, automotive, mobile, scout,
      testing and parallel.. The OS platforms include: linux32, linux64,
      win32, win64, maccocoa.


    <h2>How do I sign up?!</h2>
    <p>
      Send and email to <a href="mailto:member-distros@eclipse.org">member-distros@eclipse.org</a>.
      Be sure to include the following information:
    </p>

    <ul>
      <li>Company Name, Contact Name, Email and Phone Number.</li>
      <li>A 100 character max (including white-space) description of
        your landing page (i.e., mentioning things that might interest
        people such as technology, geography, etc)</li>
      <li>A 64px X 64px logo (gif, jpg, png)</li>
      <li>The amount of bandwidth you plan to allocate.</li>
      <li>Indicate which of the following Eclipse Packages you plan to
        host on your download page. Note, you must support downloads for
        all operating systems available for each package.
        <ul>
          <li>Eclipse IDE for JEE Developers</li>
          <li>Eclipse IDE for PHP Developers</li>
          <li>Eclipse IDE for Java Developers</li>
          <li>Eclipse Modeling Tools</li>
          <li>Eclipse IDE for Java and Report Developers</li>
          <li>Eclipse for RCP/Plug-in Developers</li>
          <li>Eclipse IDE for C/C++ Developers</li>
          <li>Pulsar for Mobile Java Developers</li>
          <li>Eclipse Classic</li>
          <li>Eclipse SOA</li>
          </ul>

      </li>
    </ul>
  </div>
</div>