Author: Chris Friedt, Sofware Release Manager, Zephyr Project
Here we are – 2 ½ years since the release of Zephyr Long Term Support (LTS) V1.
In what seems like the blink of an eye, Linux has turned 30 and 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 ten tagged releases since the LTS V1.
Our contributing community continues to grow – 500 to 1384. 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 yearOpen Source Summit featured several Zephyr-related talksAt Linux Plumbers Conference, Zephyr was a consistent theme in both the IoT Micro-conference as well as the Refereed TrackAt 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 releaseThe new SDK includesinitial support for building Zephyr on macOSupdated Qemu version to 6.0.0updated to GCC 10.3updated to support ARC64improved C++ supportswitched to using newlib-nanoupdated to Yocto 3.2.3 baselineupdated OpenOCD snapshot
Major enhancements with this release include
Bluetooth Audio, Direction Finding, and Mesh improvementsSupport for Bluetooth Advertisement PDU ChainingAdded support for armclang / armlinker toolchain via toolchain abstractionAdded support for MWDT C / C++ toolchain via toolchain abstractionUpdate to CMSIS v5.8.0 (Core v5.5.0, DSP v1.9.0)Support for M-Profile Vector Extensions (MVE) on ARMv8.1-MImproved thread safety for Newlib and C++ on SMP-capable systemsIEEE 802.15.4 Software Address FilteringNew Action-based Power Management APIUSB Device Framework now includes all Chapter 9 defines and structuresGeneric System Controller (syscon) driver and emulatorLinker Support for Tightly-Coupled Memory in RISC-VAdditional Blocking API calls for LoRaSupport for extended PCI / PCIe capabilities and improved MIS-X supportAdded Service Type Enumeration (STE) with mDNS / DNS Service DiscoveryAdded Zephyr Thread Awareness for OpenOCD to WestEEPROM now can be emulated in flashAdded 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 from 500 to 1384. Zephyr is now supported on more than twice as many boards, increasing 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)Contributors5001384Boards160400Architectures812Commit Velocity1.4 commits per hour2.5 commits per hour# of Maintainers~2550# of Collaborators~3081# of Areas~80113
Major Enhancements Since LTS V1
Most of our community members have eagerly adopted tagged releases. Still, for companies that 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 architecturesWe added support for SOCKS5 proxyIntroduced support for 6LoCAN, a 6Lo adaption layer for Controller Area NetworksWe added support for Point-to-Point Protocol (PPP)We added support for UpdateHub, an end-to-end solution for over-the-air device updatesWe added support for ARM Cortex-R ArchitectureNormalized APIs across all architecturesExpanded support for ARMv6-M architectureAdded support for numerous new boards and shieldsAdded numerous new drivers and sensorsAdded BLE support on Vega platformMemory size improvements to Bluetooth host stackWe added initial support for 64-bit ARMv8-A architectureCANopen protocol support through 3rd party CANopenNode stackLoRa support was added along with the SX1276 LoRa modem driverA new Zephyr CMake package has been introducedA new Devicetree API which provides access to virtually all DT nodes and propertiesThe kernel timeout API has been overhauledA new k_heap/sys_heap allocator, with improved performanceZephyr now integrates with the TF-M (Trusted Firmware M) PSA-compliant frameworkThe Bluetooth Low Energy Host now supports LE Advertising ExtensionsThe CMSIS-DSP library is now included and integratedIntroduced initial support for virtual memory managementAdded Bluetooth host support for periodic advertisement and isochronous channels.Added a new TCP stack which improves network protocol testabilityIntroduced a new toolchain abstraction with initial support for GCC and LLVM/ClangMoved to using C99 integer types and deprecate Zephyr integer typesIntroduced support for the SPARC architecture and the LEON implementationAdded Thread Local Storage (TLS) supportAdded support for per-thread runtime statisticsAdded support for building with LLVM on X86Added new synchronization mechanisms using Condition VariablesAdd support for demand paging, initial support on X86Logging subsystem overhauledAdded support for 64-bit ARCv3Split ARM32 and ARM64, ARM64 is now a top-level architectureAdded initial support for Arm v8.1-m and Cortex-M55Removed legacy TCP stack support which was deprecated in 2.4Tracing subsystem overhaul / added support for Percepio TracealyzerDevice runtime power management (PM) completely overhauledAutomatic SPDX SBOM generation has been added to WestAdded 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) to match our growthMore reviewers mean less time in review for each PR; on averageSome Maintainers oversee multiple areas, giving them less time to focusWe want you! (if you have what it takes)Technical expertise, patience, time, and a good track record of contributingSee Project Roles for Maintainer responsibilitiesRecord and publish Zephyr commit statistics similar to the Linux kernelUse 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 about!
native_posix board support for macOSA sensor and message-bus framework (based on Android’s CHRE)A generic State Machine FrameworkAddition of a Pin Control API and Devicetree bindingsA USB-C Driver Framework (based on the ChromeOS stack)A unified framework for multiple clock sources, domains, and timer resolutionsMultiple network interface auto-configuration via DevicetreeImproved support for multiple radio devices and wireless coexistenceImproved Language and Runtime Support: MicroPython, C++, Rust, eBPFImproved support for ISO C, C++, and POSIX standardsAdditional 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!
We’re excited to announce the release of Zephyr LTS V2. And to our community, I say thank you!
These efforts are made possible by the dozens of enterprises that support the Zephyr project. To learn how your organization can get involved, click here