Ostro™ OS Architecture Overview🔗

This document gives an overview of the Ostro OS architecture and its main building blocks. Furthermore, the document briefly talks about how Ostro OS meets different end-user use-cases ranging from hacking to IoT product creation.

Ostro OS Characteristics🔗

In Ostro OS, there are four key characteristics that drive the architecture design:

  1. Ostro OS uses standard libraries and services: The building blocks used in Ostro OS are commonly used in many open-source projects and custom implementations are avoided to the extent possible. This has a big benefit as there is little porting or platform adaptation needed to get existing applications or services to run on Ostro OS; often times, all that’s needed is to create a manifest for your application.
  2. Ostro OS is built with security in mind: Security is critical for IoT and is a focus area in Ostro OS. The security design provides scalable options for security configurations in Ostro OS-based products. The security architecture is explained in more details in Ostro™ OS System and Security Architecture.
  3. Ostro OS is easy to customize: While Ostro OS comes pre-compiled (binaries and images), it can be customized to meet the diverse product needs of IoT applications. With the help of the Yocto Project build system used by Ostro OS, it is easy to customize the build and generated images that are finely tuned to meet your exact needs. Introduction to the Ostro™ Project and the links provided there are an excellent starting point to learn more about the Ostro OS extensive customization possibilities. These pre-compiled images are intended to expedite your development work and not intended for use in production systems.
  4. Ostro OS is pre-compiled and pre-configured: Ostro OS leverages the Yocto Project build system tools and is provided as a pre-compiled and pre-configured distribution specifically tuned for IoT device development. Generating and compiling your own Ostro OS image is very fast since the build system is configured to use the Shared State Cache (SSTATE) mechanism offered by the Ostro OS SSTATE server. In addition, pre-compiled reference images are available from the Ostro Project download server to get you started in no time.

Ostro OS Architecture Stack🔗

One way to describe Ostro OS architecture is to build a stack from the hardware platform up to an IoT Application layer. Such stack is illustrated here.

The following sections examine each layer in more details.

IoT Applications🔗

The IoT applications layer consist of all applications that use the underlying platform. Ostro OS itself currently does not implement any specific IoT use-cases via applications, but application sample recipes are provided to demonstrate the OS frameworks and services.

Programming Interfaces🔗

Ostro OS provides various application runtimes offering more flexibility and options to application developers to implement their IoT solution.

  • Soletta Project is an open-source framework for making IoT applications. The project provides libraries to make it quick and easy to write software for IoT devices. The applications can we written using flow-based programming (FBP) or more traditionally as C applications linking to Soletta’s C-based platform APIs.
  • Node.JS is a popular JavaScript runtime to run (IoT) web applications. Ostro OS provides the Node.JS runtime and selected JavaScript APIs (as Node.JS modules) to build IoT applications. The set of APIs includes, for example, a Javascript API for the Open Connectivity Foundation (OCF) specifications. The JavaScript API set is kept aligned with the API set provided by Soletta.
  • Ostro OS also provides support for the popular IoT-space development languages Python and Java* (OpenJDK8).

Frameworks🔗

Frameworks provide an abstraction to platform services, making application deployment easier. The Ostro Application Framework Ostro™ Application Framework provides tooling for application writers to get the applications running in an Ostro OS based image.

The application framework is simple and focused on how to start each application in its desired environment. It implements a systemd.generator that can generate a systemd service based on the application needs as defined in its manifest. Currently, the supported manifest keys will provide configuration options that will open the firewall ports, use the correct user and groups, sandbox in a container (if desired), and stitch the file system as desired by the application. This means applications may have their own file system view, with parts of the system being hidden or write-protected, and they may have a private network or even no network at all.

Ostro OS also pre-integrates IoTivity framework. IoTivity is an open-source project that implements the full OCF specification by Open Connectivity Foundation. This connectivity framework is also available from Soletta Project and Node.JS/iotivity-node.

Services🔗

The responsibility of system services is to bring the system up, manage connectivity and set up process’ inter-process communication (IPC). The components Ostro OS use are commonly found in many open-source OSes: systemd, ConnMan, BlueZ, D-Bus and others.

