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.

Well said.

We are creating something uncommon; we are creating an RTOS that let's you run POSIX (read  Linux ) code while retaining the real time, deterministic performance of an RTOS  If we sacrifice either the real time nature or POSIX compatibility, then we have failed.

We are not building another Linux.  We already have a very nice one, thank you.

We have had other discussions recently about tradeoffs between POSIX compatibility and code size.  I don't think that was resolved to everyone's satisfaction.

It seems to me that when we have to make trade-offs , we tend to do so according to the following three values:

1. Real time, deterministic behavior,
2. Standards compliance, and
3. OS Footprint

Based on recent decisions and tradeoffs, I list those in what seems to be their decreasing order of importance to the project. Do you agree with those values and their importance?  If so, should they be enshrined somehow?

Some of this is in INVIOLABLES.md.  But INVIOLABLES.md  mostly addresses a lower level set of design values:  Modularity, coding style, etc.

Reply via email to