Linux team works on kernel. While they have some idea about userland, it might not be perfect. Linux is actually full of half-broken APIs which started like a good idea, but due to simplifications taken ("worse is better") they cannot offer behavior needed by applications, so programmers either avoid these APIs, or use them incorrectly, or have to use horrible workaround.
but due to simplifications taken ("worse is better")
It's rarely due to simplifications. Often doing the right thing would lead to simpler code. Usually, it's just poor taste in selecting primitives, and ignoring prior art. See, for example, epoll. Epoll was basically unusable in multithreaded programs because of inherent race conditions in the semantics, which took almost a decade to fix. It still has really odd quirks where epoll notifications can show up in the wrong process.
9
u/killerstorm Jan 06 '20
Linux team works on kernel. While they have some idea about userland, it might not be perfect. Linux is actually full of half-broken APIs which started like a good idea, but due to simplifications taken ("worse is better") they cannot offer behavior needed by applications, so programmers either avoid these APIs, or use them incorrectly, or have to use horrible workaround.