<!DOCTYPE html>
<html>

 <head>
	<meta charset="UTF-8">
	<title>OSBP - Home</title>
	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse OSBP, an open-source no-code and low-code development platform for business and enterprise applications">
	<meta name="author" content="(c) Compex Systemhaus GmbH, Germnany">

	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	<link rel="shortcut icon" href="images/OS-logo-32x32.png">
	
	<link href="css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="css/style.css" rel="stylesheet" type='text/css'>
	
	<!-- cover flow -->
	<link href="css/coverflow.css" rel="stylesheet" type='text/css'>
	<!--[if lt IE 9]>
	  <link href="css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->
</head>


<body>
  
  <!-- Google Tag Manager --  >
	<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-TGDS5S"
	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
	'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
	})(window,document,'script','dataLayer','GTM-TGDS5S');</script>
  <!-- End Google Tag Manager -->

<header class="site-header">
  <!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="index.html"></a>
        
		<div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="news.html">News</a></li-->
			<li ><a href="index.html">Home</a></li>	
			<li ><a href="download.html">Download</a></li>
            <li ><a href="documentation.html">Documentation</a></li>
            <li ><a href="community.html">Community</a></li>
			<li ><a href="OS-bea-WG.html">OS.bea Working Group</a></li>			
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Training<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="http://www.osbee.org/services/" target="_blank">OS.bee</a></li>
                <li><a href="http://www.compex-commerce.com/en/services/" target="_blank">Compex</a></li>
              </ul>
            </li>
          </ul>
        </div>
  <!-- Navbar End -->
        </div>
    </div>
  </div>
  <!-- Navbar End -->
</header>


<!--Container-->

<div id="header_wrapper">
  <div class="container image-slider">
    <div class="row">
      <h2>
      <center>Open Standard Business and Enterprise Application Working Group
      </h2>
    </div>
  </div>
</div>

<!---------Slider --------------------------------------------------->
  <div class="row" style="text-align:center">
    <div>
      <div id="coverflow"  style="height: 200px">
        <img class="intro-screenshot" style="display:none;" src="images/slide2_09.jpg"alt="OSBP concept">
        <img class="intro-screenshot" src="images/slide7_05.jpg" alt="OSBP in Eclipse">
        <img class="intro-screenshot" style="display:none;" src="images/slide4_05.jpg" alt="OSBP application architecture">
      </div>
    </div>
  </div>
<!---------End Slider --------------------------------------------------->

<div id="OS.bea">
  <div class="container">
    <div class="row quick-overview">
	
		<div class="span12" style="text-align:center">
			<h1>You are invited to joint the OS.bea Working Group !</h1>
		</div>
		<!--------- Buttons --------------------------------------------------->
		<div class="cta-section" style="text-align:center">
		<a href="subscribe2mailinglist.html" style="margin:10px;" class="has-popover btn btn-success btn-large pull_right">subscribe to the OS.bea mailing list</a>
		</div>
		<!---------End Buttons --------------------------------------------------->
<p />
<h2>Scope, Goals and Vision</h2>
The OS.bea (open standard business and enterprise application) working group drives the evolution and broad adoption of technologies of the Open Standard Business Platform (OSBP).
<br><br>
		<div class="row">
			<div class="span12">
				<p>
				The working group: 
				</p>
				<ul>
					<li>manages the overall technical and business strategies for OSBP driven projects. </li>
					<li>defines and manages a specification process to formalize the specifications that are defined within the scope of this working group. </li>
					<li>defines compatibility rules and branding process for implementations of these specifications to ensure application portability. </li>
					<li>promotes the "OS.bea" brand and its value in the marketplace.</li>
					<li>provides vendor neutral marketing and other services to the OS.bea ecosystem.</li>
					<li>establishes and drives a funding model that enables this working group and its community to operate on a sustainable basis.</li>
				</ul>
			</div>
		</div>

The OS.bea working group (OS.bea WG) fosters and supports an open and innovative eco-system providing tools and systems, and adapters for standardized, openly-available and vendor-neutral OSB Platform as described above. 
In particular, the OS.bea WG:

<br><br>
		<div class="row">
			<div class="span12">
				<ul>
					<li>helps to support OS.bea related Eclipse projects that develop the related software components  </li>
					<li>provides the resources for managing the quality and the maturity of these components throughout the life-cycle </li>
					<li>defines compatibility rules and branding process for implementations of these specifications to ensure application portability. </li>
					<li>ensures open innovation through the sharing of the research, development, and maintenance efforts as far as possible </li>
					<li>fosters exchanges between academics, standardization organizations, industry partners and community </li>
				</ul>
			</div>
		</div>


<h2>Governance</h2>
The OS.bea working group is designed as:
<br><br>
		<div class="row">
			<div class="span12">
				<ul>
					<li>a working group driven by its strategic members, </li>
					<li>a means to foster a vibrant and sustainable ecosystem of users, contributors and service providers, </li>
					<li>a means to organize the community of each project or component so that strategic users and developers define the roadmap collaboratively. </li>
				</ul>
			</div>
		</div>

In order to implement these principles, the following governance bodies have been defined: 
<br><br>
		<div class="row">
			<div class="span12">
				<ul>
					<li>The Steering Committee </li>
					<li>The Specification Committee </li>
					<li>The Marketing and Brand Committee </li>
				</ul>
			</div>
		</div>
		
</p>		
	</div>
   </div>
  </div>

<footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <div class="row">
          <div class="span6">
            <h3 class="footer-links-header">Quick Links</h3>
            <ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br>
              <a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a><br>
              <a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br>
              <a href="http://www.eclipse.org/legal/">Legal</a></li>
            </ul>
          </div>
		  <div class="span6">
            <h3 class="footer-links-header">&nbsp;  </h3>

			<ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org">Eclipse Home</a><br>
              <a href="http://marketplace.eclipse.org/">Market Place</a><br>
              <a href="http://live.eclipse.org/">Eclipse Live</a><br>
              <a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
            </ul>

          </div>		  
       </div>
      </div>
    </div>
  </div>
  
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  
  <!-- Le javascript
      ==================================================
      Placed at the end of the document so the pages load faster -->
  
  <script src="js/jquery-1.11.3.min.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <script src="js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="js/twitter.js" type="text/javascript"></script>
  <script src="js/prettify.js" type="text/javascript"></script>
  <script src="js/lang-xtend.js" type="text/javascript"></script>
  <script src="js/lang-common.js" type="text/javascript"></script>
  <script src="js/custom.js" type="text/javascript"></script>
  <script src="https://apis.google.com/js/platform.js" async defer></script>
  
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'http://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
  
  <script src="js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer>
  
  
  

<body>