The OSGi industrial standard has been selected for the module system and service platform in order to guaranty a high degree of interoperability with other modelling tools.This choice deeply improves the modularity and the reliability of Keridwen as an IME, tailored or specific bundles being dynamically loaded at runtime. The OSGi specification facilitates a future deployment of Keridwen in a client-server or distributed approach.An OSGi framework (OSGi being an acronym for "Open Services Gateway initiative") is a module system and service platform for the Java programming language that implements a complete and dynamic component model. Applications or components (coming in the form of bundles for deployment) can be remotely installed, started, stopped, updated, and uninstalled without requiring a reboot; management of Java packages/classes is specified in great detail. Application life cycle management (start, stop, install, etc.) is done via APIs that allow for remote downloading of management policies. The service registry allows bundles to detect the addition of new services, or the removal of services, and adapt accordingly.The OSGi specifications are now used in applications ranging from mobile phones to the open source Eclipse IDE. Other application areas include automobiles, industrial automation, building automation, PDAs, grid computing, entertainment, fleet management and application servers. OSGI is today a reference standard in the industry; presents a stable specification and is largely used.Any framework that implements the OSGi standard provides an environment for the modularization of applications into smaller bundles. Each bundle is a tightly coupled, dynamically loadable collection of classes, jars, and configuration files that explicitly declare their external dependencies (if any). All OSGI framework are conceptually divided into the following areas:
- Bundles: Bundles are normal jar components with extra manifest headers.
- Services: The services layer connects bundles in a dynamic way by offering a publish-find-bind model for plain old Java Interfaces (POJI) or Plain Old Java Objects POJO.
- Services Registry: The API for management services (ServiceRegistration, ServiceTracker and ServiceReference).
- Life-Cycle: The API for life cycle management (install, start, stop, update, and uninstall) for bundles.
- Modules: The layer that defines encapsulation and declaration of dependencies (how a bundle can import and export code).
- Security: The layer that handles the security aspects by limiting bundle functionality to pre-defined capabilities.