Programmers Guide

The guide is now based on Ref-OS-IoT, a new distribution of Linux operating system that replaces Ostro as the reference OS for the Intel Joule compute module. Ref-OS-IoT has many similarities with the Ostro distribution, as both are based on the Linux kernel and use Yocto Project tools. The OS version number naming convention is typically vYYMM with each version striving to continuously improve platform performance, stability and user experience while enabling top features requested by the community. The initial release was v1702 and was based on linux-yocto-4.4 kernel through to it's v1705 release. Now, with the latest v1706 release the kernel version has been updated to linux-intel-4.9.

This section focuses on advanced programming topics for the Reference Operating System for IoT.

OS Migration

Migrating to the Ref-OS-IoT distribution enables an accelerated update cadence and closer alignment between the OS image, the BIOS, support documentation and code samples.

We are very excited about this new model. Ref-OS-IoT enables these major features:

  • Linux kernel updated to linux-intel-4.9 in v1706; Linux kernel linux-yacto-4.4 in versions 1702-1705
  • Support for system standby in the S0i3 state when all devices are in a compatible state
  • MIPI CSI imaging and gstreamer vaapi support that enables the module ISP to simultaneously support a 5MP fixed focus and 13MP variable focus camera
  • Real-time H.264 encode for a 4K stream at 30fps, 4K HDMI output with audio, 1080p video streaming over Wi-Fi and UVC webcam up to 4K resolution
  • Audio support for HDA and raw I2S codecs, when devices are connected to module expansion board
  • XFCE graphical desktop shell provides a desktop-lite experience when using the micro HDMI connector
  • XFCE Remote Host via Type-C SSH Connection
  • A bundled GNU build toolchain to enable rapid prototyping
  • CDC USB serial console, Ethernet, and mass storage support via USB type-C cable and serial communication via Bluetooth
  • BIOS access password protection
  • Valgrind Tools for debugging
  • Supports Python, NodeJS, OpenJDK 1.8.0, and GCC as native application runtime environments (see section below)
  • Intel® Math Kernel Library for Deep Neural Networks, an open source performance library for Deep Learning applications
  • Supports Wi-Fi* Direct which allows two devices to establish a peer-to-peer connection using Wi-Fi* technology without the need for an intermediary access point such as a router

How to Determine the Version You Have

From the command line on your development platform, enter the command:

cat /etc/*-release

Information about the Reference Operating System for IoT build is displayed, as shown in the example output below.

PRETTY_NAME="Ref-Os-Iot 1.0+snapshot-20170216"

In the version line, look for the year and month, in this case 201702. This example shows the v1702 release.

Best Known Configuration (BKC)

The table below shows the firmware and operating system versions which can be considered together to be best-known configurations (BKC). Where known, incompatibilities between non-BKC software ingredients (for example, an older OS version used with the latest firmware version) will be stated in their associated release notes, but it is highly recommended to always use a BKC combination.

Firmware (BIOS) Version OS version (Ref-OS-IoT)
1J2 1706
1H3 1705
1F1 1704
1D1 1703
193 1702

Yocto Project

The Ref-OS-IoT is a Linux* distribution built with tools from the Yocto project. At some point in the process, the developer will want to create their own embedded images (OS + Applications) for testing on sample products.

See building a custom recipe for more information.


User space applications can be written in a number of programming languages as long as they are compatible with the final build process where the applications are bundled with the operating system to create a cohesive, embedded device software image.

Application runtime environments which are natively supported in Ref-OS-IoT include:

Most pre-compiled C and C++ applications can be expected to function, depending on the specific libraries used by the application.

For more complete information about compiler optimizations, see our Optimization Notice.