To see what I mean, try using epoll to manage a set of network connections. They apparently didn’t consider the case where you have more than one CPU and also want to handle more than one network connection. Also, if you do get it to work without crashing on stale fd’s, you’ll find it bottlenecks on a spin lock.
If you want to save some time and jump to the current state of the art, use DPDK or some other user space network driver + IP stack to completely bypass the kernel. :-(
Glibc really does a lot of good work to hide the mess underneath.
The biggest problem with Linux is it doesn't have a coherent design philosophy. So some subsystems are nice and others are horrendous. Knowledge of one subsystem may lead to misleading assumptions about another part of the kernel.
An example is the kernel supposedly doesn't have threads, they are just processes that share address space. But of course other parts do in fact need to understand that there is one coherent bundle of threads that compose this abstract idea of a process. So some places differentiate between thread id and process ids and others mix them. Windows has its inconsistencies, but not with something so fundamental as a process.
My laptop is always hot enough to burn my balls off. This is after disabling my dedicated GPU, disabling turbo boost and underclocking the cpu.
Consequently the battery life is abysmal as well.
Lastly, trackpads seem to worse on linux across the board.
Those things are major sticking points in almost all linux laptops.
I have been able to find near-perfect replacements for everything else. (apart from some MS office and enterprise software, but can't blame linux for that)
In particular, in Ubuntu 18.04 (and maybe all of gnome) they removed mouse / trackpad acceleration, so using pointing devices feels like drinking a pot of coffee and working with you hand immersed in thick mud. There’s a config file option / cli to fix that somewhere. Same with the non-existent palm rejection.
I want a system that JUST WORKS. I don't have enough time in my day, with all of my other responsibilities, to figure out why something is slightly broken.
Corporate VPN's are the other one.
That's why I really don't mind running MacOS at work - it works well, and the defaults are sane.