This proposal is now complete and has been submitted for a VOTE.
Mynewt is a real-time operating system for constrained embedded systems like wearables, lightbulbs, locks and doorbells. It works on a variety of 32-bit MCUs (microcontrollers), including ARM Cortex-M and MIPS architectures.
The goal of this proposal is to bring the Mynewt codebase (developed by Runtime, Inc.) into the Apache Software Foundation. Mynewt is designed to run constrained Internet of Things devices, where a small, real-time operating system is required.
It includes the following components:
- Real-time operating system kernel (Scheduler, Mutexes, Semaphores, etc.)
- Command line package management and build system
- Hardware Abstraction Layer unifying common MCU features (e.g. GPIOs, High Resolution Timers, PWM interfaces, UARTs, ADCs, etc.)
- Board Support Infrastructure, that defines the framework for building software for various board architectures.
Should this project be accepted into the incubator, Runtime, Inc. will assign the ASF a license to all source code developed to date and begin the development of an open source community around the project.
Mynewt has been developed solely by Runtime to date. We are a team of 5 software engineers, that really love writing embedded systems.
With the momentum behind the Internet of Things, there is an increasing need for standard open source software to help developers create connected devices. One area where there is a large need is an open-source, liberally licensed, community-driven RTOS (real-time operating system.)
Today, there are many RTOSes, the majority of which are provided by proprietary vendors and many of which are not permissively licensed or controlled by a single company. These restrictions create fragmentation, because either not everyone can afford to purchase the operating system or restrictions put on the OS's use (e.g. restricted to vendor-specific platforms), means that people using other processors cannot adopt it.
The lack of a standardized operating system creates fragmentation around everything above it. Because there is not a well adopted community driven operating system, people don't have a place to contribute back new drivers, or networking stacks. Additionally, there is constant work to port and maintain software across a myriad of different operating systems, all with slightly different APIs and interfaces.
In order for the industry to accelerate and keep up with the increasing complexity in these devices, it's important that an open-source community form and provide a RTOS effort that:
- Accepts community contributions and encourages code reuse
- Natively supports source package management, to allow for efficient redistribution and reuse of software across a broad swath of use cases (from wearables to industrial equipment)
- Supports all of the "new" protocol stacks required for IoT (e.g. Bluetooth, IPv6, etc.)
- Has drivers for all new chipsets, sensors, and other devices
The core of Mynewt has been designed to accommodate these requirements. It contains a small, pre-emptive RTOS core, that works on native (OS X, Linux) and Cortex platforms (and is easily portable to others), and standardized HAL and BSP interfaces.
It also provides a build and package management tool that allows developers to install, develop, and redistribute source packages. This tool allows developers to start with the core of the OS and its interfaces, and then download only the source packages that are needed to run their embedded project. This will allow the community to grow beyond just porting the core of the Mynewt system and extend to all of the necessary protocol stacks, drivers and sensor interfaces that a modern embedded developer will need.
In addition to the Mynewt core, there is active development around a set of commonly needed functionality when developing small embedded systems, including:
- A Flash Filesystem designed for small flashes, with large block sizes (very common in single chip designs)
- An Open Bluetooth stack with native support for prevalent modules
The core of the Mynewt Operating System is functional.
The goal is to have an initial release February, 2016. Between now and then, a number of things need to be finished:
- Improved HAL (Hardware Abstraction Layer)
- Regression Testing Framework
- Power Management Support in the OS
- Instrumentation Framework
- Log files
- Debugger Support for Embedded Platforms
- Support for more platforms (e.g. TI, Broadcom) and Cortex M* series processors.
Additionally, there are a number of other core services that need to be developed around the core operating system.
- Bluetooth LE and Wireless IP stacks
- Log structured flash filesystem
- Flash circular buffer stores
- Drivers for Sensors and Actuators
- Services to control motors, pumps, read accelerometers, heart rate sensors, etc.
- Core services for location and time
Initial development has been done at Runtime, however, Mynewt was intended to be released as an open source project from its inception.
Our goal during incubation is to develop a community around Mynewt. We fully intend this to be a community run and led effort. We believe that decisions should be made on the mailing list, and that core contributors (regardless of corporate affiliation) should be the ones who decide the future of the project.
We will work during the incubator to foster new contributors and grow the community beyond our company.
Right now, Mynewt is used by Runtime. Our goal is to expand this community as we develop, and release the operating system. There are a number of companies currently working to test and incorporate Mynewt into their products.
The core developers of Mynewt are at Runtime. The goal of the incubator is to grow that community beyond our company.
While there is not much software for constrained embedded environments within the ASF today, we believe that this is an important and growing area.
The ASF has advantages for projects in this space:
- The GPL (and LGPL) are profoundly impactful for physical products, as most constrained devices are linked into a single executable, meaning any proprietary device that includes GPL'd source code must release their software.
- This often contains information about proprietary hardware
- Most projects are either not wholly community driven and/or lack a clean IP trail.
The permissive licensing enables more groups (both open and proprietary) to participate in development, to grow the community/ecosystem, and to remix Mynewt components into new hardware and software designs.
Mynewt is a new real-time operating system without much adoption. At Runtime, we are committed to its development and our goal during the incubator is to grow the community and adoption around Mynewt.
Inexperience with Open Source
One of the members of the Runtime team is an emeritus member of the Apache Software Foundation. Another member has contributed extensively to Linux and FreeBSD. The other three members do not have experience with open source, but are curious.
Reliance on Salaried Developers
Today, Mynewt relies mostly on salaried developers for its existence. This is an issue we will look to address during the incubation period: we want to develop a strong community around Mynewt.
An Excessive Fascination with the Apache Brand
We like the Apache brand (it's a good brand!) However, we want to enter the ASF because:
- In order for an OS to be ultimately successful, it needs to be community driven
- We believe strongly in a community which is a meritocracy and think that the ASF has a proven, successful framework for managing such communities.
- The ASF has a strong track record in developing healthy communities that co-exist with commercial entities.
Documentation is available here: https://github.com/mynewt/documentation
We are actively working on documentation and expect it to improve dramatically within the next couple of weeks.
All source code is currently hosted by Runtime, Inc. on Github.
The source code can be found here:
The "tadpole" repository contains the Core of the Operating System and file layout. The "larva" repository contains the Core OS and all packages developed around that core. The "newt" repository has the build and package management tool that is used to stitch together and build new OS projects.
No external dependencies currently exist in the core OS; all code has been written by Runtime.
The board and microcontroller-specific support packages contain code from the various MCU vendors. This code has been ensured to be under either an Apache or BSD license.
We'd like to host the source code using Git.
- JIRA Project Mynewt (MYNEWT)
- Sterling Hughes (sterling at apache.org)
- William San Filippo (will at runtime.io)
- Christopher Collins (chris at runtime.io)
- Aditi Hilbert (aditi at runtime.io)
- Marko Kiiskila (marko at runtime.io)
- Justin Mclean (jmclean at apache.org)
- Jan Iversen (jani at apache.org)
- Runtime: Sterling Hughes, William San Filippo, Christopher Collins, Aditi Hilbert, Marko Kiiskila.
- Class Software: Justin Mclean
- Unaffiliated: Jan Iversen
- Marvin Humphrey
- Sterling Hughes
- Jim Jagielski
- Justin Mclean
- Greg Stein
- P. Taylor Goetz
- The Incubator PMC.