La partie centrale d'OSGi Service Platform définit une plateforme de services sécurisée et gérée qui s'appuie sur Java™. Cette plateforme prend en charge le déploiement d'applications extensibles et téléchargeables appelées bundles. La spécification définit un modèle de sécurité, un modèle de gestion du cycle de vie des applications, un registre de services, un environnement d'exécution et des modules.
La couche d'environnement d'exécution spécifie l'environnement Java (par exemple Java EE ou Java SE) dans lequel s'exécute un bundle. Pour les applications OSGi qui s'exécutent dans WebSphere® Application Server, il n'est pas nécessaire de spécifier l'environnement d'exécution.
La couche de modules correspond à l'emplacement où l'infrastructure OSGi traite les aspects modulaires d'un bundle. Les métadonnées qui permettent àl'infrastructure OSGi de traiter le bundle sont définies dans un fichier manifeste de bundle.
La couche de gestion du cycle de vie des bundles dans OSGi élimine le problème lié au chargement des classes Java ainsi que l'exception signalant que la classe est introuvable lors de l'exécution, selon laquelle les classes dépendantes ne peuvent pas être chargées car elles sont introuvables. Lorsqu'un bundle installé est déployé dans l'infrastructure, cette dernière résout d'abord toutes ses dépendances déclarées. S'il existe des dépendances non résolues, l'infrastructure les signale et ne démarre pas le bundle.
En général, les applications n'ont pas besoin de fournir un activateur de bundle. Toutefois, si l'initialisation est requise lorsque le bundle démarre ou s'arrête, un activateur de bundle peut être créé.
La couche de registre de services dans OSGi prend en charge l'architecture orientée services (SOA) intrinsèquement. Les bundles publient les services dans le registre de services et d'autres bundles peuvent détecter ces services à partir du registre de services.
Ces services constituent la principale méthode collaboration entre les bundles. Un service OSGi est un objet POJO (Plain Old Java Object), publié dans le registre de services sous un ou plusieurs noms d'interface Java, avec des métadonnées facultatives stockées sous forme de propriétés personnalisées (paires nom-valeur). Un bundle de reconnaissance recherche un service dans le registre de services en fonction d'un nom d'interface, puis peut potentiellement filtrer les services à l'aide des propriétés personnalisées.
Les services sont intégralement dynamiques et ont généralement le même cycle de vie que le bundle qui les met à disposition.