Fact-checked by Grok 2 weeks ago

OSGi

OSGi (Open Service Gateway Initiative) is a standardized, vendor-independent framework and set of specifications for developing and deploying modular, dynamic applications, providing a dynamic component system that enables software modularity through bundles, services, and lifecycle management. Originally conceived in the late for residential gateways and set-top boxes, OSGi was formalized by the OSGi Alliance, founded in March 1999, to address the need for a modular, component-based runtime environment in amid the limitations of early versions like Java 1.2. Over more than two decades, the technology has evolved from its embedded origins to support large-scale distributed systems, with the OSGi Alliance transitioning its stewardship to the in late 2020 to foster broader open-source collaboration and innovation. The current major release, OSGi Core Release 8, finalized in 2020, introduces enhancements like improved modularity for cloud-native environments while maintaining . At its core, OSGi organizes software into bundles—self-contained JAR files that declare explicit dependencies and exports—running within a framework that manages their installation, activation, updating, and removal at runtime without restarting the application. This is complemented by a service registry that allows bundles to publish, discover, and bind to services dynamically, promoting loose coupling and enabling collaborative virtual machine environments for both local and distributed components. Additional layers include module management for code visibility, security enforcement, and execution environment definitions, with compendium specifications extending functionality through services like configuration administration, HTTP handling, and device access. OSGi's design reduces development complexity by enhancing , simplifying builds, and extending software lifecycles, making it particularly valuable in resource-constrained or evolving systems. It has been widely adopted in sectors such as for device management, healthcare for secure data handling, automotive systems for real-time updates, and for scalable infrastructure, powering both open-source projects like Apache Felix and Eclipse Equinox implementations and commercial products.

Introduction

Description

OSGi, or the Open Services Gateway Initiative, is a set of open specifications that define a dynamic module system and service platform for , enabling the creation of modular, extensible applications through standardized components and runtime management. It provides a vendor-independent for developing and deploying software in environments requiring flexibility, such as systems and servers. The primary goals of OSGi include facilitating the runtime installation, updating, and removal of modules—known as bundles—without restarting the application, which supports dynamic and scalable operations in both and contexts. This dynamic allows bundles to their dependencies and capabilities explicitly, enabling the framework to resolve and wire components at runtime while promoting through a registry where modules can publish, discover, and bind to services. Key benefits of OSGi encompass improved by encapsulating code and reducing tight coupling, leading to simpler maintenance and higher across applications. It also minimizes application size via on-demand dynamic loading of modules and enables hot deployment for seamless updates, fostering service-oriented architectures that enhance adaptability and reduce development complexity. Originally focused on residential gateways, such as set-top boxes for smart home services, OSGi has evolved over nearly two decades to support broader applications in areas like IoT, automotive, healthcare, and cloud-based enterprise systems.

History

The OSGi (Open Services Gateway Initiative) specification originated in March 1999, when a consortium of telecommunications companies—including Ericsson, IBM, Motorola, Sun Microsystems, Nortel Networks, and Philips—collaborated to develop standardized software architectures for residential gateways. These gateways were intended to enable the remote management, provisioning, and upgrading of services in networked devices such as home entertainment systems and set-top boxes, addressing the challenges of delivering managed services to small-scale local networks. The initiative aimed to create an open, modular framework for Java-based applications that could dynamically load, update, and interact without requiring device restarts. The first specification, OSGi Release 1.0, was published in May 2000, establishing the core for service gateways with features for bundle management and service-oriented communication tailored to environments. Subsequent releases progressed the standard: Release 2 followed in October 2001, enhancing device management capabilities, while Release 3 arrived in March 2003, introducing improved security and logging to support more robust deployments. Over time, the specifications evolved from their device-centric roots—focused on residential and automotive applications—to emphasize applicability, with later versions facilitating modular application development in server-side contexts, such as application servers and IDEs. By the mid-2000s, OSGi had gained traction beyond gateways, powering enterprise ecosystems like and enabling dynamic modularity in large-scale systems. This shift continued into the mid-2010s, as extensions and companion specifications supported cloud-native architectures, allowing for scalable, distributed deployments in virtualized environments. The OSGi Alliance, founded in 1999 to steward these open standards, announced in October 2020 its transition of assets and specifications to the , fostering greater open-source collaboration and integration with broader tooling. As of November 2025, OSGi remains a mature, actively maintained specification under the Eclipse OSGi Working Group, with no major new core release since version 8.0, finalized in December 2020, which refined framework capabilities for modern modular systems. Ongoing efforts focus on errata, compliance testing, and ecosystem enhancements rather than foundational overhauls.

Specification and Governance

Specification Process

The OSGi specifications are developed through a collaborative model involving Expert Groups organized under the OSGi Working Group at the Eclipse Foundation, where industry experts from member organizations propose, review, and vote on new features. The process begins with Requests for Proposals (RFPs) that define requirements for enhancements or new capabilities, followed by Requests for Comments (RFCs) that detail technical designs and implementations. These documents are iteratively refined through group discussions, public reviews, and consensus-based voting to ensure broad agreement and technical soundness. Major specification releases typically occur every two to three years, while compendium services—covering optional features like remote services or application models—are updated more frequently to address emerging needs. This cadence allows for steady evolution without disrupting existing deployments, with a strong emphasis on enforced via semantic versioning rules that distinguish major releases for breaking changes from minor ones for additive updates. Each release requires a and undergoes rigorous validation before finalization. Compliance with the specifications is verified using Technology Compatibility Kits (TCKs), which are comprehensive test suites provided by the OSGi to certify that implementations meet the defined standards. These TCKs cover core behaviors, resolution, and dynamics, ensuring portability across vendor implementations. Developers and vendors run TCKs during to validate adherence, with results often shared publicly for transparency. Since the 2021 transfer to the , the specification process has embraced open contributions through public repositories, where community members can submit issues, review drafts, and propose changes via pull requests. This integration with Eclipse's model facilitates feedback loops from a wider developer ecosystem, accelerating innovation while maintaining governance oversight. Deprecation of features follows a gradual approach, marking outdated APIs in release notes with clear migration guidelines to alternative mechanisms, allowing time for adopters to transition without immediate breakage. This process aligns with the framework's versioning policy, where deprecated elements remain supported in minor releases but are eventually removed in major versions after providing sufficient notice and compatibility paths.

Specification Versions

The OSGi specification has evolved through a series of major releases, each building on the previous ones to address emerging needs in modular applications, particularly for systems, environments, and dynamic -oriented architectures. Releases 1 through 3, spanning 2000 to 2003, established the foundational framework targeted at residential gateways and resource-constrained devices. Releases 1–3 (2000–2003)
OSGi Release 1, published in May 2000, introduced the core concepts of bundles as deployable units and a simple registry for dynamic component interaction, enabling platform-independent loading and execution in gateway environments. Release 2, released in October 2001, expanded this with services for , logging, device access, and an HTTP to support basic interactions. Release 3, issued in March 2003, added support for execution environments to handle varying profiles, along with wire administration for monitoring connections, IO connectors for serial/parallel ports, and integration with standards like UPnP and for device discovery and remote management. These early releases focused on lightweight modularity and for constrained settings, laying the groundwork for extensible applications without requiring restarts.
Release 4 (2006)
OSGi Release 4, finalized in 2006 with versions extending to 4.3 by 2011, significantly enhanced through declarative permissions and conditional permission administration, allowing fine-grained based on bundle identities and contexts. It also introduced XML support via the and DOM APIs tailored for bundles, improved device management with deployment administration, and expanded the compendium with services like preferences for persistent storage, metatype for configuration metadata, and initial concepts for wiring. These additions shifted focus toward enterprise-grade reliability and manageability, enabling secure, configurable deployments in more complex systems.
Release 5 (2010)
Released in 2010, OSGi Release 5 emphasized dependency management and declarative wiring, introducing the Blueprint container for inversion-of-control and , which simplified service assembly using XML descriptors. It enhanced the HTTP service with a whiteboard pattern for dynamic servlet registration, improved wire administration for real-time monitoring, and added repository services for bundle resolution with version ranges and capability-based matching. These features promoted scalable, enterprise applications by standardizing resource modeling and subsystem isolation.
Release 6 (2015)
OSGi Release 6, published in 2015, advanced modularity with refinements to the resource model for expressive / declarations, enabling finer-grained bundle resolution. It introduced promises for asynchronous operations to handle non-blocking interactions, the application model for managing composite applications as first-class entities, and data transfer objects for efficient across bundles. These innovations supported reactive and distributed systems, improving performance in concurrent environments.
Release 7 (2018)
In 2018, Release 7 updated Declarative Services to version 1.3 with enhanced component annotations and reference policies, alongside configuration admin improvements for dynamic property updates. It added remote services administration for distributed deployments, push streams for reactive event handling, and better integration with promises for composable async flows. These extensions facilitated microservices-like architectures within OSGi, emphasizing remote and event-driven capabilities.
Release 8 (2020)
The most recent major release, OSGi Release 8 from 2020, introduced the Converter service for type-safe data transformations between bundles and annotation-based wiring to reduce XML boilerplate in Declarative Services and . Minor updates through 2025, managed under the , include refinements to compendium services like integration and connect protocols, maintaining focus on . As of November 2025, Release 8 remains the baseline, including planning for OSGi Core Release 9, with ongoing work on specialized specifications.
A core principle across all releases is the policy, which ensures that bundles developed for earlier versions can execute unchanged on newer framework implementations, achieved through semantic versioning rules that preserve stability and wire unless explicitly broken in major increments. This policy, enforced via capability declarations and resolver constraints, supports long-term evolution without disrupting legacy deployments.

