So it seems that the biggest issue was having a single Io interface forcing overhead on both green and native threads and forcing runtime dispatching.
It seems to me that the best would have been to have the two libraries evolve separately and capture the common subset in a trait (possibly using dynamic impl when type erasure is tolerable), so that you can write generic code that can work with both or specialized code to take advantage of specific features.
As it stand now, sync and async are effectively separated anyway and it is currently impossible to write generic code that hande both.
Source: https://github.com/rust-lang/rfcs/blob/master/text/0230-remo...