On Thu, Mar 30, 2023 at 9:49 AM Gregory Nutt <spudan...@gmail.com> wrote:
> > >> 3. Move priority inheritance from nxsem to nxmutex, and optimize the > >> performance of priority inheritance; > > > > That will break every a lot of people's code. There is probably a lot > > of application logic that depends on priority inheritance working on > > counting semaphores. Removing that will problems for a lot of people. > > > > This is, however, consistent with how Linux works. > > AFAIK there is nothing that prohibits semaphores from supporting > priority inheritance -- other than the fact that there is no "owner" of > a semaphore as there is for a mutex. Priority inheritance is very > important for the correct behavior of some real time systems so we were > able to use priority inheritance with counting semaphores by adding some > non-standard interfaces to control whether a semaphore supports priority > inheritance or not by its usage: > > https://cwiki.apache.org/confluence/display/NUTTX/Signaling+Semaphores+and+Priority+Inheritance > > I have mixed feelings myself and hope that we get some consensus through > dialog. One one hand, it is important to stay faithful to documented > standard and undocumented conventions for the use the a POSIX/Unix > systems. But on the other hand, unlike other OSs that strive toward > standard conformance, we are an RTOS and must satisfy certain > requirements for deterministic, real time behavior. > > What do you all think? My opinion is that we have to respect the requirements for deterministic real-time behavior, even though that implies the addition of certain non-standard interfaces. Otherwise we lose our identity as a real time operating system and the applications I am doing with NuttX (and I'm sure many other people) will not be possible. That said, I also very much like that NuttX strives for standards conformance. For me, this means that most non-real-time code can be developed and tested on a PC with a faster code-compile-debug cycle than embedded and then moved over to embedded when it's ready. This has been a huge productivity boost for me (and I'm sure, once again, for many other people). How, then, do we satisfy both needs? I think the answer is that as long as standard functions behave like the standards and practices expect, and deviations from the standards use identifiers that do not collide with the standards, both needs are satisfied well. Applications that do not utilize our real time "extensions" will not notice the difference, and applications that do utilize them will meet real time requirements as needed. I think that in large part we are already doing exactly that, so there isn't really a problem that needs fixing here. I don't know the details of this specific PR yet, so I am just giving my opinion about the premise of NuttX in general. Nathan