Nerves systems provide the operating system, libraries and other tools for building firmware for specific hardware. The Nerves Core Team maintains a set of ports to widely available hardware. Nerves runs on many other boards as well and those ports are frequently derived from the official systems.
Nerves systems releases had previously been announced as part of the core Nerves tooling releases, but they change more frequently, so my plan is to announce to this topic instead.
FAQ on Nerves Releases
- How often are Nerves system releases made?
We follow the release cadence of the Buildroot project. Buildroot makes a release every 3 months. This allows us to keep up with security and bug fixes for the non-Elixir infrastructure in Nerves without being overly burdensome. Sometimes Buildroot makes a patch release to fix a particularly bad security issue or bug. We follow suit even if that issue is unlikely to affect Nerves users.
- Why don’t Nerves systems follow semantic versioning?
Given that Buildroot contains 1000s of packages, its near impossible to know whether a version bump in one is breaking or not and probably not helpful. We’ve settled on the following approach and admit that it is imperfect:
- Major version updates result in firmware incompatibilities that make over-the-air updates difficult or impossible. Examples include big changes to filesystem layout or changing bootloaders.
- Minor version updates are made for each Buildroot release. Buildroot version numbers have the form yyyy.mm and don’t convey any information about release compatibility. It is good practice to review the Buildroot release notes especially for changes to C libraries and packages that you use. We also schedule Erlang major version bumps and Linux kernel minor version bumps to coincide with these releases.
- Patch version updates include all of the other changes we make between Buildroot releases. We try to keep these minor so that it’s not risky to upgrade patch versions, but they may exceed the normal scope of semantic version patches.
Because of this, many people lock their Nerves System dependency down very tightly in their
mix.exs deps. We recommend this practice. Please do follow updates to your system to capture security fixes.
- How does the core team decide which boards to support?
It’s our policy to make official releases for widely available hardware that has large open-source communities providing support. People have ported Nerves to many other platforms and some have made their ports public. It is a non-trivial task to maintain a port over the long term. If you are in need of a port for a board that the core team does not support, it’s worth posting to the forum to see if someone has made one and is willing to share.