In addition to systemd and connectivity, Ostro OS comes with Software Update Mechanism for Ostro™ OS technology tailored for IoT products. This means efficient delivery of selected and quality assured software from a single, vendor controlled, stream. The update technology copes with the fast paced IoT environment and allows live updates, reducing downtime by only restarting needed services

Base Libraries🔗

Standard Linux base libraries are used in Ostro; the same libraries and utilities that are available in all major distributions.

The Yocto Project build system tools used in Ostro OS also makes it possible to easily extend the content of Ostro OS if there’s a need to add new libraries.

For example, while Ostro OS 1.0 is focused on headless use-cases and no graphic and multimedia libraries are enabled, one can use the Yocto Project build system tools to incorporate them to your product.

Linux Kernel and Hardware Adaptation🔗

The hardware board support packages (BSP) for Ostro OS run the Linux Kernel. The kernel provides the necessary drivers and hardware adaptation.

Sensors and connectivity are critical for IoT devices. Ostro OS reference Linux kernel configuration focuses on making as many sensors and connectivity peripherals available for the end-users and makers. In addition, a dedicated page for Hardware Compatibility that describes how various peripherals can be run with Ostro™ OS Supported Platforms is maintained.

Ostro OS Composition🔗

The Ostro OS is a composition of multiple Yocto Project build system metadata layers maintained in individual layer repositories. The layers used in Ostro OS are combined to form the ostro-os repo.

The following layer repositories are used in Ostro OS. The Board Support Package (BSP) layers used bring hardware adaptation and CPU architecure configuration for Ostro™ OS Supported Platforms.

Layer Repository Name Description
openembedded-core Core metadata and component recipes
meta-intel BSP layer for common IA platforms
meta-ostro Ostro OS distro metadata, configuration, and documentation
meta-ostro-fixes Ostro OS layer that is used to carry fixes to upstream layers
meta-ostro-bsp Ostro OS BSP configuration metadata
meta-edison-bsp BSP layer for Intel Edison (integrated via the meta-ostro-bsp layer)
meta-intel-iot-security Security building blocks: IMA, SMACK.
meta-appfw Ostro OS application framework recipes and sample applications
meta-openembedded Collection of OpenEmbedded layers
meta-oic IoTivity
meta-intel-iot-middleware Middleware components used in Intel IoT DevKit
meta-iotqa Ostro OS test tools
meta-iot-web Node.JS and OIC JavaScript APIs
meta-security-isafw Image Security Analysis framework gives offline tooling to analyze images
meta-yocto BSP layer for BeagleBone Black
meta-java Java support (openjdk8)
meta-soletta Soletta Project
meta-swupd Software update tooling

The Ostro OS distro configuration file (meta-ostro/conf/distro/ostro.conf) defines the global configuration of the OS. For example, it determines which components are being enabled/built by default (via DISTRO_FEATURES, PNBLACKLIST, and PNWHITELIST settings).

Ostro OS Development Workflows🔗

Ostro OS enables many options how to do hacking and/or IoT product development.

  1. Quick Prototyping: Using the pre-built development images found in Ostro Project download server it’s easy to get started with any of the Ostro™ OS Supported Platforms. Some of the image configurations also provide an environment to do quick prototyping with programming tools discussed in ‘Programming Interfaces’ above.
  2. Image Customization: Likely, the pre-built development images do not provide the desired content or configuration for products. However, the images can easily be customized to suit the needs as discussed on Building Ostro™ OS Images.
  3. Adding 3rd party content: For device makers it’s often necessary to bring in additional 3rd party libraries and product IoT applications while still keeping the base OS unchanged. Yocto Project extensible SDK (discussed below) built for Ostro OS tries to make that process easy.

Extensible SDK🔗

Using the Yocto Project extensible SDK built for Ostro OS makes it easy to add new applications and libraries to an image, modify the source for an existing component, test changes on the target hardware. Each Ostro OS build found in Ostro Project download server has an extensible SDK installer that is quick to download and install on user’s development PC.

The devtool is the main tool when using extensible SDK. With devtool user can add new recipes/content, e.g., from Node.JS NPM registry and have them installed in the image or modify kernel configuration options. To build the new components and new images, the Ostro OS pre-compiled SSTATE cache (including the cross-development toolchain) is used (as long as it’s valid).