
<!-- 
	This document is provided as a template along with some guidance for creating
	your project proposal. This is just a template. Feel free to change it as
	you see fit (add sections, remove section). We feel, however, that the
	suggestions represented in this document represent the reasonable minimum
	amount of information to move forward.
	
	Please keep the formatting in this document simple. Please do not edit 
	this document in Microsoft Word as it adds huge piles of markup that make
	it difficult to restyle.
	
	More information is available here:
	
	http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
	
	Direct any questions about this template to emo@eclipse.org
 --> 
 
<html> 
<head> 
 
<!-- 
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 --> 
 
<title>Lyo</title> 
</head> 
 
<!-- 
	We make use of the 'classic' HTML Definition List (dl) tag to specify
	committers. I know... you haven't seen this tag in a long while...
 --> 
 
<style> 
dt {
display: list-item;
list-style-position:outside;
list-style-image:url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
margin-left:16px;
}
dd {
margin-left:25px;
margin-bottom:5px;
}
</style> 
 
<body> 
<p>The Eclipse Lyo project is a proposed open source project under the <a
	href="http://www.eclipse.org/projects/project_summary.php?projectid=technology">Eclipse Technology
Container Project</a>.</p> 
 
<!-- 
	The communication channel must be specified. Typically, this is the
	"Proposals" forum. In general, you don't need to change this.
 --> 
<p>This proposal is in the Project Proposal Phase (as defined in the
Eclipse Development Process) and is written to declare its intent and
scope. We solicit additional participation and input from the Eclipse
community. Please send all feedback to the 
<a href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse Proposals</a> 
Forum.</p> 
 
<h2>Description</h2> 
 
<!-- 
	Describe the project here. Be concise, but provide enough information that
	somebody who doesn't already know very much about your project idea or domain
	has at least a fighting chance of understanding its purpose.
 --> 
