The purpose of tulip, by contrast, is to bring a standard model for cooperative multi-threading into the Python standard library specification. Like functional programming, cooperative multi-threading is an important tool in a programmer's design toolkit, and objecting to the fact that it doesn't solve every problem (like being able to use a preemptive threading programming model with an async execution model, which is the problem gevent solves) is like complaining that a purely functional program doesn't cope well with mutable system state.
The key purpose of tulip is to allow the transport and protocol implementations to be shared between different event loop implementations, as well as to allow multiple event loops to cooperate within a single process.