I can't agree with you about virtual machines easing the making of parallel programs. There is nothing they can do to make a multi-threaded program correct if the programmer is sloppy. When you talk in parallelization in applications, you are almost likely talking of threads and the inherent problem about them is the sharing of state (data) between two or more threads. This will require synchronization and it is not a straightforward reasoning to get. And it is solely on the shoulders of the programmer, not the runtime or the language.