
<!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; 2024 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>
