La parte esencial de OSGi Service Platform define una plataforma de servicio segura y gestionada que se basa en Java™. Esta plataforma da soporte al despliegue de aplicaciones ampliables y descargables que se conocen como paquetes. La especificación define un modelo de seguridad, un modelo de gestión del ciclo de vida de aplicación, un registro de servicios, un entorno de ejecución y módulos.
La capa del entorno de ejecución especifica el entorno Java (por ejemplo, Java EE o Java SE) bajo el que se ejecuta un paquete. Para las aplicaciones OSGi que se ejecutan en WebSphere Application Server, no es necesario que especifique el entorno de ejecución.
La capa del módulo es el lugar donde la infraestructura OSGi procesa los aspectos modulares de un paquete. Los metadatos que permiten que la infraestructura OSGi procese el paquete se establecen en un archivo de manifiesto de paquete.
La capa de gestión del ciclo de vida de paquete de OSGi elimina el problema de la carga de clases Java y la excepción debida a clase no encontrada que se produce en tiempo de ejecución, en la que las clases dependientes no se puede cargar porque no se pueden encontrar. Cuando un paquete instalado se despliega en la infraestructura, primero la infraestructura resuelve todas sus dependencias declaradas. Si existen dependencias sin resolver, la infraestructura notifica estas dependencias y no inicia el paquete.
Las aplicaciones normalmente no necesitan proporcionar un activador de paquete. Pero si es necesaria una inicialización cuando se inicia o detiene el paquete, se puede crear un activador de paquete.
La capa de registro de servicios de OSGi da soporte intrínsecamente a una arquitectura orientada a servicios (SOA). Los paquetes publican servicios en el registro de servicios y otros paquetes pueden descubrir estos servicios a partir del registro de servicios.
Estos servicios son los medios principales de colaboración entre paquetes. Un servicio OSGi es un Plain Old Java Object (POJO), que se publica en el registro de servicios bajo uno o varios nombres de interfaz Java, con metadatos opcionales almacenados como propiedades personalizadas (pares nombre-valor). Un paquete de descubrimiento busca un servicio en el registro de servicios mediante un nombre de interfaz y luego puede filtrar los servicios utilizando las propiedades personalizadas.
Los servicios son totalmente dinámicos y generalmente tienen el mismo ciclo de vida que el paquete que los proporciona.