Governing Organizations

The OSGi Alliance, founded in March 1999 as a non-profit corporation by initial members including , , , and , served as the primary for the OSGi specifications. It operated as a of technology companies, with prominent members such as and Robert Bosch GmbH contributing to specification approval, promotion, and evolution to support modular Java applications in and environments. The Alliance's structure emphasized collaborative standards development, fostering adoption across industries through its oversight of releases and compliance testing. In October 2020, the OSGi Alliance announced its dissolution and transition of assets to the , establishing the to continue its mission. This move addressed the Alliance's challenges in maintaining independent operations amid the rise of open-source models, leveraging Eclipse's infrastructure for greater transparency, public repositories, and synergy with existing projects like . Under , the OSGi Specification Project now handles collaborative development of open specifications, ensuring compatibility with tools such as the Eclipse IDE while preserving existing intellectual property rights. The OSGi Working Group, hosted by the since the 2020 transition, manages membership and governance through defined tiers that influence decision-making via a Steering Committee. Strategic members, such as and Robert Bosch GmbH, provide significant investment (e.g., annual fees starting at $3,500 for smaller entities and $15,000 for those with over $100 million in ) and require at least one committed to the specification project; participant members (fees from $1,500 to $5,000 based on size) focus on product delivery; committer members contribute through merit-based code and documentation; and guest members, often from academia, participate without voting rights or fees. Community involvement occurs through Special Interest Groups (SIGs) within the Working Group, which address specific areas like core framework evolution, and annual events such as the OSGi Summit and Open Community Experience (OCX) conferences for sharing updates and fostering collaboration. These mechanisms support development of specification tracks, including Core (fundamental framework), Compendium (additional services), and Residential (home gateway applications), promoting broad adoption without additional membership costs for SIG participation.

Architecture

Core Layers

The OSGi framework is structured around a layered that enables modular, dynamic, and secure applications. This design separates concerns into distinct layers, each building upon the others to provide runtime modularity. The core layers include the Security Layer, Module Layer, Layer, and , which collectively form the foundation for bundle management and inter-component interaction. The Security Layer provides permissions and protection mechanisms, enhancing the standard Java security model with bundle-specific constraints and a secure packaging format to control access to resources and operations. It is optional, allowing frameworks on resource-constrained devices to disable security checks while maintaining compatibility through permission stubs. The Module Layer handles bundle resolution and visibility, defining a modularization model that manages package sharing, hiding, and dependency wiring to ensure consistent class loading and namespace isolation. This layer operates independently of higher layers but enforces visibility rules through capabilities and requirements. The Life Cycle Layer oversees bundle start and stop operations, including installation, updates, and uninstallation, requiring the Module Layer for resolution prior to activation. It integrates with security to apply permissions during lifecycle transitions. The Service Layer supports dynamic registration and lookup of services via a central registry, enabling bundles to publish and discover Java objects under interfaces for collaborative functionality. It depends on the Life Cycle Layer to tie service availability to bundle states. These layers interact in a bottom-up model, where foundational elements support higher-level operations; for instance, the Security Layer enforces access controls on Module Layer imports and exports, while the Layer manages the availability of services registered in the . This hierarchical structure ensures that modularity is enforced at each level, with the propagating changes dynamically across layers. The execution environment assumes support for SE 8 or later, including optional packages for extended functionality, allowing the to run on diverse devices from systems to servers. As a , the OSGi orchestrates these layers to manage bundles and , providing a unified for deploying and updating components without full application restarts. This role emphasizes scalability across varying hardware constraints. The architecture embodies key design principles of dynamicity, through adaptability and event notifications; , by decoupling interfaces from implementations via the registry; and extensibility, achieved by allowing bundles to extend behavior without core modifications.

Security and Module Systems

The OSGi Security Layer integrates with the Java 2 security architecture to provide fine-grained for bundles, leveraging the Security Manager and Access Controller to enforce permissions at runtime. Each bundle is associated with a specific set of permissions based on its code source, location, or digital signer, ensuring that operations such as class loading, resource access, and service interactions are restricted unless explicitly allowed. This integration allows bundles to operate in isolated environments, where permission checks are performed via mechanisms like SecurityException throws during sensitive operations, such as bundle installation or activation. Bundle-specific protection domains form a core component of this security model, assigning each bundle a unique ProtectionDomain tied to its code source, which includes details like signer certificates and location. This domain governs the permissions applicable to all classes loaded from the bundle, promoting by preventing unauthorized to system resources or other bundles' code. For digitally signed JARs, verification uses and SHA-256 digests alongside signatures and certificate chains to establish trust, ensuring that only authenticated code executes with granted privileges. Fragments and embedded resources share the host bundle's protection domain, maintaining consistent security boundaries during extension. Dynamic access control is enabled through conditional permissions, managed by the Conditional Permission Admin service, which maintains a system-wide policy table evaluated in real-time. Policies use LDAP-style filters to grant or deny permissions based on runtime conditions, such as bundle signer (e.g., (signer=*,o=ACME,c=US)) or location, supporting actions like ALLOW or DENY for operations including package imports and service registrations. This allows administrators to adjust permissions dynamically without restarting the framework, intersecting local bundle permissions with global policies to compute effective access rights. Key permissions, such as AdminPermission for lifecycle operations (e.g., LIFECYCLE, METADATA) and PackagePermission for import/export controls (e.g., IMPORT, EXPORT), are enforced through this system to mitigate risks in multi-bundle environments. The OSGi Module Layer establishes by defining rules for package and bundle interactions, using a capabilities and requirements model to declare and satisfy dependencies. Release 8 introduces support for multi-release JARs, allowing version-specific manifests for 9 and later, and deprecates the Bundle-RequiredExecutionEnvironment header in favor of the osgi.ee for execution declarations. Capabilities represent provided features, such as packages via Export-Package headers (e.g., org.osgi.framework;version=1.10), while requirements specify needs, like imports via Import-Package (e.g., org.osgi.util.tracker;version="[1.5,2)"). This model operates across like osgi.wiring.package, enabling generic dependency resolution beyond traditional bundles. Bundle wiring connects these to during , creating directed links called wires that ensure consistent loading and prevent conflicts. For instance, an Import-Package wires to a matching Export-Package , forming a path from the requiring bundle's wiring to the provider's, accessible via APIs like getRequiredWires([String](/page/String)). The resolver orchestrates this process, computing wirings that satisfy all mandatory while optionally including others, using algorithms that prioritize resolved exporters, higher versions, and lower bundle IDs for selection. Fragment bundles extend host bundles by attaching non-executable content, declared via Fragment-Host headers (e.g., com.example.host;bundle-version="[1.0,2.0)"), without independent lifecycle management. During resolution, fragments are matched to hosts in ascending bundle ID order, appending their entries to the host's class path and merging capabilities (except for osgi.wiring.host and osgi.ee), allowing seamless extension of functionality like adding resources or packages. The resolver handles fragment attachment via directives like fragment-attachment:=resolve-time, ensuring integration before host wiring. Visibility rules enforce class space partitioning by assigning each bundle a unique class loader, which delegates loading through a strict order: () classes, wired imports, bundle class path, and dynamic imports. This partitioning prevents unintended interactions, such as multiple versions causing ClassCastExceptions, by ensuring all imports from a package wire to a single exporter, maintaining a consistent per bundle wiring. Dynamic imports, specified in DynamicImport-Package, resolve at if static wires are absent, providing flexibility for optional dependencies. The resolver employs distinct algorithms for basic and fragment processes to achieve consistent wiring. In basic resolution, it iteratively matches requirements to available capabilities using findProviders(Requirement), resolving transitive dependencies while respecting constraints like version ranges and filters, and outputting a map of wires per resource. Fragment resolution extends this by first identifying related hosts via findRelatedResources(Resource), then inserting hosted capabilities into preference lists before general matching, ensuring fragments enhance hosts without circular dependencies. These processes support both mandatory and optional wirings, with hooks allowing custom modifications for advanced scenarios.

