Announcing Device OS 1.0 and release guidelines for product creators


#1

Originally published at: https://blog.particle.io/2019/01/10/announcing-device-os-1-0-and-release-guidelines-for-product-creators/

Today, I’m proud to announce the release of Device OS v1.0.0, now available in the Web IDE and in the Device OS code repository.

Device OS is our lightweight operating system designed specifically for embedded IoT devices that makes possible many of the features that our customers have come to rely on: out-of-box security, seamless over-the-air (OTA) firmware updates, and an abstraction layer that makes sending a fleet-wide message as simple as writing Particle.publish().

Because product creators building with our hardware rely on Device OS to power their devices and keep their fleets online, we’re also updating our guidelines around versioning and release regularity that will make your upgrade path more clear.

Starting today, Device OS 1.0.0 is the default firmware version for new Web IDE projects — we encourage you to validate the release with your existing applications and upgrade accordingly.

The road to Device OS 1.0.0

At Particle we label releases of Device OS using the popular Semantic Versions scheme, or SemVer, to convey meaning about the underlying code in a release and what has been modified from one version to the next.

However, as we reflected on the versioning of Device OS releases over the last 1–2 years, we found that some of our choices, driven by an overabundance of caution, have made the current state of our codebase unclear. For instance:

  • Our previous Device OS default release was v0.7.0. Yet, Device OS and our Cloud APIs have been quite stable, with few if any breaking changes, and are being used by customers from 8,500 companies in production IoT products.
  • Our extreme caution resulted in a high number of release candidates (RCs), resulting in deferred adoption of new features and improvements by our customers.
  • Device OS support for Generation 2 and Generation 3 hardware were managed under the same minor release version (v0.8.0) despite being developed on separate branches and having meaningful differences in maturity.

What to expect moving forward

We’re changing our versioning policy with the release of Device OS v1.0.0, which builds on the v0.8.0 release line which has been in development for nearly 9 months. v1.0.0 includes all of the v0.8.0 new features and enhancements like Network and Cloud Diagnostics, and many bug fixes which you can read about here v1.0.0 Release Notes. We’ve been rigorously testing this release and we recommend all customers upgrade. However, as with all major Device OS releases, we recommend you validate the release with test devices before deploying it to your entire fleet.

Moving forward, we’re also committing to improvements to our Device OS development and release process, including:

  • 1. Full Use of SemVer. Expect that major (X.0.0), minor (1.Y.0), and patch (1.0.Z) releases mean what they’re intended to. Here are a few examples:
    • X.0.0 — a major release is one that includes non-backward compatible features or breaking changes.
    • 1.Y.0 — a minor release is one that includes new backward-compatible functionality.
    • 1.0.Z — a patch release is one that contains only backward-compatible bug fixes.
  • 2. Increased release frequency. We will focus on cutting more default releases more frequently, ensuring that our customers benefit sooner from the improvements that we make to Device OS. When necessary we will release listing known issues to maintain the rapid cadence.

Thank you for reading, and for supporting Particle to this exciting v1.0.0 milestone! To learn more about the technical changes in the release of Device OS 1.0.0, please visit our newly renamed GitHub repository for Device OS.

If you have questions about the latest release or the information in this post, share your thoughts in the Community Forum or send me a note.


#2

Can you please clarify Device OS versioning scheme for Gen 3 devices? Does version 1.0.0 support mesh networks as well?


#3

Great question! Gen 3 devices (Argon, Boron, Xenon) are not currently supported in Device OS 1.0.0. We’re managing them in a different firmware branch (mesh-develop) while we’re working on stabilizing the new platfroms. We will continue to use SemVer based on 0.8.x in the meantime. We’re hoping to merge Gen 3 devices into 1.x in the coming months, once Gen 3 hardware meets or exceeds the stability of Device OS on Gen 2 hardware.


#4

Congrats guys! A lot of hard work has gone into this.
I have been upgrading my application (a brewery controller) at every RC and stability has improved at every bump. Cheers!

I have two questions regarding support for modern compilers:

  • I compile with C++14 enabled for its better constexpr and lambda support. Any chance you’ll update your compiler flag in the makefile from std=gnu++11 to gnu++14 or even gnu++17?

  • I also compile with gcc 7 when cross-compiling for unit tests and for running our firmware in simulation as an executable. I know the firmware has been stuck on arm-eabi-gcc 5.3 for a long while. Any chance we can use gcc 7 soon? Its error messages are so much better.
    GCC 7 is warning about a few possible errors Particle’s code, you can view them here in our travis build:
    https://travis-ci.org/BrewBlox/brewblox-firmware/jobs/478106374#L647
    and after fixing the type mismatch error:
    https://travis-ci.org/BrewBlox/brewblox-firmware/jobs/478111284#L647
    Some of them seem to be worth a look into, like unexpected null arguments, misleading indentation and possibly truncating snprintf.