Lastly, what is the easy approach to I/O and external functions?
the easy approach is to forward the external functions to the backend, which will take care of rendering them as appropriate (usually by calling an helper function written in java). This approach is already used to implement time.time, time.clock and os.write: you can find their implementation in jvm/src/pypy/PyPy.java (ll_time_time, ll_time_clock, ll_os_write). The code that calls these functions is in jvm/generator.py, method 'call_primitive'.
ciao Anto
Small addition from my side. I've been playing recently with a very naive reuse of BasicExternal infrastructure which is supporting external objects in JS backend. Looks nice so far and I'm able to hard code some RPython-accessible objects (in a very ad hoc manner, mind you). I don't know Java that well, but I would be happy to help with this issue. Cheers, fijal :.