<?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();  $Menu   = new Menu();   include("_projectCommon.php");    # All on the same line to unclutter the user's desktop'


  #
  # Begin: page-specific settings.  Change these.
  $pageTitle    = "New Eclipse Open Source Project Targets Automotive Industry in Collaboration with EU Research Project";
  $pageKeywords = "eclipse, eclipsecon, europe, 2015, germany";
  $pageAuthor   = "Roxanne Joncas";

  # Add page-specific Nav bars here
  # Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank)
  # $Nav->addCustomNav("My Link", "mypage.php", "_self");
  # $Nav->addCustomNav("Google", "http://www.google.com/", "_blank");

  # End: page-specific settings
  #

  # Paste your HTML content between the EOHTML markers!
  $html = <<<EOHTML
  <div id="maincontent">
	<div id="midcolumn">
  <h1>$pageTitle</h1>
  <p>Ottawa, Canada – September 3, 2015 – The
    Eclipse Foundation announces the creation of a new open source
    project, called APP4MC, that will create a tool chain integration
    platform needed by the automotive industry for the software
    development of embedded multi-core and many-core systems. The
    Eclipse project was created in collaboration with the European ITEA3
    research projects AMALTHEA and its successor, AMALTHEA4public.</p>
  <p>Software development in the automotive
    industry is a key driver for meeting new regulatory and market
    demands. The result has been a rapid increase in the amount and
    complexity of automotive software that requires the computational
    power available from multi-core and many-core processors. At the
    same time, the software tools currently available for the industry
    are very diverse and not well integrated, which in turn makes it
    difficult to share artifacts among tools and companies. AMALTHEA and
    AMALTEHA4public are industry research projects designed to address
    some of these issues and improve the efficiency of software
    development in the automotive industry.</p>
  <p>AMALTHEA and AMALTHEA4public are establishing
    a de facto standard to integrate the tools for all the major design
    steps in multi-core and many-core development. The main focus of
    this project will be on the automotive industry, but it is expected
    that other industries, such as automation and telecommunications,
    will benefit from the standard. The project is led by Robert Bosch
    and includes 21 partners from Germany, Sweden, Spain, and Turkey.
    The Eclipse Foundation Europe GmbH is one of the partners.</p>
  <p>
    The Eclipse APP4MC project will provide an open source
    implementation of the AMALTHEA standard, including the tool chain
    platform that will support integration of open source, commercial,
    and in-house tools. The APP4MC platform will be based on Eclipse and
    be extended to add models, editors, and specific tools for
    scheduling, partitioning, and optimizing multi-core and many-core
    systems. To encourage wide adoption and
    dissemination of the technology, the APP4MC project will be
    available under the Eclipse Public License (EPL).
  </p>
  <p>“The APP4MC project is another example of how
    the Eclipse community helps industry research projects create
    innovative new technology,” explains Mike Milinkovich, executive
    director of the Eclipse Foundation. “The Eclipse Foundation helps
    these industry projects by providing an open environment for
    collaborative development, and then promoting the worldwide use and
    adoption of the results. We look forward to being a valued partner
    in the AMALTHEA4public project, and other future industry research
    projects.”</p>
  <p>
    The APP4MC project has been officially created at Eclipse. More
    information is available at <a href="https://projects.eclipse.org/projects/technology.app4mc">
    https://projects.eclipse.org/projects/technology.app4mc</a>.
      The first contribution is expect in Q3/2015.   More information
    about the services that the Eclipse Foundation can provide industry
    research projects can be found at <a href="http://www.eclipse.org/org/research">http://www.eclipse.org/org/research</a>
  </p>
      </div>

   <!-- remove the entire <div> tag to omit the right column!  -->
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Related Links</h6>
			<ul>
				<li><a target="_blank" href="https://www.eclipse.org/org/research">Research@Eclipse</a></li>
				<li><a target="_blank" href="http://amalthea-project.org/">AMALTHEA</a></li>
			</ul>
		</div>
	</div>
</div>
      </div>

EOHTML;


  # Generate the web page
  $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
<?php
/*
 * Created on 20-Jan-2006
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
?>
