Q:

Is the virtual machine of OpenJDK pluggable?

In previous times it was easy. We used the words java and virtual machine synonymously.
Now we have Hotspot VM (Oracle JDK), the OpenJDK Server VM, the Eclipse OpenJ9 VM and the Graal VM.
I am a little bit confused. Does OpenJDK has or is a runtime environement which could be used in conjunction different virtual machine implementations? Is there a standard interface for this or is it simply supported by OpenJDK.
I am asking as the output of running java -version for the two OpenJDK variants and the Graal VM contains in every case OpenJDK rintime:
> /Library/Java/JavaVirtualMachines/openjdk11-openj9/Contents/Home/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.11.0, JRE 11 Mac OS X amd64-64-Bit Compressed References 20181020_7 (JIT enabled, AOT enabled)
OpenJ9   - 090ff9dc
OMR      - ea548a66
JCL      - f62696f378 based on jdk-11.0.1+13)

> /Library/Java/JavaVirtualMachines/openjdk11/Contents/Home/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.1+13, mixed mode)

> /opt/graal/graalvm-ce-1.0.0-rc10/Contents/Home/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-20181024123616.buildslave.jdk8u-src-tar--b12)
GraalVM 1.0.0-rc10 (build 25.192-b12-jvmci-0.53, mixed mode)

I know there is a plenty of documents on this question on the web but none of them I read gave a secured state of knowledge on this topic.

A:

OpenJDK is quite modular, a prime example is the Graal compiler, which can be plugged via the JVMCI interface and completely replace the top tier JIT compiler (C2). Graal still uses HotSpot for the battle-tested infrastructure: object model, class loading, profiles, debugging, GC...
There are a few "interfaces"/components:

The VM interface (libjvm), a bunch of low-level methods to e.g. deal with native sockets, open files, create threads...
The native bindings (JNI), a well-defined interface between Java and the native world.
Java itself, including the standard library, an incredible amount of Java is actually implemented in Java.
libjava, native implementations for lots of native methods in the standard library, it's completely VM agnostic.

To implement a new VM you'd need to implement the VM interface, JNI and the bytecode compiler/interpreter, then you can reuse all the code in Java + libjava without porting/re-implementing anything e.g. you get all the IO, NIO, sockets, even the classloaders for free. 
GraalVM is just OpenJDK with superpowers, this includes a state-of-the-art compiler (Graal), a framework to build (fast) programming languages (Truffle) + AOT optimizing compiler (SubstrateVM)... among other goodies.

