Introducing resinOS 2.0, the host OS to run containers on embedded devices

We're very excited to introduce resinOS as a stand-alone OS, and release the 2.0.0-beta.1 version of our operating system today. resinOS 1.x has been running as a component of the resin.io platform for several years and has been an open source project for over a year, but hasn't been available in a form that can run without the rest of the resin.io platform - until now.

resinOS is a simple yet powerful open source operating system that brings standard Docker containers to embedded Linux devices and works on a wide variety of device types and architectures. Our goal is to make resinOS the operating system of choice for connected devices, the area of computing variously called the "Internet of Things," "Industrial Internet", "Edge Computing", "M2M" and more. Whatever you want to call it, we think Linux containers will fundamentally change the way software is developed for it, and with resinOS, we want to help accelerate that evolution.

resinOS was one of the first things we built in our quest to bring the tools of modern software development and deployment to the world of connected hardware. We realized that we needed an operating system optimized for the use case: a minimal OS ideal for running containers on embedded devices. Because of the complexity required to work across many different network conditions as well as on embedded boards with diverse architectures, boot procedures, kernel configurations, and so forth, existing cloud-focused container OS solutions did not fit our needs. At the same time, existing embedded operating systems and frameworks were not designed for constant updates or containers. We had to create something new from the best of both worlds.

So we created resinOS, an operating system tailored for containers and built for the embedded world, with Yocto, systemd, and Docker as our building blocks. resinOS supports almost 20 distinct device types (from Raspberry Pi and BeagleBone to high-end industrial boards), has a robust networking and provisioning story, emphasizes reliability over long periods of operation, and enables a productive developer workflow.

We've learned a lot running resinOS 1.x on thousands of devices in many different contexts, and with this release of resinOS 2.0.0-beta.1, we're introducing a number of new features to improve reliability and performance. Here are a few of the features that define the 2.0 line:

First, the root partition will now be read-only, allowing for more robust updates. A major cause of embedded device failure is corruption of the root partition. The resinOS 1.x line makes minimal writes to the root partition, but the last few items have been particularly difficult to move out. resinOS 2.0.0-beta.1 marks the completion of that work.

Second, AUFS replaces BTRFS as the data partition filesystem. We’ve seen the limitations of BTRFS in practice, and while we’ve mitigated many of them in the 1.x line, we are now convinced the future will be more straightforward by using AUFS as our go-to filesystem for the majority of storage. In particular, unlike BTRFS, AUFS has the ability to quickly and reliably report the amount of free space available, which will allow us to manage storage much more effectively.

Third, Network Manager replaces ConnMan. ConnMan has been a reliable connection manager for the 1.x line, but we’ve seen Network Manager improve a lot over the last few years, and its support for cellular connectivity is stellar. As such, we’ve decided to shift to Network Manager for the 2.x line. We will also be releasing support for Network Manager in resin-wifi-connect, so users of that project will inherit compatibility with both versions of resinOS.

We've also created the resin device toolbox (a.k.a. "rdt"), a collection of utilities to make booting devices with resinOS and creating resinOS-based application containers really straightforward.

resinOS 2.0.0-beta.1 and beyond will be available as a standalone operating system, with its own domain name, github organization, and release schedule. The resin.io platform will continue to use resinOS as a component, and we hope others beyond resin.io will make use of it, too. Our ambition is to make resinOS an open community focused on solving the challenges of running containers on diverse embedded devices.

A note to resin.io users: While resinOS 2.0.0-beta.1 will not immediately be available on the resin.io platform, we plan to make the option available within the next few months. We think that resinOS 2.x will Just Work for most users, but it does have some breaking changes. Thus, resinOS 1.x will remain the default option while resinOS 2.x is in the beta phase. When it's ready to move out of beta, resinOS 2.x will become the default, but with resinOS 1.x still available to resin.io users. As we migrate our users to resinOS 2.x, we will eventually retire the 1.x line and focus exclusively on 2.x and beyond. If you have a production deployment with resin.io that runs resinOS 1.x, nothing will immediately change for you, and we will be in contact to discuss migration options, most likely in early 2017.

Download resinOS here, contribute on github, and let us know what you think in our Forums. We look forward to working with you to grow and improve resinOS!

If you're looking to dig deeper into our source code, you can get started with the central repo that contains the docs and landing page, named resinos, follow up with the core yocto layer repo called meta-resin, look at the resin-device-toolbox, and gradually delve into the particulars of the repos of each device supported by resinOS, also under the resin-os github org.

We're incredibly excited about resinOS as an independent project, and about the new features in resinOS v2. We hope you stick with us, as the resinOS journey still has quite a few surprises in its future!

Edit: join the conversation on resinOS on Hacker News!

comments powered by Disqus
Terms of Service | Privacy Statement | Master agreement | Copyright 2019 Balena | All Rights Reserved