Bundles

Structure

An OSGi bundle serves as the fundamental deployment unit in the , functioning as an enhanced file that encapsulates classes, resources such as configuration files or images, and essential metadata within the META-INF/MANIFEST.MF file. This enables by allowing the bundle to declare its internal components and external dependencies explicitly, distinguishing it from standard JARs through the inclusion of OSGi-specific manifest headers that govern visibility, wiring, and behavior. The manifest file contains several key headers that define the bundle's identity and interactions. The Bundle-SymbolicName header provides a unique, non-localizable identifier for the bundle, typically in reverse domain notation such as com.example.module, ensuring it can be referenced distinctly across the . Complementing this, the Bundle-Version header specifies the bundle's version in the format major.minor.micro.qualifier (e.g., 1.0.0), which defaults to 0.0.0 if omitted and supports versioning for dependency management. For package-level modularity, the Export-Package header lists the packages made available to other bundles, including attributes like version (e.g., com.example.api;version="1.0.0"), while the Import-Package header declares required external packages with version ranges (e.g., com.example.api;version="[1.0,2.0)"). Additionally, the Require-Bundle header explicitly mandates dependencies on other bundles by their symbolic name and version (e.g., com.example.lib;bundle-version="1.0.0"), facilitating coarse-grained wiring. Beyond basic headers, OSGi employs a declarative model of capabilities and requirements to enable flexible, dynamic matching between bundles without hard-coded dependencies. The Provide-Capability header declares what a bundle offers, such as services or extensions, in a namespace-specific format (e.g., osgi.service;objectClass="[java](/page/java).lang.Runnable"), allowing attributes and directives for filtering. Correspondingly, the Require-Capability header specifies needs using LDAP-style filters (e.g., osgi.service;filter:="(objectClass=[java](/page/java).lang.Runnable)"), promoting a more granular and runtime-resolvable approach to inter-bundle relationships compared to package or bundle imports. OSGi supports distinct bundle types to accommodate varied deployment scenarios. A standard bundle operates independently, containing its own classes and resources with a dedicated class loader for execution. Fragment bundles, in contrast, lack a standalone class loader and must attach to a bundle specified via the Fragment-Host header (e.g., Fragment-Host: com.example.host), extending the host's functionality with additional resources or classes without altering its core structure. bundles are standard bundles configured to accept fragments through compatible capabilities, enabling composable modularity for scenarios like or extensions. Bundle activation policies control when the bundle's code becomes active, balancing performance and resource usage. The default lazy policy defers bundle startup until a class from its codebase is first loaded or a service is requested, minimizing overhead in dynamic environments. Eager activation, specified via the Bundle-ActivationPolicy header (e.g., Bundle-ActivationPolicy: eager), triggers immediate activation upon bundle start, suitable for bundles requiring prompt initialization such as critical system components.

Resolution and Dependencies

The OSGi framework employs a resolver to manage bundle dependencies by computing wirings that connect the requirements of one bundle to the capabilities of others, utilizing headers such as Import-Package and Export-Package to ensure and prevent conflicts like version mismatches or overlapping class spaces. This process operates on a generic requirement-capability model, where namespaces like osgi.wiring.package define fine-grained constraints, including attributes for package names and directives for behavior, to create a consistent wiring across the . Resolution in OSGi distinguishes between static and dynamic modes to accommodate varying dependency needs. Static resolution occurs during bundle installation or explicit resolution requests, satisfying mandatory requirements upfront to transition bundles to the resolved state, while supporting optional dependencies marked with the resolution:=optional directive, which allow bundles to resolve even if those capabilities are unavailable. Dynamic resolution, in contrast, handles runtime needs through mechanisms like DynamicImport-Package headers, which defer package imports until class loading time, enabling flexible substitution of providers without prior static wiring. Constraints in OSGi resolution are primarily package-level, allowing importers to specify version ranges for exported packages, such as [1.0.0,2.0.0) to accept versions from 1.0.0 inclusive up to but not including 2.0.0, ensuring precise semantic versioning compliance. The uses directive further refines these constraints by declaring inter-package dependencies within an exporter, forcing wirings to the same provider to maintain class loading consistency and avoid linkage errors. When conflicts arise, such as multiple capable providers for a , the resolver applies selection strategies prioritizing already-resolved bundles, then the highest compatible version, and finally the provider with the lowest bundle ID to deterministically choose wirings. For overlapping imports and bundle-level requirements via Require-Bundle, the favors explicit package imports over bundle-wide wirings to minimize unintended exposures. For advanced scenarios, OSGi provides framework hooks through the Resolver service, which allows custom implementations of the Resolver interface to be registered, enabling tailored resolution logic such as integration with external repositories or complex provisioning rules beyond the default framework resolver. This extensibility supports tools for build-time analysis or deployment automation while adhering to the core wiring model.

Lifecycle

States

In the OSGi framework, bundles progress through a well-defined set of states that represent their lifecycle stages, ensuring controlled , , and deactivation within a modular . These states are UNINSTALLED, INSTALLED, RESOLVED, STARTING, ACTIVE, and STOPPING, each corresponding to specific conditions and capabilities of the bundle. The UNINSTALLED state indicates that the bundle has been completely removed from the , rendering its resources unavailable and preventing any further operations on it. The INSTALLED state occurs immediately after a bundle is deployed into the but before its dependencies are verified; at this point, the bundle's content is accessible, but it cannot execute or load classes due to potential unresolved requirements. Once dependencies are satisfied through the 's resolution process, the bundle enters the RESOLVED state, where it is wired to necessary packages and services, making it ready for or having just been deactivated. The STARTING state is transient, marking the period during which the bundle's activator (if present) is executing its start to initialize resources; similarly, the STOPPING state is transient, occurring as the activator's stop runs to clean up. Finally, the ACTIVE state signifies that the bundle is fully operational, with its activator having completed initialization, allowing the bundle to execute , register services, and interact with the . Transitions between these states are triggered by specific framework operations, maintaining a deterministic lifecycle. Installation via the installBundle method on the BundleContext moves a bundle directly to the INSTALLED state. Resolution, handled automatically by the framework's resolver when dependencies are met (often triggered by events like bundle updates or starts), advances the bundle to RESOLVED. Starting a bundle in RESOLVED state initiates the transition through STARTING to ACTIVE, invoking the BundleActivator.start method if defined. Conversely, stopping an ACTIVE bundle leads through STOPPING back to RESOLVED, executing the BundleActivator.stop method to release resources. Uninstallation from INSTALLED or RESOLVED reverts the bundle to UNINSTALLED, at which point it becomes a "zombie" object that cannot transition further. The OSGi framework supports state persistence across shutdown and restart events to enable reliable recovery in dynamic environments. Bundles in INSTALLED or RESOLVED states remain installed upon framework or Java VM restart until explicitly uninstalled, preserving their content and wiring information where possible. For ACTIVE bundles, the framework typically restarts them automatically unless they were marked as stopped or configured otherwise, with autostart settings (such as eager or declared activation) maintained persistently through storage mechanisms like properties files. This persistence ensures minimal disruption in long-running systems, such as enterprise servers, by avoiding full reinstallation on every boot. Lazy activation provides a to optimize resource usage by delaying the STARTING-to-ACTIVE transition until necessary. When a bundle declares a Bundle-ActivationPolicy: lazy header in its , the installs and resolves it normally but postpones full until the first attempt to load a bundle (excluding certain resources specified via directives like include: or exclude:). Upon class load, the bundle enters STARTING, fires a BundleEvent.LAZY_ACTIVATION , and proceeds to ACTIVE if successful; this mechanism reduces startup overhead in scenarios with many dormant bundles. Bundle states can be queried programmatically to monitor and manage the framework's health. The getState() method on the Bundle interface returns an integer bit-mask representing the current state, such as Bundle.ACTIVE (value 0x00000004) or combinations for transient states like STARTING (0x00000008). Developers often use bitwise operations, e.g., (bundle.getState() & (Bundle.STARTING | Bundle.ACTIVE | Bundle.STOPPING)) != 0, to check if a bundle is executing . This enables tools and managers to inspect states without altering them.

Management

