This system has an interesting problem that will eventually need to be solved. I can't think of any system that has ever fixed this. The thing that worries me is what happens if a program sends a message to another program, but never gets a response. This could happen due to a bug in the server application, or it could even just be that the program does not accept messages. In any event, if the client waits for this message, it will have to wait forever. This shouldn't affect the end-user too much. If a shell process takes too long to return, then it should quickly say: "This long-running process will run in the background. Type to poll its status." But other programs might either decide that the program won't take too long, or that it can't really continue until the other program responds, so there's no point in polling. But a bug could make both of these assumptions false, resulting in lag. The obviously solution would be to remove the wait function, but many programs will see this and just decide to poll in a loop without any timeout or error handling, which doesn't solve the problem. Forcing the client to specify a timeout does solve this, but on slower hardware the timeout might not be long enough, and it is difficult to implement. One idea would be to give the server a timeframe of when it's allowed to respond, and if it fails to do so in that time, then we assume that it will never respond. This might be possible with a really smart scheduler, but I'm not currently able to control the scheduler. Another solution is to heavily reconsider the current architecture, in such a way that sending a message to a program is a function call, and whatever the function returns must be the response. If the message returns without responding, then there's no response. That doesn't really solve the issue either though, because the function could contain an infinite loop. For fun, let's look at the scheduler solutions. I already have this idea that the UI process should have priority over any other process. If we stipulate that a poll will never respond until a frame finishes, then we can definitely remove the wait function, and it will be obvious that any waits blocking the UI thread are a bug. Alternatively, we could say that a server must respond by the end of the frame. But that would prevent several useful classes of program. Since package IDs are unique, I don't believe there's any chance of a malicious program exploiting this by pretending to be a different package. But it is still possible for a useful package to have a long response time, which could cause an issue. This vulnerability is not an unforgivable sin, since every other system has this flaw as well, but it would be nice if we could somehow prevent it at the OS level. Then again, it's not like I'm trying to prevent infinite loops elsewhere.