Erlang's internal IPC is doing it pretty well since before there was a Linux kernel. I don't know if that approach can be ported into the kernel and how complex they are behind the scenes, but spawn / send / receive are apparently simple concepts.
In Erlang: http://erlang.org/doc/getting_started/conc_prog.html#id68696
In Elixir: http://elixir-lang.org/getting-started/processes.html
Maybe I just don't understand the problem they are out to solve.
I can't answer that because I don't have a PhD related to IPC, and I haven't done the necessary research to fully understand the field. I have looked at how some other systems are doing it, but I know that is not a strong enough knowledge-base to build a good IPC system.
I do have enough understanding to know that when I look at a good IPC api, I will look at it and say, "wow, that's really nice."
Is there something I'm missing? What might an ideal IPC API look like to you?
[1] - https://www.youtube.com/watch?v=6zN0b6BfgLY