The management of OSGi bundles is primarily handled through the BundleContext and Bundle APIs provided by the OSGi , enabling programmatic , updating, removal, starting, and stopping of bundles. The BundleContext.installBundle(String location) or BundleContext.installBundle(String location, InputStream input) method installs a new bundle by reading its content from a specified location or input stream, allocating a unique bundle ID and persistent storage, setting the bundle's state to INSTALLED, and firing a BundleEvent.INSTALLED to notify listeners. If the installation fails due to issues like duplicate locations or read errors, a BundleException is thrown with types such as DUPLICATE_BUNDLE_ERROR or READ_ERROR. Bundle updates are managed via the Bundle.update() or Bundle.update(InputStream input) methods, which perform an replacement of the bundle's content to ensure reliability during the process. If the bundle is active, it is first stopped to handle any running threads, the new content is read and installed as a temporary bundle, and if successful, the original bundle is replaced while preserving its ID and location; failure reverts to the original state. checking for is implementation-dependent but must verify the new bundle's validity before replacement. Upon success, the bundle's state is set to INSTALLED, a BundleEvent.UPDATED is fired, and if it was previously active, it is restarted automatically. Uninstallation is initiated through Bundle.uninstall(), which stops the bundle if it is in an active or transitioning state, releases its resources, sets its state to UNINSTALLED, and fires a BundleEvent.UNINSTALLED event, after which the Bundle object becomes invalid for further operations. Starting a bundle uses Bundle.start(int options), which resolves dependencies if necessary, transitions the state to STARTING while firing a synchronous BundleEvent.STARTING, invokes the bundle's BundleActivator.start method if present, and sets the state to ACTIVE with a BundleEvent.STARTED event; options like START_TRANSIENT allow non-persistent activation. Conversely, Bundle.stop(int options) transitions the state to STOPPING with a synchronous BundleEvent.STOPPING, calls BundleActivator.stop if available, unregisters any provided services, and sets the state to RESOLVED while firing BundleEvent.STOPPED. Framework events, particularly BundleEvent objects, provide notifications for all state changes during management operations, delivered synchronously to SynchronousBundleListener instances or asynchronously to BundleListener registrations via BundleContext.addBundleListener. These events include the bundle as the source, the event type (e.g., UPDATED, UNINSTALLED), and origin details, allowing management agents or other bundles to react to lifecycle transitions without polling. Persistence of bundle management is ensured through the framework's bundle store, which maintains installed bundle content, metadata, and unique IDs across framework restarts, with updates atomically replacing entries in this store to prevent partial states. The BundleContext.getDataFile(String filename) method provides access to a bundle-specific persistent directory for custom data files. Error handling in bundle management relies on BundleException, a checked exception thrown by all lifecycle methods for failures such as STATECHANGE_ERROR during start/stop, ACTIVATOR_ERROR if the bundle activator throws an exception, or READ_ERROR for content issues, often accompanied by a FrameworkEvent.ERROR for framework-wide notification. Each exception includes a type constant, a detailed message, and optionally a chained cause for diagnosis.

Services

Registry

The OSGi service registry serves as the central mechanism for dynamic publication, discovery, and consumption of among bundles in a modular . It enables bundles to register Java objects as under one or more , allowing other bundles to locate and utilize them without direct dependencies, thereby promoting and runtime adaptability. Service registration occurs through the BundleContext.registerService , which takes an array of interface names, the object, and an optional Dictionary of properties as key-value metadata. The automatically sets the objectClass property to the registered , and the becomes immediately available for lookup by other bundles. Upon successful registration, the returns a ServiceRegistration object, which the registering bundle can use to retrieve the associated ServiceReference or unregister the explicitly; however, unregistration is automatic when the registering bundle stops. Lookup mechanisms rely on the BundleContext.getServiceReferences method, which accepts a class name or LDAP filter string to retrieve an array of ServiceReference objects matching the criteria. Filters employ LDAP syntax for precise selection, such as "(objectClass=example.Service)" to target services implementing a specific interface or "(service.vendor=Acme)" to match custom properties. If no services match, the method returns null; otherwise, references are ordered by service ranking, with higher-ranked services appearing first to facilitate prioritization during selection. Service dynamics are managed through event listeners and proxying capabilities to handle runtime changes. Bundles can register a ServiceListener via BundleContext.addServiceListener to receive notifications for events like REGISTERED, MODIFIED, or UNREGISTERING, filtered by interface or LDAP expressions; these events are delivered synchronously in the thread invoking the registration or unregistration. For remote or distributed access, services support proxying, often implemented via the ServiceFactory to create client-side proxies that encapsulate communication logic. Properties enhance filtering and selection by providing extensible metadata, such as strings, integers, or other objects, with the service.ranking property (defaulting to 0) determining selection priority among matching services—higher values indicate preference, and ties are broken by the unique service.id. This allows bundles to advertise capabilities or versions, enabling consumers to choose services based on criteria like performance or vendor. The service factory pattern addresses threading and instance management by allowing per-bundle customization of service instances. When registering a service with a ServiceFactory , the invokes its getService for each consuming bundle, passing the consumer's Bundle and the ServiceRegistration to produce a tailored instance, which is released via ungetService when no longer needed; this ensures and resource isolation across bundles. A related PrototypeServiceFactory extends this for on-demand prototypes, creating fresh instances per acquisition to support stateless or high-concurrency scenarios.

Standard Services

The OSGi standard services provide predefined interfaces in the Core and specifications to address common functionalities required in modular applications, such as , , handling, and . These services are registered in the OSGi service registry and can be obtained by bundles via or direct lookup, enabling and dynamic interactions. Introduced progressively across releases starting from OSGi Release 4, they form the foundation for building robust, enterprise-grade OSGi-based systems without requiring custom implementations. The Log Service, defined in the OSGi Core, offers a structured mechanism for bundles to record messages and exceptions across the . Its primary interface is the LoggerFactory, which creates named loggers supporting SLF4J-style formatting and log levels including , , WARN, , DEBUG, and . Bundles obtain a logger via getLogger(Class<?> clazz) and use methods like error(String, Throwable) to log entries, while the LogReaderService allows retrieval of past logs through getLog() or listener notifications. This service facilitates centralized and debugging in multi-bundle environments. It was introduced in OSGi Compendium Release 4 with version 1.3 of the org.osgi.service.log package, evolved to version 1.4 in Compendium 7, and moved to OSGi Core Release 8 with version 1.5. The Configuration Admin Service, part of the OSGi , enables dynamic management of bundle properties using Persistent Identity ()-based configurations stored in a persistent database. Bundles register as ManagedService or ManagedServiceFactory with a PID (e.g., "com.example.service") to receive updates via the updated(Dictionary<String, Object>) callback method, allowing runtime reconfiguration without restarts. The ConfigurationAdmin interface provides methods like getConfiguration(String pid) to create or retrieve configurations and update(Dictionary<String, Object>) to apply changes, supporting factory configurations for multiple instances. This service is essential for deployment and in OSGi environments. It originated in OSGi Release 4 with package version 1.2 and was updated to version 1.6 in 7. The HTTP Service, specified in the OSGi , allows bundles to expose web resources and servlets over HTTP using the whiteboard pattern, where registrations dynamically map URIs to handlers. The core HttpService includes registerServlet(String alias, Servlet servlet, [Dictionary](/page/Dictionary)<String, String> initparams, [HttpContext](/page/Context) context) for servlet registration and registerResources(String alias, String name, [HttpContext](/page/Context) context) for static file serving, with unregister(String) for cleanup. The HttpContext handles via handleSecurity(HttpServletRequest, HttpServletResponse). This enables lightweight web applications within OSGi without a full servlet container. Introduced in OSGi Release 4 with version 1.2 of the org.osgi.[service](/page/Service).http package, it remains at version 1.2 in 8. The Event Admin Service implements a publish-subscribe model for asynchronous inter-bundle communication in the OSGi Compendium. Publishers use the EventAdmin interface to create Event objects with topics (e.g., "com/example/UPDATE") and properties, then deliver them via postEvent(Event) for asynchronous or sendEvent(Event) for synchronous handling. Subscribers register as EventHandler services with properties like event.topics and optional LDAP filters, receiving events through the handleEvent(Event) callback. This decouples components and supports event-driven architectures. The service debuted in OSGi Compendium Release 4 with package version 1.0 and advanced to version 1.4 in Compendium 7. The Package Admin Service, from the OSGi Core specification, supports framework introspection by providing access to exported packages and bundle requirements, though it is deprecated in favor of the wiring package. Its main PackageAdmin offers methods like getExportedPackages(Bundle) to retrieve ExportedPackage objects detailing package versions and exporters, and getBundles() for resolving required bundles via RequiredBundle. Bundles use it for dependency analysis and resolution diagnostics. Introduced in OSGi Core Release 4 with package version 1.2, it was deprecated starting in Core Release 5. The Start Level Service, defined in the OSGi Core, manages the startup ordering of bundles through -based levels to control activation sequence, such as for splash screens or phased initialization. The FrameworkStartLevel interface (accessible only to the system bundle) includes setStartLevel(int level) to adjust the active framework level, while BundleStartLevel allows per-bundle assignment via setStartLevel(int). Bundles below the active level start automatically, enabling incremental loading up to Integer.MAX_VALUE. This service is crucial for managing complex framework bootstraps. It was first specified in OSGi Core Release 4 and persists in Core 7.

