blob: 02fa9e527dc3823d3c673f1ad8e1b0b06e16926b [file] [log] [blame]
<!--
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>Franca</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 Franca project is a proposed open source project under the <a
href="http://projects.eclipse.org/projects/modeling">Modeling
Top-level 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>Background</h2>
<!--
Optionally provide the background that has lead you to creating this project.
-->
<p><em>Interfaces</em> are important artifacts in any kind of software architecture.
They represent the contract between components, subsystems or systems and also
between organizational units, like teams, departments, or companies.
Therefore, in many development environments interfaces are modeled as
first-class entities using an <em>Interface Definition Language</em> (short: IDL).
However, for building large-scale platforms or systems, existing IDLs
have at least two shortcomings:</p>
<ol>
<li>For integration of software systems which are contributed from various sources,
it is necessary to map interfaces defined in one IDL to a software model using
another IDL. E.g., in the international
<a href="http://www.genivi.org">GENIVI consortium</a>
a platform for Automotive/Infotainment systems is being developed by integrating
software components provided by various open-source projects, companies and
institutions as GENIVI itself.
The interfaces of these building blocks are either not modeled at all
(e.g., plain C or C++ headers) or formally modeled in one of several methodologies,
among them UML, D-Bus Introspection XML, annotated Java APIs.
The integration of all contributions on model level can only be done by
establishing mappings between all of these IDLs.</li>
<li>Another common shortcoming in most existing IDL approaches is the lack of
formality in modeling the <em>dynamics</em> of interfaces. Most IDLs provide means
to model static aspects of the interface (e.g., data types, signals,
methods, properties) as opposed to dynamic aspects (e.g., allowed sequences of
events at the interface), which are most often regarded as optional add-on to the
static interface definition.</br>
However, many severe bugs in complex software systems are caused by
mismatches of the dynamic aspects of interfaces. These bugs will occur
especially in late project phases (during system integration or even after
customer delivery), are hard to identify and expensive to fix.
Thus, it is necessary that the dynamic aspects should be part of the original
interface definition, allowing extensive formal validation of the interface's
implementations and usage. This can be done by static analysis or at runtime.</li>
</ol>
<p>In order to address both issues, GENIVI started the
<a href="http://code.google.com/a/eclipselabs.org/p/franca/">Franca project</a>,
which can serve as a hub for IDL transformations and allows the specification of
dynamic behavior as an integral part of each modeled interface.
Part of Franca is a technology- and platform-neutral IDL.
Franca has been initially contributed by
<a href="http://www.harman.com">Harman</a> and has been published
<a href="http://code.google.com/a/eclipselabs.org/p/franca/">on EclipseLabs</a>
in March 2012 (under Eclipse Public License 1.0).</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 Franca project provides a technology- and platform-neutral IDL including an easy-to-use editor based on the Eclipse IDE. The project also provides:</p>
<ul>
<li>support for model-level system integration based on transformations from one IDL to another using Franca IDL as a central hub</li>
<li>a means to specify for each interface which interactions are allowed (Franca contracts)</li>
<li>tools supporting validation of implementations against Franca contracts</li>
<li>implementations of downstream code (and documentation) generators</li>
<li>for the addition of platform-specific deployment information to interface definitions</li>
<li>tools for supporting interface designers, e.g. a rapid prototyping tool which automatically generates an executable model out of a single interface definition</li>
</ul>
<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>Franca is a framework for definition and transformation of software interfaces.
It is used for integrating software components from different suppliers, which are
built based on various runtime frameworks, platforms and IPC
(Inter-Process Communication) mechanisms.</p>
<img src="images/franca_features.png" width="400px" />
<p>The diagram above shows the five aspects of the Franca framework.</p>
<ul>
<li><p><b>IDL and feature-rich editor.</b>
The core of it is Franca IDL (Interface Definition Language), which is a textual
language for specification of APIs.</p>
</li>
<li><p><b>Transformations and generation.</b>
Franca offers a framework for building transformations from/to other IDLs
and model-based interface descriptions
(e.g., D-Bus, UML, AUTOSAR, WebIDL) It also supports code generation with some
open-source code generators already available.
Support for the D-Bus Introspection format is available as installable
feature of Franca.<br/>
The diagram below shows a typical set-up of transformations (yellow) and
generators (blue) built with Franca.</p>
<img src="images/franca_typical_infotainment.png" width="100%" />
</li>
<li><p><b>Specification of dynamic behavior.</b>
With Franca, the dynamic behavior of client/server interactions can be
specified using protocol state machines. Tools are available to use these
specifications for validating implementations, e.g., checking runtime
traces against the expected order of events on the interface.<br/>
A graphical viewer for protocol state machines is part of Franca.
The following diagram shows an example screenshot.</p>
<img src="images/robotarm_contract.png" width="300px" />
</li>
<li><p><b>Flexible deployment models.</b>
In specific application domains, it may be necessary to extend
interface specifications by platform- or target-specific information.
This is supported by Franca's deployment models, which allow these kind
of extensions in a type-safe way.</p>
</li>
<li><p><b>Rapid interface prototyping.</b>
An executable test environment for an interface definition can be
generated instantly, allowing users to see the interface in action.
This is accomplished by generating eTrice models from Franca interfaces
and generating executable Java code from these models.
The generated test environment consists of a client component (acting as
dynamic test case executor) and a server component (acting as an
intelligent mock object).</p>
</li>
</ul>
Based on these features, there is a rich set of possible use-cases.
Here are some examples:
<ul>
<li>Build your own component model based on EMF and use Franca for
the IDL part.</li>
<li>Generate UML models from Franca interfaces and use those as part
of a more detailed UML model of your system.</li>
<li>Generate standardized C++ bindings using GENIVI CommonAPI.</li>
<li>Convert Franca interfaces to D-Bus and use the tool-chain as already
established on Linux desktops.</li>
<li>Use JavaScript-generator (part of Franca delivery) to generate
JS-code which can be used to build HTML5-applications
based on WebSockets.</li>
<li>Use Franca to create executable eTrice models and use them
as a starting point for eTrice projects.</li>
<li>Check the interaction of runtime components on-the-fly
based on their interface's dynamic behavior specification.</li>
</ul>
<h2>Current applications of Franca</h2>
Franca is an open-source project since March 2012. Thus, it is impossible to
provide a complete list of applications. However, we will list some examples
in order to show a part of the Franca community:
<ul>
<li>Franca is being used as an IDL and integration tool by
the <a href="http://www.genivi.org">GENIVI consortium</a>.
</li>
<li>The <a href="http://projects.genivi.org/commonapi/">CommonAPI C++</a>
project uses Franca models as a starting point for
all code generators.
</li>
<li>The <a href="https://github.com/bmwcarit/joynr">joynr</a>
web-based communication framework uses Franca as an IDL
and as a basis for its Java and C++ code generators.
The open-source joynr framework supports the interaction of applications
which are deployed on consumer devices, vehicles, or backend infrastructure.
</li>
<li>The <a href="http://projects.genivi.org/yamaica/">Yamaica</a>
project is an Eclipse IDE extension providing a convenient UI for
working with Franca models.
</li>
<li>Several companies (including also non-Automotive) are using
or evaluating Franca as an IDL for their internal software platform.
</li>
</ul>
<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?
-->
<h3>Benefits Franca brings for the Eclipse community</h3>
<p>Franca is already quite well-known and used across the Automotive/Infotainment domain.
Therefore, it will provide additional value to the toolset Eclipse has to offer
for the Automotive domain. It will especially attract companies to the Eclipse
ecosystem which develop Infotainment solutions, just because of Franca's impact
in that domain. This is valid not only for Eclipse as a community, but as well for
the Automotive IWG at Eclipse.
</p>
<p>Additionally, Franca might bring additional value to selected Eclipse projects
by enabling some new inter-project functionality. E.g., there is already a feature
to create eTrice models from Franca models. Also for projects tackling other
application domains, Franca could be a valuable addition: E.g., Franca could serve
as a bridge between Automotive applications and the growing M2M ecosystem, motivated by innovative Car2X use cases.
</p>
<h3>Benefits Franca gets by being hosted on Eclipse</h3>
<p>Franca is based on several Eclipse-based technologies,
among them
<a href="http://www.eclipse.org/modeling/emf">EMF</a>,
<a href="http://www.eclipse.org/Xtext">Xtext</a> and
<a href="http://www.eclipse.org/xtend">Xtend</a>.
Moreover, it optionally provides connections to other
Eclipse projects (e.g., eTrice).
Thus, by moving Franca into the Eclipse space, infrastructure
topics can be coupled more tightly. For example, Franca
releases can be aligned with the overall Eclipse release roadmap.
</p>
<p>Moreover, the threshold for initial contributions established
by the Eclipse foundation will help to increase the confidence
companies will put into Franca. This includes the I.P. check,
committer requirements and also the required continuity for release
trains. This will improve the proliferation of the Franca concepts.
</p>
<p>Finally, the visibility of Franca will be increased by being part
of the Eclipse community. This will help attracting users, committers
and other projects to connect with the Franca network.
</p>
<h2>Relationship with other Eclipse Projects</h2>
<ul>
<li>Franca's meta-models are based on
<a href="http://www.eclipse.org/modeling/emf">EMF</a>.</li>
<li>Both the Franca IDL and the deployment DSL have been created using
<a href="http://www.eclipse.org/Xtext">Xtext</a>.</li>
<li>For model-to-model transformations and code generation from Franca models,
<a href="http://www.eclipse.org/xtend">Xtend</a> is being used.</li>
<li>Transformations are provided as part of Franca to generate executable models
for <a href="http://www.eclipse.org/etrice">eTrice</a>.</li>
</ul>
<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 consists of sources and artifacts found in the current Franca
repository at
<a href="http://code.google.com/a/eclipselabs.org/p/franca/">Franca project</a>. Copyright for the source files is partly held by Harman International, partly by itemis AG.</p>
<p>Franca uses the following third-party dependencies (aside from the
Eclipse platform):</p>
<ul>
<li><a href="https://code.google.com/a/eclipselabs.org/p/dbus-emf-model/">dbus-emf-model</a>
project: hosted on EclipseLabs, EPL1, project maintainer is Klaus Birken</li>
<li><a href="http://git.eclipse.org/c/gef/org.eclipse.gef4.git/tree/org.eclipse.gef4.zest.feature">GEF4 Zest Visualization Toolkit</a></li>
<li><a href="https://github.com/kbirken/xDoc">xDoc clone</a>: used only for
creating the documentation</li>
</ul>
<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>All contributions will be distributed under the Eclipse Public License.
The current code planned for initial distribution published at
EclipseLabs
(see <a href="http://code.google.com/a/eclipselabs.org/p/franca/">Franca project</a>)
is distributed under the Eclipse Public License as well.</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>Dr. Klaus Birken, itemis AG (project lead)</dt>
<dd>Klaus is initiator, maintainer and lead of the current pre-Eclipse
Franca project. He has lead the initial contribution to EclipseLabs.
Klaus is working in the <a href="http://www.genivi.org">GENIVI consortium</a>
since 2011 and is leading its <em>Common IDL</em> topic, which provided
the requirements for the initial development of Franca.</dd>
<dt>Tamas Szabo, itemis AG</dt>
<dd>Tamas has provided significant contributions to the existing Franca
code base. Tamas is also a committer of the Eclipse project
<a href="http://www.eclipse.org/incquery/">EMF-IncQuery</a>.</dd>
<dt>Steffen Weik, itemis AG</dt>
<dd>Steffen has provided significant contributions to the existing Franca
code base, esp. regarding contract definition and
trace-/testcase generation.</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>Ed Merks</li>
<li>Eike Stepper</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><a href="http://www.bmw.com/com/en/">BMW</a></li>
<li><a href="http://www.harman.com/EN-US/Solutions/Car/Pages/INFOTAINMENT.aspx#.UmfXdJGdGiI">Harman</a></li>
<li><a href = "http://genivi.org">GENIVI</a></li>
<li><a href ="http://www.bosch.de/en/de/our_company_1/business_sectors_and_divisions_1/car_multimedia_1/car-multimedia.html">Bosch Car Multimedia GmbH</a></li>
<li><a href = "http://www.protos.de/index.php/en">Protos Software GmbH</a></li>
<li><a href="http://www.bmw-carit.com">BMW Car IT</a></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.
-->
<ul>
<li>December 2013: code submission and IP review</li>
<li>January 2014: first builds on the Eclipse infrastructure</li>
</ul>
<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>Date</th>
<th>Change</th>
</tr>
<tr>
<td>05-Nov-2013</td>
<td>Document created</td>
</tr>
</table>
</body>
</html>