1. Le framework
OSGI inclut un grand nombre de services destinés à l'administrateur (interface d'administration des applications, gestion de configurations, d'événements, du déploie-ment, etc.). Ces services ciblent aussi les modules eux-mêmes
(gestion des préférences, entrées/sorties, journalisation, etc.) ou la détection d'équipements (fonctions plug and play). Des interfaces vers des systèmes extérieurs sont également prévues : HTTP (avec un moteur de
servlets), Universal Plug and Play, et DMT (Device Management Tree).
2. La machine virtuelle
Le choix de Java remonte à la création d'OSGI, en 1999. La JVM et les caractéristiques du langage interdisent certaines pratiques dangereuses en termes de programmation de systèmes dynamiques (pointeurs, dépassement de
buffer, etc.). Mais, aujourd'hui, .Net propose des attributs similaires. Donc, bien qu'il ne soit pas le fruit d'un processus ouvert, il apparaît comme un candidat possible.
3. L'annuaire de services
L'annuaire rend les services et leur état ' visibles ' pour les applications. Il sert aussi à gérer les dépendances lors de l'initialisation ou de l'arrêt d'une application. Par ce biais, les composants sont
notifiés à la volée du changement d'état d'un composant et du système, ou de la mise à disposition d'un nouveau service par une application qui démarre.
4. Les composants et leur cycle de vie
Les applications sont des archives Java (JAR) qui accèdent aux services du conteneur OSGI. Elles sont partagées pour garantir le maximum de dynamisme et une gestion optimum de la mémoire. Leurs services sont donc utilisables par des
composants de la plate-forme, mais aussi à l'extérieur. C'est le framework qui gère de façon déterministe les conflits de dépendance et de gestion des versions (plusieurs bundles pouvant nécessiter plusieurs
versions d'une même archive).

