On Sat, Feb 15, 2025 at 4:53 PM Tomek CEDRO <to...@cedro.info> wrote: > > Okay so here goes the vote results :-)
Thanks, Tomek, for doing all of this! I would like to add some more of my thoughts: Regarding these rules: 9. Zero trust approach to user testing 10. Breaking changes not welcome. 11. Respect for long term maintenance and self-compatibility 12. Breaking changes handling process 14. Minimum code reviews 2 -> 4 Raiden said something very relevant (in #11) that I would like to expand upon: > Not every interface in NuttX is equally mature. Until we > establish which API is stable and which is not, this change is bad. > Breaking a stable API should be avoided, breaking an unstable and > under development API should be allowed. We *should* try to keep NuttX as stable and backwards compatible as feasible so that people can adopt NuttX and count on it to keep working for them in the long run. At the same time, we need to be very careful not to make rules that are too strict and inflexible, because then we would risk turning away contributors and we would end up with old cruft that is really broken and generating a lot of complaints but can't be fixed because it would break the rules. So we need to strike a good balance. How to strike a good balance? When deciding how easy or hard it should be to change some code, we should consider: * How new or mature the area of code is * How well the area of code works (known buggy .. known good) * How much will changes in this code affect other parts of the system * How well the area conforms to established standards Then: Code in mainline that is relatively new, known buggy, and won't affect too much the rest of the system should be allowed to change easily. Not too much discussions, votes, and other ceremony needed here. Just make the change with one reviewer (not from same org) and move on... Code in mainline that has existed for a long time, is mature, known to be working well, and will break many parts of the system if changed, should require careful consideration before changing. We shouldn't outright forbid such a change; maybe it's a "breaking" change but still needs to happen for important reasons. This is an area that needs lots of input, so, there should be a good discussion in the mailing lists, possibly including a [VOTE] to decide should we make this change or not. We could come up with some kind of formal "status" for each area of the code: * Under Development * Experimental * Production Stable * Periphery I'll describe each: # Under Development: This status is for things that are substantially working but are still considered incomplete. Examples might be a new CPU arch, a new board, a new driver, etc. Why include it in NuttX mainline? Because this way, other people can join the effort. Consider how Lup made NuttX boot on the PinePhone. (Thanks, Lup!) Most features were not implemented, but putting it in NuttX mainline means that people could play with it, experiment with it, hack on it, and help develop it further. It helps to inspire new contributors and that's a good thing. We shouldn't include totally broken things, but under development and *working* to some extent is welcome. If it's a new CPU arch and board, NuttX should at least boot to NSH prompt. It's okay if most other drivers (display, sound, GPS, who knows what) don't work yet. Areas like this should be allowed to change easily without too much worrying about stability or backwards compatibility because they are not stable yet and people probably shouldn't try to build products with them. If you do build a product with "Under Development" code, you should understand the risks and be prepared to solve problems and hack on it when things break. One reviewer (not from the same org) should be enough. # Experimental: This status is for things that are considered "finished" (not "Under Development") but it hasn't received widespread testing yet. There might be rough edges or occasional crash or who knows what. So it's finished, but needs more testing in the wild before it can be considered good enough for production use. People can consider to build products with this kind of code but should be informed of the risks and be prepared to test heavily and help solve problems. It should be relatively easy to submit bugfixes for this kind of code. 1 reviewer (not from the same org) should be enough. Breaking changes in this kind of code should have a discussion and maybe 2 reviewers, because the code might already be used in production somewhere. If someone is using it in production with good results, perhaps it should be elevated to the next level: # Production Stable: This status is for things that are complete and working in production. This kind of code needs to remain as stable as possible. Bugfixes are always welcome, of course. I suggest 3 reviewers (not from the same org) and a good description of what was the bug and how is it fixed. Breaking changes are possible but need to be considered very carefully. I suggest: Mailing list discussion. ASF requires 72 hours, I suggest more like a week, to make certain that people have a chance to study the matter and respond. Followed by a [VOTE]. For the actual change, I suggest 3 reviewers (not from the same org). (And follow all the other rules about git logs and etc). # Periphery: I couldn't think of a better word, but this is other things that are part of the system, such as Documentation and whatnot. Often it is hard for projects to find contributors for these areas, so code is worked on and fixed, but documentation (and other things) often lag behind. We want to encourage contributors here, so I suggest to make it easy, with 1 reviewer (not from the same org), unless you're reorganizing the manual, moving chapters around, and making big changes like that. Then, maybe there should be more discussion. Use common sense to decide... Anyway, those are my thoughts. To sum up, how easy or hard to make "breaking changes" should depend on how mature/stable the code in question already is, and how much it will affect other parts of the system. Some areas are more isolated (e.g., some obscure driver), some areas are shared by all code (e.g., sched), some areas are very new (e.g., PinePhone), some are very mature and used in production. I'm glad we have turned what was previously a bad thing (disruptive changes that made people upset--understandably!) to something positive and creative for the community. I hope we can continue this way... Cheers, Nathan