Written by Chris Friedt, Zephyr LTS V2 Release Manager
Well here we are – almost exactly 2 ½ years since the Zephyr Long Term Support (LTS) V1.
In that time, we were faced with (and continue to struggle through) a global pandemic. We remember the loved ones we lost. We continue to pull ourselves out of a global recession. We witnessed (and took part in) uprisings throughout the world against racial discrimination and tyrannical governments. We celebrated with Kamala Harris – the first female, black, and Asian Vice President of the United States! Private “enterprise” has taken off into space along with Captain Kirk!
In what seems like the blink of an eye, Linux has turned 30 and also has gone where no penguin has gone before. Some may forget that the Zephyr Real-Time Operating System went to space too (albeit under a different name).
Meanwhile, here on Earth, the Zephyr Project received 26,845 commits, 1,764,230 lines of code added and published 10 tagged releases since the LTS V1.
Our contributing community continues to grow – if you haven’t met our Embla Flatlandsmo our 1000th contributor you can do so here. Numerous Zephyr-based products have been launched (one day I would like to know just how many). Companies have been formed around Zephyr and many of them contribute back to the Zephyr Project on GitHub.
Zephyr is now a common theme at technical conferences:
- Of course, the very first Zephyr Developer Summit was held this year
- Open Source Summit featured several Zephyr-related talks
- At Linux Plumbers Conference, Zephyr was a consistent theme in both the IoT Micro-conference as well as the Refereed Track
- At the Embedded Linux Conference, we had a live demonstration of the Zephyr RTOS, broadcast across the globe, going from 0 to “Hello, world!” in 1 minute!
Let’s take a quick look at some of the changes that have enabled Zephyr’s success.
What’s New in LTS V2
In September, when we said that this is the biggest release of Zephyr ever, we weren’t kidding! Below are some of the highlights extracted from the complete v2.7.0 ChangeLog.
- Zephyr SDK users should adopt the new Zephyr 0.13.1 SDK release
- The new SDK includes
Major enhancements with this release include
- Bluetooth Audio, Direction Finding, and Mesh improvements
- Support for Bluetooth Advertisement PDU Chaining
- Added support for armclang / armlinker toolchain via toolchain abstraction
- Added support for MWDT C / C++ toolchain via toolchain abstraction
- Update to CMSIS v5.8.0 (Core v5.5.0, DSP v1.9.0)
- Support for M-Profile Vector Extensions (MVE) on ARMv8.1-M
- Improved thread safety for Newlib and C++ on SMP-capable systems
- IEEE 802.15.4 Software Address Filtering
- New Action-based Power Management API
- USB Device Framework now includes all Chapter 9 defines and structures
- Generic System Controller (syscon) driver and emulator
- Linker Support for Tightly-Coupled Memory in RISC-V
- Additional Blocking API calls for LoRa
- Support for extended PCI / PCIe capabilities, improved MIS-X support
- Added Service Type Enumeration (STE) with mDNS / DNS Service Discovery
- Added Zephyr Thread Awareness for OpenOCD to West
- EEPROM now can be emulated in flash
- Added both Ethernet MDIO and Ethernet generic PHY drivers
Growth Since LTS V1
Since LTS 1.14.0, the number of unique contributors to the Zephyr Project has nearly tripled going from 500 to 1384. Zephyr is now supported on more than twice as many boards, an increase from 160 to 400, and now runs on 12 different architectures (counting ARM cortex-a, cortex-r, and ARC64). Our peak commit velocity has nearly doubled from 1.4 to 2.5 commits per hour.
Zephyr’s team of maintainers has doubled from approximately 25 to 50 and our team of collaborators has nearly tripled from 30 to 81.
The total number of distinct areas (subsystems, OS features, etc) requiring maintainership in Zephyr has increased from 80 to 113, and there are no signs of slowing down.
|1.14.0 (LTS V1)||2.7.0 (LTS V2)|
|Commit Velocity||1.4 [commits / hr]||2.5 [commits / hr]|
|# of Maintainers||~25||50|
|# of Collaborators||~30||81|
|# of Areas||~80||113|
Major Enhancements Since LTS V1
Most of our community members have eagerly adopted tagged releases, but for companies who have based products on the LTS V1 release, there have been a tremendous number of major enhancements since then.
- The kernel now supports both 32- and 64-bit architectures
- We added support for SOCKS5 proxy
- Introduced support for 6LoCAN, a 6Lo adaption layer for Controller Area Networks
- We added support for Point-to-Point Protocol (PPP)
- We added support for UpdateHub, an end-to-end solution for over-the-air device updates
- We added support for ARM Cortex-R Architecture
- Normalized APIs across all architectures
- Expanded support for ARMv6-M architecture
- Added support for numerous new boards and shields
- Added numerous new drivers and sensors
- Added BLE support on Vega platform
- Memory size improvements to Bluetooth host stack
- We added initial support for 64-bit ARMv8-A architecture
- CANopen protocol support through 3rd party CANopenNode stack
- LoRa support was added along with the SX1276 LoRa modem driver
- A new Zephyr CMake package has been introduced
- A new Devicetree API which provides access to virtually all DT nodes and properties
- The kernel timeout API has been overhauled
- A new k_heap/sys_heap allocator, with improved performance
- Zephyr now integrates with the TF-M (Trusted Firmware M) PSA-compliant framework
- The Bluetooth Low Energy Host now supports LE Advertising Extensions
- The CMSIS-DSP library is now included and integrated
- Introduced initial support for virtual memory management
- Added Bluetooth host support for periodic advertisement and isochronous channels.
- Added a new TCP stack which improves network protocol testability
- Introduced a new toolchain abstraction with initial support for GCC and LLVM/Clang
- Moved to using C99 integer types and deprecate Zephyr integer types
- Introduced support for the SPARC architecture and the LEON implementation
- Added Thread Local Storage (TLS) support
- Added support for per thread runtime statistics
- Added support for building with LLVM on X86
- Added new synchronization mechanisms using Condition Variables
- Add support for demand paging, initial support on X86
- Logging subsystem overhauled
- Added support for 64-bit ARCv3
- Split ARM32 and ARM64, ARM64 is now a top-level architecture
- Added initial support for Arm v8.1-m and Cortex-M55
- Removed legacy TCP stack support which was deprecated in 2.4
- Tracing subsystem overhaul / added support for Percepio Tracealyzer
- Device runtime power management (PM) completely overhauled
- Automatic SPDX SBOM generation has been added to West
- Added an example standalone Zephyr application
Areas to Improve
New technical features and enhancements are proposed every day. However, it’s also important to periodically step back and look at how efficiently our wheels are turning as an organization. At the request of our valued community members, several areas have been tagged for improvement.
- We need more Collaborators and Maintainers (Reviewers) in order to match our growth
- More reviewers means less time in review for each PR, on average
- Some Maintainers oversee multiple areas, giving them less time to focus
- We want you! (if you have what it takes)
- Technical expertise, patience, time, and a good track-record of contributing
- See Project Roles for Maintainer responsibilities
- Record and publish Zephyr commit statistics similarly to the Linux kernel
- Use a finer granularity of permissions on GitHub (currently in progress)
- Provide a qualification process and rolodex of Zephyr consultants
Looking to the Future
There are currently 107 RFC tickets open for virtually every kind of enhancement. Below are just a few that I am personally quite excited for!
- native_posix board support for macOS
- A sensor and message-bus framework (based on Android’s CHRE)
- A generic State Machine Framework
- Addition of a Pin Control API and Devicetree bindings
- A USB-C Driver Framework (based on the ChromeOS stack)
- Unified framework for multiple clock sources, domains, and timer resolutions
- Multiple network interface auto-configuration via Devicetree
- Improved support for multiple radio devices and wireless coexistence
- Improved Language and Runtime Support: MicroPython, C++, Rust, eBPF
- Improved support for ISO C, C++, and POSIX standards
- Additional support for Remote Procedure Call frameworks like gRPC and Thrift
Of course, one of the greatest facets of Zephyr’s future is the community, and we welcome all of our future community members with open arms. For those new to Zephyr, the best place to begin is the Zephyr Getting Started Guide. At any time, please feel free to reach out to us on Discord to chat.
Every second of every day, millions of Zephyr-based Internet-enabled devices wake up, process a few bytes of data, resonate at GHz frequencies, and then quietly go back to sleep, consuming precious micro-amps of battery power. While others, at the opposite end, never get to sleep at all and process immense payloads in custom hardware accelerators in some of the world’s largest data centers.
This is our community. We scale. We solve categorically hard problems. We hold each other to high standards. We help one another through thick and thin, and in doing so, we are able to achieve the most incredible things!
Today, I am very happy to announce the release of Zephyr LTS V2. And to our community, I say thank you!