-
-
Notifications
You must be signed in to change notification settings - Fork 8.5k
README: Add new section defining port Tier levels. #18189
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
README.md
Outdated
|
||
| | Tier 1 | Tier 2 | Tier 3 | Tier M | Tier T | | ||
|-------------------------------------|--------|--------|--------|--------|--------| | ||
| actively maintained | x | x | | x | x | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might be easier to make a comparison if we sort this from most stars to least.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated.
I think there may be a few other points to consider mentioning or linking;
|
README.md
Outdated
- alif | ||
- mimxrt | ||
- nrf | ||
- renesas-ra |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In all respect I'm not sure about the renesas-ra being actively maintained. There seems little usage in the wider MicroPython community, very few boards from third parties (WeACT, Arduino, Seeed with RA4M1 only), and rare activities from Renesas. I have the impression, that only Matt and me are doing some updates to the port to keep it in sync.
The nrf port is a different topic. It is very different from structure and build system to the other ports on one hand, and there seems to be a good Zephyr support otherwise. That may make it a candidate for Tier M.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In all respect I'm not sure about the renesas-ra being actively maintained.
Yes, I know, it's hard to classify all ports in a single dimension. Maybe we need two dimensions, like "established level" and "maintained level"? Or even remove the Tiers altogether and just have a table of properties vs ports, with a check-mark for each property that a port has?
The nrf port is a different topic
Agreed again. I'm not sure how to treat this port in a ranking system...
README.md
Outdated
- samd | ||
- webassembly | ||
- windows | ||
- zephyr |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Zephyr with it#s support for various hardware is more a sub-system than a single port. Something between a pure hardware port like RP2 and a software only like unix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, zephyr is still a port (from MicroPython's point of view).
README.md
Outdated
Tier 1 ports: | ||
- esp32 | ||
- rp2 | ||
- stm32 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Off topic: The STM32 port with it's long history and multitude of Chip architectures seems pretty chaotic and need a cleanup, a herculean task.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It does have a lot of legacy. In a different classification system we would have alif, mimxrt, samd and rp2 as "modern ports", and then esp8266, stm32 as "legacy ports". But stm32 is still well maintained. And esp32 is somewhere in the middle.
It's difficult!
The situation with Zephyr-based support is one thing, but I'd also suggest that Zephyr's Hardware Support Tiers are probably a better reference to emulate than CPython's or Rust's given their similar targeting --- and in fact, if it's possible to align our tiers to roughly correspond to theirs, that might be helpful next time someone's trying to explain the tradeoffs to their company's suits. |
c4387d9
to
a9d1a98
Compare
@robert-hh apologies that I put As I mention above, it's really hard to classify the ports along one dimension. That's why I added Tier T (testing) and Tier M (maintenance), but even with those there is still a lot of nuance which is lost. Eg alif is a "new modern port" but not yet mature or stable, yet nrf is quite old but not really considered mature because it's so different to all the other ports in the way it's organized (and it's machine API is lacking, and it's Bluetooth is different). Maybe classifying the ports like this is not a good idea in the end? My original motivation was to set expectations (for users and developers) and lower the bar to entry for new ports like PSOC, and give them a path to mature. But maybe that can be achieved in a different way. |
Thanks, no need for apologies. Looking at the discussion and questions it seems that ESP32 and RP2 are the ones used most, followed by STM32. You should be able to tell that from firmware download statistics. And both MIMXRT and SAMD port are maintained by other people as well, which is good, but not as intense as RP2 and ESP32. All classifications fail somehow, because they have to simplify. But it still helps users to know, which ports are better maintained and get fast updates, wand which one may lag. The feature set is something else people look for. The cleanest port in ATM is the RP2 port, being developed in a short time with all the knowledge aout the STM32 and ESP32 development and just two device types. I hope it stays straight. |
a9d1a98
to
294d2cf
Compare
We should definitely keep the rp2 port clean, and have aspirations to make the other ports similar to it. IMO the alif port is quite clean as well, since it was based a lot of the rp2 port.
Thanks @AJMansfield for linking to that, I wasn't aware of it. I've now added a commit to this PR to change the Tier T to Tier 0, following Zephyr. That does make good sense, and means the unix port can move into Tier 0. |
Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: Damien George <damien@micropython.org> Signed-off-by: Angus Gratton <angus@redyak.com.au>
294d2cf
to
09ab5dc
Compare
Based on additional feedback from @projectgus I've updated this PR:
|
Summary
MicroPython has quite a few ports now (20 of them), but not all are in the same stage of development. This PR attempts to define port Tier levels and assign a Tier to each of the existing ports.
The main aim here is to set expectations for the level of support and development each port gets. And also lower the bar of entry for new ports (eg PSOC #16705) so they can enter at a low Tier and gradually rise up to Tier 1.
The Tiers are defined in terms of properties like "stable API" and "tested on hardware for a release". I wanted to be able to distinguish between ports like the following:
I think there's still a lot of room for defining the Tier levels, and which port goes under which Tier, so please provide feedback!
See prior art here:
Trade-offs and Alternatives
This is quite a subjective set of Tiers, but I tried to make it somewhat concrete by having a table showing the properties for each Tier. Still, we need to choose reasonable properties and assign them well.
I'm not sure if this belongs in the top-level README or the docs, or maybe both.
We could call it "Class" or "Group". But I think "Tier" is better and is more widely used.