Why don’t they write a new VM for a new language?
That one is easy:
- writing a good VM is hard
- writing a fast VM is hard
- making a VM run under multiple architectures is hard
- existing libraries work with existing VMs
- existing tools (debuggers, profilers, compilers, …) work with existing VMs
- getting people to install a new VM is hard
- instant interoperability with other languages targeting the same VM
- existing VMs have been thoroughly tested in production