OSGi and the software fabric for the Internet of Things
One of the most important challenges that need to be solved before the \Internet of Things" becomes a reality is the lack of a scalable model to develop and deploy applications atop such a heterogeneous collection of ubiquitous devices.
In practice, families of hardware devices or of software platforms have intrinsic characteristics that make it very cumbersome to write applications where arbitrary devices and platforms interact.
In this paper we explore constructing the software fabric for the "Internet of Things" as an extension of the ideas already in use for modular software development on the Web.
In particular, we suggest to generalize the OSGi model to turn the Internet of Things" into a collection of loosely coupled software modules interacting through service interfaces.
Since OSGi is Java-based, in the paper we describe how to use OSGi concepts in other contexts and how to turn non-Java capable devices and platforms into OSGi-like services.
By doing this, the resulting software fabric looks and feels like well known development environments and hides the problems related to distribution and heterogeneity behind the better understood concept of modular software design.
Despite its recent success for server-side application, OSGi was originally developed for managing software modules in embedded systems.
Taking advantageof recent developments that have extended OSGi to distributed environments (R-OSGi), we show how to turn small and ubiquitous devices into OSGi-like services.
Many aspects of the OSGi and R-OSGi model are perfectly matching the requirements of applications on the "Internet of Things". First, the devices involved in these networks form a heterogeneous set. Second, different hardware platforms and operating systems are available on the market and in use. Third are the abstractions provided by the Java VM that dramatically simplify the development of software for these devices.
Furthermore, ubiquitous networks often involve a large quantity of devices that have to be managed by the user. through the use of OSGi's module lifecycle management capabilities which allow consistent updating of software modules among all devices.
However, these devices are highly resource-constrained and thus often unable to run a Java virtual machine. They also often lack a TCP/IP interface and use other, less expensive communication protocols (e.g., Bluetooth, ZigBee),.
To accommodate these characteristics, in the paper we describe extensions to R-OSGi that:
(1) make communications to and from services independent of the transport protocol (in this paper Bluetooth and 802.15.4 )
(2) Implement an OSGi-like interface that does not require standard Java or no Java at all (demonstrated here for Java's CLDC , embeddedLinux, and TinyOS ), and
3) support arbitrary data streams to and from services.
Through these contributions, the resulting fabric for the "Internet of Things" can be treated and manipulated as an OSGi framework that is also applicable to small devices, alternative transport protocols, and non-Java applications. This means that we can treat devices as composable services with a standard interface.
Also, services can be discovered at runtime and changed dynamically and dataexchanges can use the Java types even for non-Java application. Finally, failures can be masked behind service withdrawal events.
What application developers see is a collection of software modules with a homogeneous interface rather than a collection of devices. In the paper we give an example of an extensible hardware platform (commercially available) where each hardware module is treated as an OSGi module, thereby proving the feasibility of the premise that we are pursuing.
To read this external content in full, download the complete paper from the author archives online.