<p>The Eclipse Lyo project is focused on providing an SDK to enable adoption of OSLC specifications. OSLC (Open Services for Lifecycle Collaboration: <a href="http://open-services.net">http://open-services.net</a>) is an open community dedicated to reducing barriers for lifecycle tool integration. The community authors specifications for exposing lifecycle artifacts through uniform (REST) interfaces and relying on Internet and Linked Data standards. OSLC's scope started with <a href="http://en.wikipedia.org/wiki/Application_lifecycle_management">Application Lifecycle Management (ALM)</a> and is expanding to include integrations across <a href="http://en.wikipedia.org/wiki/Product_lifecycle_management">Product Lifecycle Management (PLM)</a> and <a href="http://en.wikipedia.org/wiki/IT_service_management">IT Service Management (ISM/DevOps)</a>, The proposed Eclipse Lyo project is designed to be a companion to the continuing specification efforts of the OSLC community. Its main purpose is to expand adoption of OSLC specifications and to enable the Eclipse community to easily build OSLC compliant tools.</p>

<h2>Background</h2> 
 
<!-- 
	Optionally provide the background that has lead you to creating this project.
 --> 
<p>The OSLC community has collected initial components for an OSLC SDK in an open source project, the <a href="http://sourceforge.net/projects/oslc-tools/">OSLC Tools Project</a>, hosted on SourceForge.net. The OSLC Tools codebase includes reference implementations for some OSLC specifications, a test suite for validating OSLC provider implementations, and a set of examples and code snippets that aid in OSLC client and provider implementations. Contributions were made under an Apache-like contributor license agreement, and the content is currently distributed under the terms of the Apache Software License 2.0. The project has four committers. The intention of this proposal is to move the OSLC Tools Project, in its entirety, to Eclipse and to evolve the SDK in support of OSLC specifications.</p>
 
<h2>Scope</h2> 
 
<!-- 
	All projects must have a well-defined scope. Describe, concisely, what
	is in-scope and (optionally) what is out-of-scope. An Eclipse project
	cannot have an open-ended scope.
 --> 
<p>The focus of the proposed Eclipse Lyo project is to provide an SDK -- including candidate reference implementations, test suites, and code libraries (including samples and examples) -- for enabling OSLC implementations by tools in the ALM, PLM, and IT Service Management across different languages and platforms.</p>

<h3>Out of Scope</h3>
<p>Eclipse Lyo is not a project tasked with creating OSLC compliant tools. Instead, it is a project that will create an SDK for enabling others to create OSLC-based tool integrations. Further, the project is not for general purpose linked data technologies, though it will certainly rely on other OSS projects for these capabilities (e.g. RDF triple store).</p>

 
<h2>Why Eclipse?</h2> 
 
<!-- 
	Answer these two questions:	What value does this project bring to the Eclipse
	community? What value do you expect to obtain from hosting your project at Eclipse?
	
	What value do you get by having your project at Eclipse over and above the value
	of hosting at Eclipse Labs?
 --> 
<p>The Eclipse Foundation and open source community have a well-established governance model and set of IP policies. Furthermore, its broad industry membership and its focus on development tools have affinity with the OSLC community scope and can help to further the Eclipse Lyo project goals.</p><p>The proposed Eclipse Lyo project complements other Eclipse projects like Mylyn and Orion. Mylyn is already aligned with OSLC and is creating client side implementations of OSLC specifications for bringing tasks into the developer IDE. Orion, with its web architecture and tooling, also has potential affinities as a client of OSLC implementations and may find benefit from the Eclipse Lyo  project and OSLC SDK.</p>
 
<h2>Initial Contribution</h2> 
 
<!-- 
	Projects are expected to arrive at Eclipse with existing code.
	
	Describe the existing code that will be contributed to the project. Please provide
	a couple of paragraphs describing the code with modest detail, including important
	information like code ownership (who holds the copyright?), and some consideration
	of community that exists around the code. Include a listing of third-party libraries 
	and associated licenses.
 --> 
<p>The initial contribution to the proposed Eclipse Lyo project will consist of the entire codebase that is currently part of the OSLC Tools Project at SourceForge. This includes:
<ul>      <li><b>Reference Implementations.</b> Including Java EE based web applications that implement the OSLC lifecycle domain specifications for Change and Architecture Management. The main OSS dependencies are Geronimo Servlet API, Sesame/OpenRDF and the ANTLR parser generator.</li>      <li><b>Provider Test Suites.</b> Java-based test suites designed to test implementations of each OSLC lifecycle domain specification. The main OSS dependencies are JUnit, Apache HTTPClient, Jena and OAuth.net libraries.</li>      <li><b>Example OSLC resources.</b> Example OSLC resources in RDF/XML and other RDF format for educational and testing purposes.</li>      <li><b>Example OSLC provider and client implementations.</b> In addition to the reference implementations, the OSLC Project provides other example OSLC implementations, including a JAX-RS and Apache Wink based client and server.</li>      <li><b>Tutorial example code.</b> Educational examples such as the code to support the OSLC Tutorial and Primer.</li>
</ul>

<p>The current codebase is mostly Java code with dependencies on permissively licensed open source libraries. Moving forward the project will encourage contributions of code, candidate reference implementations, test suites, and examples for other platforms and languages.</p><p>The table below lists the current dependencies of the OSLC Tools Project codebase that forms the initial contribution:</p><p>Note: in the case of a dual license, we elected to obtain and use the code under the license indicated in <b>bold</b> text</p>

<table align="center" border="1">
<tr>
<td align="center"> Name </td>
<td align="center"> License</td>
<td align="center"> URL 	</td>
</tr>
<tr>
<td>Aduna Commons 2.6, 2,7, 1.3</td>
<td>BSD</td>
<td><a href="https://repo.aduna-software.org/">https://repo.aduna-software.org/</a></td>
</tr>
<tr>
<td>Ant and Ant-launcher 1.7.1</td>
<td>ASL2</td>
<td><a href="http://ant.apache.org">http://ant.apache.org</a> </td>
</tr>
<tr>
<td>Antlr 2.7.7, 3.2</td>
<td>BSD</td>
<td><a href="http://www.antlr.org/">http://www.antlr.org/</a></td>
</tr>
<tr>
<td>Commons Codec 1.3</td>
<td>ASL2</td>
<td><a href="http://commons.apache.org/codec">http://commons.apache.org/codec</a>
</td>
</tr>
<tr>
<td>Commons Collections 3.2.1</td>
<td>ASL2</td>
<td><a href="http://commons.apache.org/collections">http://commons.apache.org/collections</a></td>
</tr>
<tr>
<td>Commons Fileupload 1.2.2</td>
<td>ASL2</td>
<td><a href="http://commons.apache.org/fileupload/">http://commons.apache.org/fileupload/</a></td>
</tr>
<tr>
<td>Commons HttpClient 3.1</td>
<td>ASL2</td>
<td><a href="http://hc.apache.org/httpclient-legacy/">http://hc.apache.org/httpclient-legacy/ <a/></td>
</tr>
<tr>
<td>Commons IO 1.2</td>
<td>ASL2</td>
<td><a href="http://commons.apache.org/io/">http://commons.apache.org/io/</a></td>
</tr>
<tr>
<td>Commons Lang 2.3</td>
<td>ASL2</td>
<td><a href="http://commons.apache.org/lang" >http://commons.apache.org/lang</a></td>
</tr>
<tr>
<td>Commons Logging 1.1.1, 1.0.4</td>
<td>ASL2</td>
<td><a href="http://commons.apache.org/logging">http://commons.apache.org/logging</a></td>
</tr>
<tr>
<td>Commons Pool 1.5.3</td>
<td>ASL2</td>
<td><a href="http://commons.apache.org/pool">http://commons.apache.org/pool</a></td>
</tr>
<tr>
<td>Concurrent Jena 1.3.2</td>
<td>ASL2</td>
<td><a href="http://openjena.org/">http://openjena.org/</a></td>
</tr>
<tr>
<td>Derby and Client 10.1.3.1</td>
<td>ASL2</td>
<td><a href="http://derby.apache.org ">http://derby.apache.org </a></td>
</tr>
<tr>
<td>Dojo 1.6</td>
<td><b>BSD</b> / Academic Free License</td>
<td><a href="http://dojotoolkit.org/" >http://dojotoolkit.org/</a></td>
</tr>
<tr>
<td>DOM4J 1.6.1</td>
<td>Apache 1.1-style</td>
<td><a href="http://dom4j.sourceforge.net/">http://dom4j.sourceforge.net/</a></td>
</tr>
<tr>
<td>Geronimo J2EE API 1.1</td>
<td>ASL2</td>
<td><a href="http://geronimo.apache.org" >http://geronimo.apache.org</a></td>
</tr>
<tr>
<td>Geronimo JTA API 1.1.1</td>
<td>ASL2</td>
<td><a href="http://geronimo.apache.org " >http://geronimo.apache.org </a></td>
</tr>
<tr>
<td>Geronimo JMS API 1.1.1</td>
<td>ASL2</td>
<td><a href="http://geronimo.apache.org " >http://geronimo.apache.org </a></td>
</tr>
<tr>
<td>Geronimo JPA API 1.0</td>
<td>ASL2</td>
<td><a href="http://geronimo.apache.org">http://geronimo.apache.org </a> </td>
</tr>
<tr>
<td>Geronimo Servlet API 1.2</td>
<td>ASL2</td>
<td><a href="http://geronimo.apache.org">http://geronimo.apache.org </a></td>
</tr>
<tr>
<td>HTTP Client 4.0.1</td>
<td>ASL2</td>
<td><a href="http://hc.apache.org " >http://hc.apache.org </a></td>
</tr>
<tr>
<td>HTTP Core 4.0.1</td>
<td>ASL2</td>
<td><a href="http://hc.apache.org " >http://hc.apache.org </a></td>
</tr>
<tr>
<td>ICU4J 3.4.4</td>
<td>MIT</td>
<td><a href="http://site.icu-project.org/home" >http://site.icu-project.org/home</a></td>
</tr>
<tr>
<td>Jackson 1.5.2</td>
<td>ASL2</td>
<td><a href="http://jackson.codehaus.org/">http://jackson.codehaus.org/</a>
</td>
</tr>
<tr>
<td>Java Beans Activation Framework 1.1</td>
<td><b>CDDL</b>/GPL2</td>
<td><a href="http://glassfish.java.net/javaee5/mail/" >http://glassfish.java.net/javaee5/mail/</a></td>
</tr>
<tr>
<td>JAXB API 2.1 and JAXB-impl</td>
<td><b>CDDL</b>/GPL2</td>
<td><a href="http://jaxb.java.net/">http://jaxb.java.net/</a></td>
</tr>
<tr>
<td>Jena 2.6.3 (arq, iri, jena, json-jena)</td>
<td>BSD</td>
<td><a href="http://jena.sourceforge.net">http://jena.sourceforge.net</a></td>
</tr>
<tr>
<td>Jdom1.1</td>
<td>Apache 1.1-style</td>
<td><a href="http://www.jdom.org/" >http://www.jdom.org/</a></td>
</tr>
<tr>
<td>Jetty 6.1.24</td>
<td>ASL2</td>
<td><a href="http://jetty.codehaus.org/jetty/" >http://jetty.codehaus.org/jetty/</a></td>
</tr>
<tr>
<td>JSR 311 API</td>
<td>CDDL</td>
<td><a href="http://jersey.java.net/">http://jersey.java.net/</a></td>
</tr>
<tr>
<td>JUnit 4.8.1</td>
<td>CPL</td>
<td><a href="http://junit.org/" >http://junit.org/</a></td>
</tr>
<tr>
<td>Log4J 1.2.13</td>
<td>ASL2</td>
<td><a href="http://logging.apache.org/log4j/" >http://logging.apache.org/log4j/</a></td>
</tr>
<tr>
<td>Lucene Core 2.3.1</td>
<td>ASL2</td>
<td><a href="http://lucene.apache.org " >http://lucene.apache.org </a></td>
</tr>
<tr>
<td>Maven 3.0</td>
<td>ASL2</td>
<td><a href="http://maven.apache.org">http://maven.apache.org</a></td>
</tr>
<tr>
<td>OAuth.net v20090617</td>
<td>ASL2</td>
<td><a href="http://code.google.com/p/oauth/">http://code.google.com/p/oauth/</a></td>
</tr>
<tr>
<td>POI 3.7</td>
<td>ASL2</td>
<td><a href="http://poi.apache.org" >http://poi.apache.org</a></td>
</tr>
<tr>
<td>OpenJPA 2.0</td>
<td>ASL2</td>
<td><a href="http://openjpa.apache.org " >http://openjpa.apache.org </a></td>
</tr>
<tr>
<td>OpenRDF Sesame 2.3.2</td>
<td>BSD</td>
<td><a href="http://sourceforge.net/projects/sesame/" >http://sourceforge.net/projects/sesame/</a></td>
</tr>
<tr>
<td>Serp 1.13.1</td>
<td>BSD</td>
<td><a href="http://serp.sourceforge.net/" >http://serp.sourceforge.net/</a></td>
</tr>
<tr>
<td>SLF4J 1.5.11</td>
<td>MIT</td>
<td><a href="http://www.slf4j.org/" >http://www.slf4j.org/</a></td>
</tr>
<tr>
<td>STAX API 1.0.1</td>
<td>ASL2</td>
<td><a href="http://stax.codehaus.org" >http://stax.codehaus.org</a></td>
</tr>
<tr>
<td>String Template 3.2</td>
<td>BSD</td>
<td><a href="http://www.stringtemplate.org/" >http://www.stringtemplate.org/</a></td>
</tr>
<tr>
<td>Wink 1.1.1</td>
<td>ASL2</td>
<td><a href="http://incubator.apache.org/wink" >http://incubator.apache.org/wink</a></td>
</tr>
<tr>
<td>Wink JSON4J 1.1.2</td>
<td>ASL2</td>
<td><a href="http://incubator.apache.org/wink" >http://incubator.apache.org/wink </a></td>
</tr>
<tr>
<td>WS commons util</td>
<td>ASL2</td>
<td><a href="http://ws.apache.org/xmlrpc/" >http://ws.apache.org/xmlrpc/</a></td>
</tr>
<tr>
<td>WSTX ASL 3.2</td>
<td><b>ALS2</b>/LGPL</td>
<td><a href="http://woodstox.codehaus.org " >http://woodstox.codehaus.org </a></td>
</tr>
<tr>
<td>Xalan 2.6</td>
<td>ASL2</td>
<td><a href="http://xml.apache.org/xalan-j/" >http://xml.apache.org/xalan-j/</a></td>
</tr>
<tr>
<td>Xerces 2.7.1</td>
<td>ASL2</td>
<td><a href="http://xerces.apache.org " >http://xerces.apache.org </a></td>
</tr>
<tr>
<td>XML Parser APIs 1.3.02</td>
<td>ASL2</td>
<td><a href="http://xerces.apache.org " >http://xerces.apache.org </a></td>
</tr>
<tr>
<td>XML-RPC 3.1.3</td>
<td>ASL2</td>
<td><a href="http://ws.apache.org/xmlrpc/" >http://ws.apache.org/xmlrpc/</a></td>
</tr>
</table>

<p>The OSLC Tools Project has not yet done any &quot releases &quot of software and so has had no reason to distribute dependent JAR files, but we do expect to create releases and distribute dependent binaries  from the Eclipse Lyo project as parts of reference implementations, example bundles, and an SDK.</p>

<h2>Legal Issues</h2> 
 
<!-- 
	Please describe any potential legal issues in this section. Does somebody else
	own the trademark to the project name? Is there some issue that prevents you
	from licensing the project under the Eclipse Public License? Are parts of the 
	code available under some other license? Are there any LGPL/GPL bits that you
	absolutely require?
 --> 
<p>The Eclipse Lyo project will be dual licensed under the EPL and the BSD (EDL). The proposed initial contributions are currently made available at SourceForge under an Apache 2.0 license. As the proposed Eclipse Lyo project is formed, these contributions will be made under the dual licenses stated above.</p>
 
<h2>Committers</h2> 
 
<!-- 
	List any initial committers that should be provisioned along with the
	new project. Include affiliation, but do not include email addresses at
	this point.
 --> 
 
<p>The following individuals are proposed as initial committers to the project:</p> 
 
<dl> 
	<dt>Steve Speicher, IBM</dt> 
	<dd>Project Lead. Developed the OSLC Provider Test Suites, works on the reference implementations and other examples.</dd>
        <dt>Olivier Berger, Institut Telecom</dt> 
	<dd>Contributed to design discussions, sample code in PHP format, oversight and OSLC specification effort. Implementer of the OSLC-CM provider for FusionForge.</dd>
        <dt>Jim Conallen, IBM</dt> 
	<dd>Developed the initial version of the Reference Implementations including an OSLC-AM and OSLC-CM implementation. Implementer of OSLC-AM provider of IBM Rational Rhapsody Design Management</dd>
        <dt>Sofia Yeung, Oracle</dt> 
	<dd>Contributed to design discussions, oversight and OSLC specification effort. Led OSLC-based integrations work with Oracle Team Productivity Center.</dd>
        <dt>Robert Elves, Tasktop</dt> 
	<dd>Contributed to OSLC-CM specification and implemented Mylyn and Tasktop OSLC-based integrations.</dd>
        <dt>Alberto Giammaria, IBM</dt> 
	<dd>Contributed to OSLC-CM specification and implemented the the IBM Tivoli Service Request Manager integration with IBM Rational Team Concert</dd>
	
</dl> 
 
<p>We welcome additional committers and contributions.</p> 
 
<!-- 
	Describe any initial contributions of code that will be brought to the 
	project. If there is no existing code, just remove this section.
 --> 

  
<h2>Mentors</h2> 
 

	New Eclipse projects require a minimum of two mentors from the Architecture
	Council. You need to identify two mentors before the project is created. The
	proposal can be posted before this section is filled in (it's a little easier
	to find a mentor when the proposal itself is public).

 
<p>The following Architecture Council members will mentor this
project:</p> 
 
<ul> 
	<li>Mik Kersten</li> 
	<li>Mike Wilson</li> 
</ul> 
 
<h2>Interested Parties</h2> 
 
<!-- 
	Provide a list of individuals, organisations, companies, and other Eclipse
	projects that are interested in this project. This list will provide some
	insight into who your project's community will ultimately include. Where
	possible, include affiliations. Do not include email addresses.
 --> 
 
<p>The following individuals, organisations, companies and projects have 
expressed interest in this project:</p> 
 
<ul> 
	<li>Accenture</li>
	<li>ARS Computer und Consulting GmbH</li>	<li>Ascendant Technologies</li>
	<li>Atos Origin</li>	<li>BSD Group</li>	<li>Ericsson</li>	<li>General Motors</li>	<li>Green Hat</li>	<li>IBM</li>	<li>iTKO</li>
	<li>Jubula</li>	<li>Oracle</li>	<li>Planview</li>	<li>River North Solutions</li>	<li>Siemens</li>	<li>Tasktop</li>	<li>Tieto</li>	<li>VMware</li>
	<li>Zenika</li>
</ul> 
 
<h2>Project Scheduling</h2> 
 
<!-- 
	Describe, in rough terms, what the basic scheduling of the project will
	be. You might, for example, include an indication of when an initial contribution
	should be expected, when your first build will be ready, etc. Exact
	dates are not required.
 --> 
<p>Initial contribution is anticipated in July.</p>
 
<h2>Changes to this Document</h2> 
 
<!-- 
	List any changes that have occurred in the document here.
	You only need to document changes that have occurred after the document
	has been posted live for the community to view and comment.
 --> 
 
<table> 
	<tr> 
		<th>June 2, 2011</th> 
		<th>Initial proposal</th> 
	</tr> 

</table> 
</body> 
</html>