Hello friends in the community. For those who don’t know me, I’m Jamie Smith. I worked on Mbed-based avionics code at USC Rocket Propulsion Lab for three years, and I helped send an Mbed board to space in 2019 (I still have it sitting on my desk). It’s been a fun few years, sharing our projects and helping each other out.
However, I think that it’s time to accept what we’ve all been fearing: It seems like the Mbed OS project is on life support. Most of the devs have been unresponsive for the last 6+ months, ever since the ARM restructuring and the project “pause” were announced. The only activity on the Mbed repo is merging bugfix patches from contributors: there’s no first-party development happening, and significant changes aren’t even being accepted. The silence gets more ominous every day, and I’m worried that someday ARM will declare Mbed a failed experiment and shut down this site entirely.
But they aren’t figuring on us! I’m sure there are quite a few of us like me and my lab, who have built large systems relying on Mbed OS, and are not ready to change all that just because ARM made an arbitrary decision to stop support. I believe that Mbed has a lot of great ideas, and I want to keep using it for a long time coming. To that end, I’d like to announce a project I’ve been working on for the last several months: a community edition/fork of Mbed OS.
Mbed OS Community Edition (CE)
Mbed CE is going to be very similar to Mbed OS, except that it can be managed by us in the community. We will be able to make our own changes and bugfixes, without waiting for ARM’s badly understaffed review process. We can also choose to make breaking changes that fix some of the long-standing issues with Mbed, if we so decide.
However, the hard part is that we’ll need to break Mbed’s current dependence on ARM infrastructure. Things like Mbed Studio, the online compiler, and Mbed’s CI system / device farm will not necessarily be available to us for much longer. While this might sound daunting, I have a plan for how we can replace these things, and have already made a lot of progress
First and foremost, I almost completely rewrote Mbed OS’s build system to improve its capabilities and bring it more inline with standard CMake. First of all, you can now have as many executables and libraries as you want in a single project, and Mbed OS will only be compiled once. Also, the new system also allows you to upload and debug code on a target using only CMake commands – no dragging files around, no futzing around with multiple commands. The need to use custom Mbed python programs has been nearly eliminated – they still exist under the hood but they are called automatically by CMake. Last but not least, the build system has official support and automatic config generation for two IDEs: VS Code and CLion.
Second, I wrote up a full set of docs for the new build system. This includes an example project, a toolchain install guide, an upload method guide, and the aforementioned IDE guides.
Lastly, I’ve set up a prototype Jenkins server which can run tests on actual hardware. It took a while to get things operational, but I am now able to get a good part of the Mbed OS test suite to automatically run and pass for one target (LPC1768). The next step would be to use the test shield PCB I designed to create test cases that test the hardware and buses on each MCU. Eventually, I want to scale this up into a device farm even bigger and better than what ARM has (I’ve heard it’s only 8 devices?)
This is a good start, but with the time I’m able to commit, I am not sure I’ll be able to take things much further on my own. This is enough for Mbed CE to live on its own as a fork, but not really for it to be a sustainable project. But I think that this has the potential to become a great resource to those of us with projects that depend on Mbed. I just need your help to make it happen.
Where can we take this project?
- Fix Bugs: There are hundreds of open Mbed OS bugs, especially if you count the ones ARM sneakily closed for no good reason. We can fix them, without being bogged down by such an arduous review process.
- Improve Docs: Mbed’s documentation is very spotty – some parts are good, other parts are very lacking. We can improve it, and centralize it into one place so people can actually find what they’re looking for.
- 3rd Party Dev Tools: I added support for a number of 3rd party flashing and debugging tools, but there are even more that we could support.
- New MCUs: Some MCU manufacturers, e.g. Microchip and Infineon, didn’t want to support their chips in Mbed, so ARM did not add them. We can add community ports for these missing MCUs.
What can I do?
- Cloud Services: We will need to create a cloud-hosted instance of Jenkins (or another CI server) to run our CI jobs. We may also need a website and/or a forum, if this one were to go down. I could really use some help on this, it’s not my area!
- Device Farm: Got space for a Raspberry Pi and a few Mbed boards to hook it to? You, yes, you, can be a part of the distributed CI system. We can send you the needed PCB, and you can set it up and watch the builds go by!
- Area Maintainer: We will need at least one or two people who are familiar with each area of Mbed who can review PRs and fix bugs in that part of the code. Like, I can work on low level Ethernet drivers, but what I know about Bluetooth could fit in a 128 byte string. If we work together, we could probably figure this out!
- Device Maintainer: Learned a lot about a specific MCU for your job? We all have one or two of em, right? Well, you could put that knowledge to good use by becoming the maintainer for that device in Mbed!
- Bug Fixer: We have the Mbed OS bug list to go through, and also a few more usability-oriented issues I filed on Mbed CE. Got a patch? Make a pull request!
- Beta Tester: If you want to start using Mbed CE, that provides valuable feedback to us too. Be sure to post any issues you have here or on GitHub!
If you want to help out, please comment on this thread or DM me! I believe that we can turn this project into something better than what Mbed 6.15 ever was, but only with your help! If no one is able to assist me, then, well… maybe Mbed OS will end up dying after all.
How do I use Mbed CE?
Just like Mbed OS, Mbed CE needs to be included in a top-level project in order for you to use it. You can either clone the sample project and base your project off of that, or you can follow the new project setup guide to create a blank project with the Mbed submodule added.