La OSGi Alliance (conosciuta come Open Service Gateway initiative), è un'organizzazione fondata nel 1999 da Ericsson, IBM, Oracle e altri. In seguito altri membri sono entrati a farne parte.
Il nucleo delle specifiche è un framework che definisce la gestione del modello del ciclo di vita del software, i moduli (chiamati bundle), un service registry e un ambiente di esecuzione. Partendo da questo Framework sono stati definiti un certo numero di OSGi Layer (strati), API e servizi.
Scopo del Framework OSGi
L'aumento della complessità in un prodotto software, sia esso embedded, client o server, richiede codice modulare ma anche sistemi che siano estensibili dinamicamente. Il framework OSGi si propone di implementare un modello a componenti completo e dinamico cioè quello che manca all'ambiente Java.
In realtà il linguaggio Java prevede alcuni meccanismi che consentono di realizzare un modello a componenti, ma si tratta comunque di soluzioni di basso livello con conseguente rischio di introdurre errori nel codice oltre a diventare una soluzione ad-hoc.
OSGi risolve molti dei problemi legati allo scarso supporto di Java nella modularità e nel dinamismo attraverso alcuni concetti fondamentali:
Definizione del concetto di modulo (bundle)
Gestione automatica delle dipendenze
Gestione del ciclo di vita del codice (configurazione e distribuzione dinamica)
In sintesi è possibile vedere la tecnologia OSGi come:
Un sistema modulare per la piattaforma Java
Un sistema dinamico, che consente l'installazione, l'avvio, lo stop e la rimozione dei moduli a runtime, senza quindi necessitare di riavvii.
Orientato ai servizi, i quali possono essere dinamicamente registrati ed utilizzati nella macchina virtuale Java.
I layer
Il Framework OSGi è distribuito su quattro layer:
L0: Execution Environment (ambiente di esecuzione): è la specificazione dell'ambiente Java (J2SE, CDC, CLDC, MIDP, ecc.).
L1: Modules: realizza il concetto di moduli (bundle) e controlla il collegamento tra di loro.
L2: Life Cycle Management (Gestione del ciclo di vita): gestisce il ciclo di vita di un bundle senza richiedere il riavvio della VM.
L3: Service Registry: fornisce un modello di cooperazione per i bundle.
Versioni delle specifiche
OSGi Release 1 (R1): maggio 2000
OSGi Release 2 (R2): ottobre 2001
OSGi Release 3 (R3): marzo 2003
OSGi Release 4 (R4): ottobre 2005 / settembre 2006
Core Specification (R4 Core): ottobre 2005
Mobile Specification (R4 Mobile / JSR-232): settembre 2006
OSGi Release 4.1 (R4.1): maggio 2007 (AKA JSR-291)
OSGi Release 4.2 (R4.2): settembre 2009 (AKA JSR-119)
Enterprise Specification (R4.2): Marzo 2010
OSGi Release 4.3 (R4.3): Aprile 2011
Core: Aprile 2011
Compendium and Residential: Maggio 2012
OSGi Release 5 (R5): Giugno 2012
Core and Enterprise: Giugno 2012
OSGi Release 6 (R6): Giugno 2015
Core: Giugno 2015
OSGi Release 7 (R7): Aprile 2018
Core and Compendium: Aprile 2018
OSGi Release 8 (R8): Dicembre 2020
Expert Groups
Esistono diversi gruppi responsabili della definizione delle specifiche:
Core Platform Expert Group (CPEG)
Mobile Expert Group (MEG)
Vehicle Expert Group (VEG)
Enterprise Expert Group (EEG)
Implementazioni
Esistono diverse soluzioni software, alcune commerciali, altre Open source che implementano le specifiche OSGi, tra le più conosciute: