<?php

require_once ($_SERVER ['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once ($_SERVER ['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
require_once ($_SERVER ['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
$App = new App ();
//$Nav = new Nav ();
$Nav = NULL;
$Menu = new Menu ();
include ($App->getProjectCommon ()); # All on the same line to unclutter the user's desktop'

  #*****************************************************************************
  #
  #
  #****************************************************************************

  #
  # Begin: page-specific settings.  Change these.
  $pageTitle = "Orbit overview";
  $pageKeywords = "orbit, bundles, third party, code, equinox, osgi, framework, runtime";

// Paste your HTML content between the markers!
ob_start ();
?>

<div id="midcolumn">
  <h1><?= $pageTitle ?></h1>
  <h2>What's this all about?</h2>
  <p>The Orbit project provides a repository of bundled versions of
    third party libraries that are approved for use in one or more
    Eclipse projects. The repository maintains current and old versions
    of such libraries to facilitate current builds as well as the
    rebuilding of historical output. The contents of Orbit are available
    in several different forms (e.g., Update Site, download archives,
    ...). As the Eclipse tooling evolves, developers will be able to
    easily obtain and add supplied bunldes to their workspace or target
    platform.</p>
  <p>One of the key issues with bundling third-party libraries is the
    inconsistency in naming, versioning and form of the resultant
    bundles. Orbit eliminates duplicated work and bundle naming,
    structuring and versioning variations but focusing the bundling
    effort in one project.</p>
  <p>Crucially, no development is carried out in this project. Teams
    proposing the use of a third party library for the first time are
    able to work with the community developed here and other potential
    users of the library to derive an appropriate selection and
    packaging of the function they need. For example, a team may start
    out with &quot;a need for Jetty&quot;. As we have seen, systems like
    Jetty often include several JARs and a wide variety of
    infrastructure pieces (e.g., Apache Commons Logging). In some cases
    this additional function is not needed for the project's use, is
    already approved and available or has special packaging needs.
    Through this project the teams needing function arrive at a mutually
    agreeable form of the required function.</p>
  <p>It is important to note that committers on Orbit are not
    responsible for doing the packaging work. That responsibility
    remains with the teams seeking to use the requested library. In
    short, don't open a bug report requesting that &quot;someone bundle
    Jetty version X&quot;. Open one offering to bundle Jetty version X.
    Orbit acts as a hub or focal point for people with needs related to
    third party libraries and those with related technical expertise.</p>
  <p>The bundled libraries are retained and made available within the
    project in various ways (e.g., download zip, update site, ...) for
    use in the projects that have received the appropriate approvals.
    Note teams seeking to use a library must still follow the IP
    process. For example, the current process calls or all third party
    code use to be cleared by the Foundation. So even if a library is
    approved by the Foundation for use by all projects, project teams
    must still fill out a Contribution Questionnaire (CQ) and notify the
    Foundation of their intentions to use a library. (There is a "reuse
    from Orbit" option, that makes the submission simpler than starting
    from scratch). This allows the library use to be tracked and
    facilitates version synchronization (e.g., stepping up to new
    releases) as well as notification of issues found with approved and
    previously distributed libraries.</p>
  <p>&nbsp;</p>

</div>

<?php
include "global-links.html";

$html = ob_get_clean();

// Generate the web page
$App->generatePage ( $theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html );
?>
