> C code should not block the OS thread because this is not suitable for all rust tasks

This would mean Rust is unable to bind to many C libraries. It's not realistic. Rust itself includes memory-mapped I/O in the standard library, which is inherently blocking. The runtime should be able to move I/O jobs to another thread and we shouldn't be making it part of doing FFI.