Complementary Standards

The OSGi Compendium Services provide a collection of optional specifications that extend the core OSGi framework with advanced functionality for service-oriented development. Declarative Services (DS) enable a component model where services are declared via annotations or XML descriptors, automating registration, , and lifecycle management without direct interaction with the service registry. Blueprint Container offers a framework inspired by , using XML-based configuration in the OSGI-INF/[blueprint](/page/Blueprint) directory to manage beans, service references, and dynamic service bindings with features like reference lists and proxies for handling service volatility. Remote Services facilitate distributed service communication by defining intents, endpoint descriptions, and administration APIs for exporting and importing services across network boundaries, supporting discovery protocols and topology management. The OSGi Residential Specification targets device management in home gateways and networked environments, integrating with protocols like UPnP for seamless interoperability. It introduces the Residential Management Tree (RMT), a hierarchical structure built on the Device Management Tree (DMT) for remote administration of bundles, logs, and device states via atomic sessions and ACL-based access control. Key components include the Device Manager for coordinating drivers and devices through bidding mechanisms, the TR-069 Connector for mapping broadband forum protocols to DMT operations, and UPnP Device Services for discovering and exposing OSGi services as UPnP control points or devices. This specification ensures modular management of home network elements, supporting initial provisioning and dynamic driver installation. Enterprise OSGi aligns the platform with Java EE environments, emphasizing scalability and integration for enterprise applications. It incorporates for to decouple components from OSGi specifics, enabling support for JNDI, JTA transactions, and web containers like servlets and JSP. JPA support is provided through the JPA Service Specification, allowing persistence units to be managed as OSGi services with entity managers and datasource factories. These extensions facilitate the deployment of enterprise-grade applications in dynamic OSGi containers. Security specifications in OSGi integrate with the Security Manager to enforce fine-grained permissions on bundles and services. The Layer authenticates code via digitally signed JARs and manages permissions through the Permission Admin and Conditional Permission Admin services, using filter-based conditions on bundle location or signer. Conditional permissions enable dynamic policy evaluation, such as granting access based on service properties, while supporting implied permissions for operations like file access and service registration. In OSGi Release 8 (finalized in 2020), additions include the Push API for reactive event processing and the Converter for type handling. Push provide an asynchronous pipeline similar to but with reversed , supporting operations like mapping, filtering, and buffering with back-pressure handling via Promises. The Converter simplifies conversions between scalars, collections, maps, and DTOs, using a standard builder for custom rules and generics via TypeReference, ensuring safe and efficient data transformation in modular applications.

Integrations and Comparisons

OSGi integrates seamlessly with popular frameworks and enterprise platforms, enabling modular application development in diverse environments. One key integration is with the through the OSGi Blueprint Container specification, introduced in OSGi Release 4.2 as part of the Compendium Services. , derived from the Spring Dynamic Modules (Spring DM) project, provides a model that aligns Spring's bean lifecycle with OSGi's service registry, allowing developers to define beans, import and export services, and manage configurations via XML namespaces such as http://www.osgi.org/xmlns/blueprint/v1.0.0. This enables Spring applications to run as OSGi bundles, supporting dynamic and hot deployment without restarting the container. In enterprise server environments, OSGi enhances modularity for applications, particularly in servers like WebLogic. WebLogic Server, using the Felix OSGi framework (compliant with OSGi Release 8), allows deployment of OSGi bundles within JAR, EAR, or WAR files, providing access to resources like data sources and work managers via JNDI. The OSGi Compendium Specification includes the Whiteboard pattern for (JAX-RS 3.0), where resources, applications, and extensions are registered as OSGi services with properties like JAKARTA_RS_RESOURCE for dynamic URI mapping and lifecycle management. This supports isolated whiteboard instances for multiple REST endpoints, ensuring modular deployment in servers without interference between components. For container orchestration, OSGi bundles can be containerized and deployed on , combining OSGi's intra-VM modularity with ' . An example from demonstrates building an OSGi application with Apache , packaging it into a image via , and deploying it as a with services for load balancing. This setup includes liveness/readiness probes and exposes endpoints like JAX-RS services, allowing OSGi bundles to run in a distributed, containerized environment while leveraging for scaling and management. Compared to the (JPMS) introduced in 9, OSGi emphasizes runtime dynamics over JPMS's compile-time modularity. While JPMS enforces module boundaries at build and link time using module-info.java for explicit dependencies and encapsulation, OSGi enables dynamic bundle installation, updates, and service interactions at via its , supporting hot-swapping without JVM restarts. This makes OSGi suitable for long-running applications requiring adaptability, whereas JPMS focuses on static analysis for better performance in simpler, non-dynamic scenarios. An analysis highlights OSGi's 16-year maturity in handling complex modularity challenges, such as service-oriented dependencies, which JPMS addresses more simplistically but with growing features like qualified exports. In contrast to architectures, OSGi provides intra-VM modularity for components sharing the same JVM, avoiding network overhead associated with in microservices. Microservices typically deploy independent services across containers or VMs using protocols like or , enabling scaling but introducing and in . OSGi bundles, however, communicate via lightweight in-process services, making it ideal for tightly coupled, performant modules within a single process; the OSGi Specification integrates with JAX-RS for remote exposure, bridging to microservices when distribution is needed. This positions OSGi as a complementary approach for "modular monoliths" that can evolve into . Migration from plain applications to OSGi involves tools that wrap existing JARs into bundles by generating manifests with headers like Bundle-SymbolicName and Export-Package. The facilitates this through its wrap command or workspace model, analyzing to infer dependencies, resolve imports, and create compliant OSGi metadata, often integrated with or plugins for automated builds. For instance, running bnd wrap input.jar produces an OSGi-ready bundle, handling third-party libraries without manual manifest editing. Despite its strengths, OSGi introduces overhead unsuitable for simple applications, such as increased startup time and usage due to its dynamic classloading and registry. In lightweight scenarios, this complexity can outweigh benefits, contrasting with frameworks like Micronaut, which compile to native images for sub-second startups and minimal footprints without introspection. OSGi's enforces upfront design discipline, potentially complicating small projects, whereas Micronaut prioritizes efficiency for cloud-native, serverless use cases. Supporting OSGi development, tools like Bnd extend beyond wrapping to full bundle creation and verification, analyzing code for automatic manifest generation and . Pax-Exam complements this as an in-container testing , automating OSGi setup with integration, provisioning bundles via coordinates, and enabling integration tests that simulate runtime conditions without manual container management.

Implementations

Open-Source Frameworks

Apache Felix is a prominent open-source implementation of the OSGi framework, developed under . It provides a modular runtime environment with features such as the Gogo shell for command-line interaction and enhanced resolver capabilities for efficient bundle dependency management. The framework supports the OSGi Core Release 8 specification, enabling dynamic module loading and service management in applications. Eclipse Equinox serves as the reference implementation of the OSGi core framework and is deeply integrated with the IDE, facilitating plugin-based ecosystems for development tools. It includes a console for runtime inspection and the p2 provisioning system for automated bundle updates and installations. Equinox maintains compliance with OSGi Core Release 8, supporting large-scale modular applications like the platform itself. Knopflerfish offers a lightweight and embeddable OSGi runtime, emphasizing core specification compliance with a minimal resource footprint suitable for constrained environments. Maintained by Makewave, it supports OSGi Release 6 in its current 6.x series, with community efforts initiated toward Release 7 compatibility in 2018, though no further releases as of 2025. Its design prioritizes simplicity and portability for embedded Java systems. Concierge is a , embeddable OSGi framework compliant with Core Release 5, designed for resource-constrained devices. It is maintained by the and passes the relevant TCK tests. These open-source frameworks—Apache Felix, Eclipse Equinox, Knopflerfish, and Concierge—have all passed the OSGi (TCK) tests for their respective core release levels, ensuring and standards adherence. As of 2025, they remain actively maintained by their communities, with contributions focused on with modern versions and evolving OSGi specifications.

Commercial Frameworks

