One discussed approach, that I personally find compelling, is to introduce some kind of introspection into the coroutine instance, something similar to reflection. It would allow retrieving relevant information about current state of the suspended execution, help protect against dependency on implementation, disallow accessing state in a non-suspended state, etc. From there one can go and implement transferring coroutines across JVM boundaries.