It's always useful to talk about requirements as the first part of the
design process.
At the high level, how important is backwards compatibility? Is the
problem of how support existing application in scope, or not? Or is
the assumption that emulation libraries will always be sufficient.
How about performance, either of applications using the new API, or
applcications using the legacy API's? And what are the hardware
platforms that this new set of abstractions going to target? Is the
goal only to target small embedded systems? Mobile handsets? Desktop
systems? Is it supposed to be able to scale to super computers? Are
web front-ends that need to be able to accept thousands of incoming
TCP connections per second, and then redirect those connections to
application logic servers in scope?
Solutions that involve being able to support intpret general SQL
queries may not scale in terms of performance and the ability to
support thousands of file descriptors in a single process.
Backwards compatibility is why we have multiple asynchronous I/O
interfaces --- from select, poll, epoll, kqueue, and io_uring. And
the reason why we've had multiple asynchronus I/O interfaces over the
decades is because the performance requirements have changed, and the
capability of hardware interfaces for high performance I/O has
changed; it's no longer about I/O ports and interrupts, but instead,
having multiple request and response queues through memory mapped I/O,
and the need to be able to use multiple CPU's and multiplexing
multiple network or storage transactions across a single doorbell or
system call.
If all of this is out of scope, then the design process will be much
simpler, and perhaps more elegant; but the resulting design will not
be useful for many of the use cases where Linux is used today. And
perhaps that's OK. On the other hand, one person's simple, elegant
design is another person's toy that isn't fit for their purpose.
IBM once said that part of Linux's power is that it scales from wrist
watches to super computers. Is that in scope for this theoretical
design question?
- Ted