blob: 45311c759e6b25b0db7dfa84b110ed4dcd327a29 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>Roadmap / Apache Celix</title>
<link rel="icon" href="/assets/img/favicon.ico">
<link href="/assets/css/bootstrap.min.css" rel="stylesheet">
<link href="/assets/css/style.css" rel="stylesheet">
<style>
.card-body img {
max-width: 100%;
width: 100%;
height: auto;
}
.card-body img + em {
text-decoration: underline;
}
</style>
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '9']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
</head>
<body class="light-grey">
<a href="https://github.com/apache/celix" class="github-ribbon">
<img src="/assets/img/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</a>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary fixed-top">
<div class="container">
<a class="navbar-brand" href="/">
<img src="/assets/img/celix-white.svg" height="40" class="d-inline-block align-top" alt="Celix Logo">
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/download.cgi">Download</a>
</li>
<li class="nav-item dropdown active">
<a class="nav-link dropdown-toggle" href="#" id="ddDocs" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Docs
</a>
<div class="dropdown-menu" aria-labelledby="ddDocs">
<a class="dropdown-item" href="/docs/2.4.0/docs.html">2.4.0 (latest)</a>
<a class="dropdown-item" href="/docs/2.3.0/docs.html">2.3.0</a>
<a class="dropdown-item" href="/docs/2.2.1/docs.html">2.2.1</a>
<a class="dropdown-item" href="/docs/2.1.0/docs.html">2.1.0</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="ddContributing" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Contributing
</a>
<div class="dropdown-menu" aria-labelledby="ddContributing">
<a class="dropdown-item" href="/contributing/youatcelix.html">You at Celix</a>
<a class="dropdown-item" href="/contributing/submitting-patches.html">Submitting patches</a>
<a class="dropdown-item" href="/contributing/source-and-builds.html">Source code and builds</a>
<hr>
<a class="dropdown-item" href="/contributing/releasing.html">Releasing</a>
<a class="dropdown-item" href="/contributing/volunteers.html">Volunteers</a>
<a class="dropdown-item" href="https://whimsy.apache.org/board/minutes/Celix.html">Board Reports</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="ddSupport" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Support
</a>
<div class="dropdown-menu" aria-labelledby="ddSupport">
<a class="dropdown-item" href="/support/mailing-list.html">Mailing Lists</a>
<a class="dropdown-item" href="/support/issue-tracking.html">Issue Tracking</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="ddFoundation" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
ASF
</a>
<div class="dropdown-menu" aria-labelledby="ddFoundation">
<a class="dropdown-item" href="https://www.apache.org/">ASF Home</a>
<a class="dropdown-item" href="https://www.apache.org/foundation/how-it-works.html">How it works</a>
<a class="dropdown-item" href="https://www.apache.org/licenses/">License</a>
<a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
<a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a>
<a class="dropdown-item" href="https://www.apache.org/security/">Security</a>
<a class="dropdown-item" href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a>
</div>
</li>
</ul>
</div>
</div>
</nav>
<div class="section">
<div class="container">
<div class="row py-4">
<div class="col-sm-12 card">
<div class="card-body pt-5">
<a href="/docs/2.1.0/docs.html" title="back to documentation">&lt;&lt; back to documentation</a>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<h1 id="roadmap">Roadmap</h1>
<p>Note this roadmap is still a draft.</p>
<h1 id="apache-celix-201">Apache Celix 2.0.1</h1>
<p>Date: TBD (juli/aug 2017?)</p>
<h2 id="improve-pubsub-celix-407">Improve PubSub (CELIX-407)</h2>
<ol>
<li>Finalize introduction serializer services</li>
<li>Ensure code coverage of ~ 70%</li>
</ol>
<h2 id="finalize-runtime-creation-celix-408">Finalize Runtime Creation (CELIX-408)</h2>
<ol>
<li>Ensure that the runtime command are used for testing some distributed test (e.g. pubsub)</li>
</ol>
<h2 id="add-support-for-running-celix-as-a-single-executable-todo-issue">Add Support for running Celix as a single executable (TODO issue)</h2>
<p>For different reasons it could be interesting to support running bundles from a single executable.
Primarily security, but also startup performance.</p>
<p>To start this can be achieved by creating static version of the celix provided bundles. These static
bundles should have unique symbols, e.g shell_bundleActivator_create instead of a
&ldquo;normal&rdquo; bundleActivator_create. The normal activator functions should then
only be used (using a define or separated source file) when building a shared library bundle.
A additional property (e.g. &ldquo;cosgi.auto.static.start=shell, shell_tui&rdquo;) can be used to specify which
symbol prefixes to use.</p>
<p>Note that if this is implemented it would also be a good moment to add a compile option / launcher option
to disable dynamic loading of libraries. This way shared library based bundles can be used during
development, but for production a static executable with no capability to add bundles runtime
could be used if preferable.</p>
<h1 id="apache-celix-210">Apache Celix 2.1.0</h1>
<p>Date: TBD (Jan 2018)</p>
<p>Note a short comming is that there is still no good support for export and import libraries between
bundles. For Linux dlmopen is a solution, but for a more broader UNIX support a more &ldquo;creative&rdquo;
solution is needed (e.g. Just in time replacing the SONAME and NEEDED values in the respective shared libraries)</p>
<h2 id="extend-dependency-manager-cc-celix-409">Extend Dependency Manager C/C++ (CELIX-409)</h2>
<p>The dependency manager offers declarative API for working with services and is arguable more easier
to use than the official OSGi Api. Extend the DM so that in can be used for virtually any bundle
without directly using the bundle context, bundle, module, service ref, service registration, etc API.
This provided a much smaller API providing almost the same functionality.</p>
<p>This means:</p>
<ol>
<li>Add support for service factory</li>
<li>Add support for providing listener hooks. Note that this is already supported by registering
a <code>listener_hook_service</code> service, but maybe a more abstracted way.</li>
<li>Add support looking up and opening resources in the bundle.</li>
<li>Replace add,remove, etc callbacks which uses the service reference, with callbacks using properties</li>
<li>Test if the dm correctly works when adding / removing provided services and service dependencies after a component is started.</li>
<li>Getting framework properties (e.g. bundleContext_getProperty)</li>
<li>Support for getting basic info from bundle (version, symbolic name, manifest)</li>
</ol>
<h2 id="add-framework-services-todo-issue">Add framework services (TODO issue)</h2>
<p>Apache Celix is a framework for service oriented programming, this should also include for interacting with the
framework itself. Create framework services for:</p>
<ol>
<li>bundle management: installing, Starting, Stopping, deinstalling, listing, etc bundles.</li>
<li>service registry info: nr of service registered, nr of service listeners, etc.</li>
<li>framework listenerL start, stop, error events (whiteboard)</li>
<li>bundle listener: installed, start, stop, deinstalled events (whiteboard)</li>
</ol>
<h2 id="support-dependency-manager-from-framework-todo-issue">Support dependency manager from framework (TODO issue)</h2>
<p>Because the dependency manager is actual the preferred way to write bundles, this should be support
like &ldquo;normal&rdquo; activators&quot; directly from the framework without using a static library.</p>
<h2 id="refactor-celix-provided-bundles-to-use-dependency-manager-and-framework-services-todo-issue">Refactor Celix provided bundles to use dependency manager and framework services (TODO issue)</h2>
<p>Refactor Celix bundles (shell, shell_tuu, RSA, etc) to use the dependency manager instead of a &ldquo;vanilla&rdquo;
bundle activator. The dependency manager should be the preferred way to handle services.
Also instead of directly using the API from bundle_context, bundle, module, etc the framework services
should be used.</p>
<h2 id="create-dfi-descriptor-generator-todo-issue">Create dfi descriptor generator (TODO issue)</h2>
<p>Create a descriptor generator which can parse type and service headers.
This can be relatively easy achieved by (e.g.) using the libclang library.
Also extend the CMake add_bundle command and create a CMake bundle_add_descriptors command to be able
to add the descriptors to the bundle</p>
<h2 id="use-dfi-descriptor-in-service-registrationsreferences-todo-issue">Use dfi descriptor in service registrations/references (TODO issue)</h2>
<p>When available dfi descriptors can be used in Celix to validate if service are compatible and
in case of the provided service having more functions than the consumer needs, create a (cast to)
a compatible consumer version.</p>
<h1 id="apache-celix-300">Apache Celix 3.0.0</h1>
<p>Date: TBD (aug 2018)</p>
<h2 id="remove-support-for-vanilla-bundle-activators-todo-issue">Remove support for &ldquo;vanilla&rdquo; bundle activators (TODO issue)</h2>
<p>When all Celix provided bundles are using the dependency manager and framework services support for
the &ldquo;vanilla&rdquo; bundle activator can be dropped. Also a lot internals can be refactored because the public
API should have shrunk quite a bit; This should lead to smaller code base -&gt; less complex, easier to maintain
and a smaller footprint.</p>
<h2 id="refactor-service-registry-to-a-single-threaded-design-todo-issue">Refactor service registry to a single threaded design (TODO issue)</h2>
<p>Celix currently has some nested lock. It would be preferable to remove these, but this is difficult
because they are used to sync events which react on registering/unregistering services. Specially when
a unregister/register event leads to other services being registered/unregisterd. One way to deal with
this sync problem is to remove it by adding a single thread which handle al interaction between bundles
and the service registry.</p>
</div>
</div>
</div>
</div>
</div>
<footer class="py-3 bg-secondary">
<div class="container">
<div class="row">
<div class="col-md-8 text-center">
<p class="m-0 text-white">
Copyright &copy; 2023 The Apache Software Foundation, Licensed under
the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
<br>
Apache Celix, Celix, Apache, the Apache feather logo and the Apache Celix logo are trademarks of The Apache Software Foundation.
</p>
</div>
<div class="col-md-4 text-center">
<a href="https://www.apache.org/events/current-event.html" target="_blank">
<img src="https://www.apache.org/events/current-event-234x60.png" title="Apache Event" width="234" height="60" border="0">
</a>
</div>
</div>
</div>
</footer>
<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/bootstrap.bundle.min.js"></script>
</body>
</html>