The biggest sin of Linux API remains ioctl (and its variants). Zircon commits the same mistake with its `object_get_prop` [1] and `object_get_info` [2]. If you pretend to be type safe (have different getters for different obj-types), you can in the long run replace these calls with in-userland static calls where possible to accelerate performance (like linux does for futex and time).
Instead you get his "It does A if you give it B, it does C if you give it D" this is pretty bad API design as it NEEDS a void pointer. I'd rather see _a lot_ of simple with numbers related to the call. You have 4 million of them FFS (if you care about 32bit compatibility).
It just leaves a bad taste in my mouth. The API design is extremely nice otherwise, and these methods feel like such an after thought.
---
To be clear I really don't care about POSIX compatibility, its easy to shoe horn in after you have a solid OS. The Windows-NT kernel has done it twice now (NT4.0 and Windows10).
[1] https://fuchsia.googlesource.com/zircon/+/master/docs/syscal...
[2] https://fuchsia.googlesource.com/zircon/+/master/docs/syscal...