OSGi has two parts. The first part is a specification for modular components called bundles, which are commonly referred to as plug-ins. The specification defines an infrastructure for a bundle's life cycle and determines how bundles will interact. The second part of OSGi is a Java Virtual Machine (JVM)-level service registry that bundles can use to publish, discover and bind to services in a service-oriented architecture (SOA).
The work behind OSGi began in 1999 when embedded systems vendors and networking providers came together to create a set of standards for a Java-based service framework that could be managed remotely. OSGi was originally conceived to be a gateway for managing smart appliances and other Internet-enabled devices in the home. The gateway consisted of a Java software framework embedded in a hardware platform such as a cable modem or set-top box. The framework acted as the central message broker for the device on the home's local area network (LAN). The goal, in essence, was to create a standardized middleware for smart devices and make managing cross-dependencies easier for software developers.
See also: enterprise service bus