Commercial OSGi frameworks provide vendor-supported implementations that extend the core specification with enterprise-grade features, such as integrated security, cloud orchestration, and optimized runtimes for specific domains like . These offerings emphasize reliability, professional support, and seamless with broader vendor ecosystems, distinguishing them from open-source alternatives by including tools and long-term maintenance contracts. Oracle GlassFish Server incorporates OSGi as a foundational element for achieving modularity in Java EE applications. Utilizing the Apache Felix framework, it enables the deployment of OSGi bundles alongside traditional Java EE components, facilitating hybrid applications where OSGi services can be injected into servlets, EJBs, and other artifacts via CDI extensions like the @OSGiService annotation. Key capabilities include support for Web Application Bundles (WABs) with custom context paths and EJB exports as OSGi services, promoting dynamic updates and reduced coupling in enterprise server environments. IBM WebSphere Application Server delivers comprehensive OSGi support tailored for enterprise-scale deployments, allowing developers to package applications as modular OSGi bundles that coexist with Java EE elements. This integration supports versioning, dependency management, and dynamic lifecycle operations for bundles, enhancing reusability across applications. Security is bolstered through WebSphere's administrative framework, including role-based protections for blueprint-managed beans and propagation of enterprise security policies to OSGi components, ensuring compliant and secure execution in regulated industries. ProSyst's OSGi Framework, originally from ProSyst and acquired by in 2015, is now integrated as part of Edge Services within the Suite, targeting embedded systems and edge devices with a lightweight, standards-compliant implementation. It supports modular software architectures on resource-limited hardware, such as gateways, through features like remote bundle management, event-driven monitoring via OSGiDeviceListener, and secure over-the-air updates, enabling scalable deployments with vendor-backed . Many commercial frameworks incorporate vendor-specific extensions, such as advanced bundle resolvers for handling proprietary dependencies and graphical management consoles for runtime diagnostics, while providing certified compliance with various OSGi releases, including up to Release 8 for some implementations, as of 2025.

Adoption

Notable Projects

The Eclipse () has its core platform built on , an OSGi implementation that enables plugin modularity by allowing extensions to be dynamically loaded, updated, and unloaded without restarting the application. This architecture supports a vast ecosystem of plugins, facilitating extensible development for and other languages. Apache Karaf serves as an OSGi-based runtime container designed for deploying enterprise applications, providing a lightweight environment that supports hot deployment and dynamic configuration. It features provisioning from repositories, enabling seamless installation of features and bundles via Maven coordinates for scalable application management. , an open-source services framework, integrates OSGi to facilitate the creation and management of web services with dynamic endpoints that can be exported and discovered across distributed environments. This allows for flexible and RESTful service configurations, where endpoints adapt to service availability changes in real-time. Formerly, JBoss was an integration platform that leveraged OSGi, through its Apache Karaf container, to support the development and deployment of in cloud-native environments. It enabled modular integration patterns, combining Apache routing with OSGi bundles for fault-tolerant, containerized service orchestration. However, Red Hat JBoss Fuse reached end-of-life in 2024. The Operating System (ONOS) functions as an SDN controller that employs OSGi for its modular , allowing network applications to be installed, activated, and managed as bundles within a distributed . Built atop Karaf, ONOS supports scalable networking by enabling dynamic composition of protocols and features for software-defined infrastructures.

Industry Applications

OSGi has found significant application in environments, particularly within application servers where it enables the development and deployment of modular applications with hot-swappable modules. This capability allows for dynamic updates and replacements of components without requiring full system restarts, thereby reducing downtime in mission-critical systems. For instance, integrates OSGi to support modular Java EE and OSGi-based applications, facilitating easier assembly and management of enterprise-scale deployments. In the and systems sectors, OSGi serves as a foundational technology for gateways that manage dynamic integration of heterogeneous . Its supports real-time lifecycle management of bundles, enabling seamless addition or removal of functionality in resource-constrained environments such as automotive systems and smart homes. Automotive applications benefit from OSGi's extensibility in in-vehicle gateways, where it improves among sensors and networks through clustering and open standards. In smart home scenarios, OSGi powers gateways for and connectivity, as seen in implementations like the Gateway Software, which uses OSGi to standardize communication protocols and support diverse ecosystems. These uses highlight OSGi's role in reducing fragmentation and enhancing adaptability in embedded deployments. OSGi also contributes to and architectures by providing fine-grained within containers, allowing bundles to be deployed as lightweight, independent units. This approach supports cloud-native principles through executable JARs or integration with tools like , enabling scalable and decoupled services in distributed systems. However, OSGi's adoption here remains less prevalent compared to Kubernetes-native solutions, as it is often layered atop JVM-based containers rather than serving as the primary orchestration layer. Frameworks like Karaf demonstrate how OSGi can orchestrate within a single JVM, offering dynamic that complements containerized environments. Despite these advantages, OSGi presents challenges, including a steep associated with its dynamic features, such as bundle resolution and wiring, which can complicate for teams unfamiliar with its runtime behaviors. OSGi's use in new greenfield projects has declined in favor of the (JPMS), which offers simpler static modularity without the overhead of OSGi's full dynamic capabilities. This shift reflects broader trends toward standardized, less complex module systems in modern Java ecosystems, though OSGi continues to be maintained by the with ongoing , including work on Core Release 9. OSGi's success is particularly evident in long-term maintenance of legacy systems, such as those in , where early adopters utilized it for modular architectures over two decades. The technology demonstrates enduring value in sectors requiring minimal disruption during evolution, with persistent use in and distributed systems.

References

  1. [1]
    What Is OSGi? | The Eclipse Foundation
    OSGi (Open Service Gateway Initiative) is a modular approach and specification that allows developers to create robust, highly decoupled and dynamic …
  2. [2]
    Architecture | The Eclipse Foundation - OSGi
    OSGi technology is a set of specifications that define a dynamic component system for Java. These specifications enable a development model
  3. [3]
    OSGi Alliance to Transition to Eclipse Foundation - InfoQ
    Nov 16, 2020 · The OSGi Alliance was founded in March 1999 in order to provide a modular component-based runtime for Java, back when Java 1.2 was released.
  4. [4]
    Announcement of Transition to Eclipse Foundation - OSGi Blog
    Oct 19, 2020 · The OSGi Board of Directors has reached an agreement with the Eclipse Foundation to establish an Eclipse OSGi Working Group which will be the ...Missing: history | Show results with:history
  5. [5]
    OSGi Specifications
    Release 8. OSGi Core Release 8 Specification (pdf) · OSGi Compendium Release 8 Specification (pdf) · OSGi Compendium Release 8.1 Specification (pdf). Release 7.
  6. [6]
    OSGi Core Release 8 is now final and published
    Dec 9, 2020 · The specifications, reference implementations, and compliance tests for OSGi Core Release 8 have been approved as final by the members of ...
  7. [7]
    OSGi Compendium Release 8
    OSGi Compendium Release 8 covers architecture, distribution service properties, HTTP service, device access, and device driver services.
  8. [8]
    Modularity | The Eclipse Foundation - OSGi
    What is OSGi? Documentation · Specification Project · Technology Project · Architecture · Complexity, Modularity and Business · Modularity · Blog. Toggle ...
  9. [9]
    OSGi Working Group Charter | The Eclipse Foundation
    The OSGi Specification Project is an open source initiative to create software specifications, implementations of those specifications, and Technology ...
  10. [10]
    OSGi RFPs and RFCs now accessible live to everyone
    Aug 8, 2013 · Every OSGi specification is developed in an RFC document in one of the OSGi expert groups: CPEG, REG or EEG. Before an RFC is developed however ...
  11. [11]
    OSGi Specs and RFCs - eclipse - Stack Overflow
    Aug 23, 2010 · Assuming the RFP is accepted, the relevant Expert Group develops Requests for Comments (RFCs), which define the technical solution to the RFP.
  12. [12]
    OSGi Specification License, Version 2.0 - OSGi Core 7
    OSGi Alliance (OSGi) hereby grants you a fully-paid, non-exclusive, non-transferable, worldwide, limited license (without the right to sublicense)
  13. [13]
    [PDF] Semantic Versioning - OSGi Docs
    The OSGi Alliance recommends the versioning of exported packages. These versions should reflect the evolution of these packages. For this reason, a change ...Missing: timeline | Show results with:timeline
  14. [14]
    Using the OSGi Compliance Tests - Apache Felix
    The OSGi Alliance provides Apache committers access to its Compliance Tests (CT). This page describes how to get access to the CTs and how to use them with ...Missing: TCK | Show results with:TCK
  15. [15]
    OSGi® Specification Project | projects.eclipse.org
    OSGi® specifications enable the development, deployment and management of embedded, server-side, and cloud-native applications using software modularity to ...Missing: definition | Show results with:definition
  16. [16]
    OSGi Working Group - GitHub
    The OSGi Working Group drives the evolution and broad adoption of software technologies derived from or related to the OSGi Specification Project.Missing: process | Show results with:process
  17. [17]
    Update on the OSGi Working Group
    Mar 16, 2021 · For the time being, we have adopted the vanilla Eclipse Specification Process as suggested by the Specification Committee. All the specification ...
  18. [18]
    Getting Started With OSGi | The Eclipse Foundation
    What is OSGi? OSGi (Open Service Gateway Initiative) is a modular approach and specification that allows developers to create robust, highly decoupled and ...
  19. [19]
    3 Module Layer - OSGi Core 7
    major - Changes for an incompatible update for both a consumer and a provider of an API. minor - Changes for a backward compatible update for a consumer but not ...
  20. [20]
    [PDF] OSGi Service Gateway Specification Release 1.0
    OSGi Service Gateway Specification. Release 1.0. May, 2000. Copyright © The Open Services Gateway Initiative (2000). All Rights Reserved. Implementation of ...
  21. [21]
    [PDF] OSGi Service Platform Release 2 Specification
    Oct 2, 2001 · The Specification Process. Within the OSGi, specifications are developed by Expert Groups (EG). If a member company wants to participate in ...Missing: RFP | Show results with:RFP
  22. [22]
    [PDF] OSGi Service Platform
    Oct 4, 2010 · ... 3. OSGi Service-Platform Release 3 iii-588. LEGAL TERMS AND CONDITIONS. REGARDING SPECIFICATION. Implementation of certain elements of the Open ...
  23. [23]
    [PDF] OSGi Service Platform Release 4, Core Specification Version 4.0.1
    Jul 14, 2006 · The OSGi Alliance also grants you a perpetual, non-exclusive, worldwide, fully paid-up, royalty free, limited license (without the right to ...
  24. [24]
    [PDF] OSGi Service Platform Release 4 Service Compendium Version 4.2
    “OSGi Name Space” shall mean the public class or interface declarations whose names begin with “org.osgi" or any recognized successors or replacements thereof.
  25. [25]
    [PDF] OSGi Service Platform Release 4 Core Specification Version 4.2
    May 4, 2009 · An implementation of the Specification must not claim to be a compliant implementation of the Specification unless it passes the OSGi Alliance.
  26. [26]
    [PDF] OSGi Core Release 5
    Jan 10, 2013 · OSGi Alliance (“OSGi”) hereby grants you a fully-paid, non-exclusive, non-transferable, worldwide, limited license.
  27. [27]
    [PDF] OSGi Enterprise Release 5
    This specification is based on OSGi Core Release 5. The specification combines previously pub- lished, as well as new, OSGi services that address the common ...
  28. [28]
    [PDF] OSGi Core
    Jun 6, 2014 · The OSGi Core Release 6 mostly extends the existing APIs into new areas. The few modifications to existing APIs are backward compatible so ...<|separator|>
  29. [29]
    [PDF] OSGi Compendium
    Jul 6, 2015 · This document is the Compendium Specification for the OSGi Compendium Release 6. 1.2.1. OSGi Core Release 6. This specification is based on ...
  30. [30]
    [PDF] OSGi Core
    Apr 7, 2018 · ... Alliance was founded in March 1999. Its mission is to create open specifications for the network delivery of managed services to local ...
  31. [31]
    112 Declarative Services Specification - OSGi Compendium 7
    This model simplifies the task of authoring OSGi services by performing the work of registering the service and handling service dependencies.
  32. [32]
    1 Introduction - OSGi Core 8
    The OSGi™ Alliance was founded in March 1999. Its mission is to create open specifications for the network delivery of managed services to local networks ...
  33. [33]
    [PDF] OSGi Core
    Oct 8, 2020 · The Framework manages the installation and update of bundles in an OSGi en- vironment in a dynamic and scalable fashion. To achieve this, it ...
  34. [34]
    Semantic Versions - OSGi Docs
    API providers are compatible with exporters that have the same major and minor version number. For example, 1.2 is backward compatible with 1.1 for consumers ...Missing: cycle | Show results with:cycle
  35. [35]
    Explore Our Members - Eclipse OSGi | The Eclipse Foundation
    Join the world's leading technologists and open source leaders at Eclipse Foundation events to share ideas, learn and collaborate. View Events. Back to the top ...Missing: website | Show results with:website
  36. [36]
    OSGi Working Group | The Eclipse Foundation
    Some Eclipse Foundation pages use cookies to better serve you when you return to the site. You can set your browser to notify you before you receive a cookie or ...OSGi DocsGetting startedAbout UsOSGi technologyArchitecture
  37. [37]
    2 Security Layer - OSGi Core 8
    ### Summary of Security Layer, Permissions, and Protection in OSGi Core 8
  38. [38]
    3 Module Layer - OSGi Core 8
    Summary of each segment:
  39. [39]
    4 Life Cycle Layer - OSGi Core 8
    Summary of each segment:
  40. [40]
    5 Service Layer - OSGi Core 8
    ### Summary of OSGi Service Layer (OSGi Core 8)
  41. [41]
    8 Framework Namespaces Specification - OSGi Core 7
    The Import-Package header and DynamicImport-Package headers are represented as a Bundle Requirement for each of their clauses. The Export-Package header is ...
  42. [42]
    7 Bundle Wiring API Specification - OSGi Core 7
    For example, an Export-Package clause is a capability and an Import-Package clause is a requirement. During the resolving phase the requirements are resolved to ...
  43. [43]
    58 Resolver Service Specification - OSGi Core 7
    This specification therefore provides the Resolver service, a service that can be the base for provisioning, deployment, build, and diagnostic tooling.
  44. [44]
    Bundle Headers Reference - OSGi Docs
    OSGi bundle headers are reserved names in the OSGi specification, such as Bundle-ActivationPolicy, Bundle-Activator, Bundle-Category, and Bundle-Classpath.
  45. [45]
  46. [46]
  47. [47]
  48. [48]
  49. [49]
  50. [50]
  51. [51]
  52. [52]
  53. [53]
    58 Resolver Service Specification - OSGi Core 8
    For OSGi framework resolvers, the Resolve Context must understand and implement a part of the OSGi framework namespaces. With the Resolver service, a management ...
  54. [54]
  55. [55]
  56. [56]
  57. [57]
  58. [58]
  59. [59]
  60. [60]
  61. [61]
  62. [62]
  63. [63]
    5 Service Layer - OSGi Core 7
    A service is a normal Java object that is registered under one or more Java interfaces with the service registry. Bundles can register services, search for them ...
  64. [64]
  65. [65]
  66. [66]
  67. [67]
  68. [68]
  69. [69]
    101 Log Service Specification - OSGi Compendium 7
    This specification defines the methods and semantics of interfaces which bundle developers can use to log entries and to retrieve log entries.
  70. [70]
    104 Configuration Admin Service Specification - OSGi Compendium 7
    The Configuration Admin service is an important aspect of the deployment of an OSGi framework. It allows an Operator to configure deployed bundles.
  71. [71]
    102 Http Service Specification - OSGi Compendium 8
    The Http Service supports two standard techniques for this purpose: Registering servlets - A servlet is a Java object which implements the Java Servlet API.
  72. [72]
    113 Event Admin Service Specification - OSGi Compendium 7
    The Event Admin service provides inter-bundle communication using a publish/subscribe model, allowing bundles to publish events and handlers to subscribe to ...
  73. [73]
    Package org.osgi.service.packageadmin
    Interface Summary. ExportedPackage, Deprecated. The PackageAdmin service has been replaced by the org.osgi.framework.wiring package.
  74. [74]
    9 Start Level API Specification - OSGi Core 7
    This specification describes how to enable a management agent to control the relative starting and stopping order of bundles in an OSGi framework.
  75. [75]
    1 Introduction - OSGi Compendium 8
    This specification is based on OSGi Core Release 8. This specification can be downloaded from: https://docs.osgi.org/specification/ · ¶1.2.2 Component Versions.
  76. [76]
  77. [77]
    121 Blueprint Container Specification - OSGi Compendium 7
    The Blueprint Container represents the activities of the Blueprint Extender, managing the construction and configuration of component instances within a bundle.
  78. [78]
  79. [79]
  80. [80]
    [PDF] OSGi Service Platform Release 4 Residential Specification Version 4.3
    “OSGi Name. Space” shall mean the public class or interface declarations whose names begin with “org.osgi" or any recognized successors or replacements thereof.
  81. [81]
    1 Introduction - OSGi Enterprise 7
    The Enterprise Specification includes the recommended specifications for a number of areas. Together they address use-cases found in the enterprise context and ...
  82. [82]
  83. [83]
    706 Push Stream Specification - OSGi Compendium 8
    The PushStream provides a powerful, flexible pipeline for event processing. The Push Stream API shares many concepts with the Java 8 Streams API, in particular ...
  84. [84]
    707 Converter Specification - OSGi Compendium 8
    ### Summary of Converter in OSGi Release 8 for Type Handling
  85. [85]
    Chapter 5. OSGi 4.2 Blueprint Container - Spring
    The OSGi 4.2 Blueprint Container, based on Spring DM, is a specification implemented by Spring DM 2.0, requiring OSGi 4.2. It is familiar to Spring DM users.
  86. [86]
    OSGi Blueprint Container Specification - IBM
    The OSGi Blueprint Container Specification defines a dependency injection framework for OSGi derived from the Spring Dynamic Modules project.
  87. [87]
    18 Developing OSGi Bundles for WebLogic Server Applications
    OSGi framework provides a secure and managed Java framework. You can configure and manage one or more instances of the framework and ensure persistence.
  88. [88]
    151 Whiteboard Specification for Jakarta™ RESTful Web Services
    Implementations of this specification will often be backed by existing servlet containers, such as the OSGi Http Whiteboard, or a Jakarta EE application server.
  89. [89]
    adobe/osgi-example-kubernetes - GitHub
    This installs the docker container as a deployment with one instance. Additionally it creates a service with a load balancer. Check the deployment worked.Missing: containerized bundles
  90. [90]
  91. [91]
    InfoQ: A comparison of OSGi and the Java 9 Java Platform Module ...
    Sep 29, 2016 · The article is well written and provides a clear understanding of the differences between OSGi and JPMS as it stands today. Looking forward to ...
  92. [92]
    [PDF] OSGi Enterprise
    Dec 7, 2018 · OSGi Alliance ("OSGi") hereby grants you a fully-paid, non-exclusive, non-transferable, worldwide, limited li-.
  93. [93]
  94. [94]
    Wrapping Libraries to OSGi Bundles - Bndtools
    This article details a simple and repeatable process to wrap arbitrary Java libraries as OSGi bundles, using bnd as a command line tool.
  95. [95]
    9.2. Converting a JAR Using Bnd | Deploying into Apache Karaf
    This section describes how to convert a vanilla JAR file into an OSGi bundle using the Bnd tool's wrap command. You can choose either to perform the conversion ...
  96. [96]
    OSGi – Benefits and Drawbacks - Mondula gmbh
    Feb 9, 2024 · OSGi is probably the only JVM-based technology allowing for hot code swapping and multi-tenancy with code in different versions.
  97. [97]
    Micronaut Framework vs OSGi | What are the differences?
    5. **Size and Footprint**: Micronaut applications have a smaller memory footprint and faster startup times due to its optimized design, while OSGi applications ...Missing: limitations apps
  98. [98]
    bnd - one tool to bnd them all! | bnd
    Bnd/Bndtools. Tooling to build OSGi bundles including Eclipse, Maven, and Gradle plugins.
  99. [99]
    Appendix C. Pax-Exam Testing Framework - Red Hat Documentation
    Pax-Exam is an automated testing framework for running tests in an OSGi container. Consider the manual steps that would be needed to run tests in an OSGi ...
  100. [100]
    Apache Felix Framework
    The Felix Framework subproject is an implementation of the OSGi R8 core framework specification. Framework documentation. Apache Felix Framework Bundle Cache.
  101. [101]
    apache/felix-dev - GitHub
    The flagship project is the Apache Felix Framework which implements the OSGi Core R7 specification. The /framework directory contains the source and build ...<|separator|>
  102. [102]
    Eclipse Equinox | projects.eclipse.org
    Eclipse Equinox is an OSGi implementation and the OSGi framework for Eclipse, used for all major releases. It implements key services for running Eclipse.
  103. [103]
    OSGi Core R8 Specification Draft Available - Get Connected
    Mar 23, 2020 · The draft includes two new specifications for the Core Framework as well as a number of smaller improvements.
  104. [104]
    Knopflerfish OSGi - open source OSGi service platform. OSGi ...
    Welcome to the home of Knopflerfish, the leading universal open source OSGi Service Platform. Led and maintained by Makewave, Knopflerfish delivers ...Download · About · News · Documentation
  105. [105]
    About Knopflerfish 7 - an OSGi R7 distribution
    Knopflerfish 7 (KF7) is the next major release of Knopflerfish. KF7 is an implementation of the OSGi R7 specifications.Missing: R8 | Show results with:R8
  106. [106]
    Bndtools
    Bndtools uses the OSGi Resolver to create runtime assemblies, allowing us to concentrate on just the "top-level" bundles that comprise our application. The ...Bnd Manual · Getting Started · Tutorial · About OSGi
  107. [107]
    Developing OSGi-enabled Java EE Applications - Oracle Help Center
    GlassFish Server, built with OSGi, supports OSGi-enabled Java EE apps using the Apache Felix framework. OSGi applications are deployed as bundles, and Java EE ...
  108. [108]
  109. [109]
    Securing OSGi applications - IBM
    Securing OSGi applications is very similar to securing enterprise applications. For most security frameworks, no additional steps are required.Missing: features enhanced
  110. [110]
    Paremus Service Fabric - Bobsguide
    The Paremus Service Fabric, The Enterprise OSGi™ Application Platform, has been built with the future of IT runtimes in mind. Running on a Cloud of compute ...
  111. [111]
    Package com.prosyst.mprm.admin.osgi
    Encapsulates information for an event for change in some OSGi Device. OSGiDeviceListener. Applications interested in receiving events for changes in the OSGi ...
  112. [112]
    OSGi applications running in WebSphere Application Server - IBM
    Mar 3, 2025 · More support for: WebSphere Application Server ; Software version: 9.0, 8.5, 8.0, 7.0 ; Operating system(s): AIX, HP-UX, Linux, Solaris, Windows.
  113. [113]
    About the Eclipse Project
    Equinox. The Equinox project provides an implementation of the OSGi core framework specification, a set of bundles that implement various optional OSGi services ...
  114. [114]
    Overview - Apache Karaf
    Aug 7, 2021 · Apache Karaf is a modern polymorphic application container. Karaf can be used as a standalone container, supporting a wide range of applications ...
  115. [115]
    Distributed OSGi Reference Guide - Apache CXF
    The CXF DOSGi implementation provides a DSW (Distribution Software) implementation of Distributed OSGi. It is compatible with any Distributed OSGi Discovery ...
  116. [116]
    Red Hat Fuse
    Fuse enables you to build collaborative and agile Java applications using microservices and containers. Fuse packages together Apache Camel with ten other open ...
  117. [117]
    [PDF] ONOS Security and Performance Analysis: Report No. 1 | Open ...
    The ONOS subsystem is built on top of the Apache Karaf feature service, which in turn is built using the standard OSGi bundle management services. ... the raft ...
  118. [118]
    [PDF] OSGI BASICS
    BLUEPRINT. Specification of OSGi component framework. Specification managed by OSGi Aliance. Uses dependency injection. Designed to deal with the dynamic nature ...
  119. [119]
    An OSGi Based In-vehicle Gateway Platform Architecture for ...
    The platform improves both the extensibility of sensor by utilizing clustering methods and the interoperability by adopting open standard middleware.
  120. [120]
    Why standards matter in the IoT - Bosch Digital Blog
    The OSGi framework specifies a modular software architecture based on Java. Being modular means that applications are no longer treated as one single piece of ...
  121. [121]
    OSGi and Docker, a perfect team - Paul about software development
    May 7, 2015 · My question is how do bundles talk to each other in different containers using Docker/Kubernets? It is clear that inside an OSGi Application ...Missing: containerized | Show results with:containerized
  122. [122]
    Building Microservices in OSGi With the Apache Karaf Framework
    Oct 11, 2019 · In this article, we will demonstrate how we can get the best of both worlds and build a microservice-based system on top of the Apache Karaf framework.Osgi 101 · Microservices From The Osgi... · A Microservice-Based Osgi...<|separator|>
  123. [123]
    Java 9, OSGi and the Future of Modularity (Part 1) - InfoQ
    Sep 22, 2016 · JPMS aims to be simpler and easier to use than OSGi. However, making an existing non-modular product modular is the principal source of ...Missing: curve | Show results with:curve
  124. [124]
    Principles of OSGi - aQute
    For example, every release the OSGi Alliance has for the OSGi Framework requires Equinox and Felix to adapt their code bases to provide the new features. In ...