title: Language Engines VS. Runtimes VS. Process Virtual Machines
body: <p>Since the rising popularity of JavaScript, I found it intriguing to hear (even during the <a href="https://www.youtube.com/watch?v=PlmsweSNhTw" rel="noreferrer">same speech</a>) either about JavaScript <em>engine</em>, or about JavaScript <em>virtual machine</em>, or JavaScript <em>interpreter</em>, in the same context and referring to the same thing.</p>
  
  <p>Therefore I've tried to do some research, why all those buzzwords do coexisting simultaneously (there <em>must</em> be a reason) and if there are some real (although slight) differences between them.</p>
  
  <p>I'm trying to summarize what I've learnt so far, from many different sources (which I've quoted in the following lines). Feel free to correct me if I'm wrong/misleading with something.</p>
  
  <p>Although I've found out that the runtime-duties of all of them are basically the sames, I've found also some main differences:</p>
  
  <ol>
  <li><p>Process virtual machines</p>
  
  <ul>
  <li>are the <a href="https://www.quora.com/Is-V8-the-JavaScript-engine-a-virtual-machine-platform-like-the-JVM-If-not-in-what-way-is-it-different" rel="noreferrer">most complex</a> (implements even the IO, <a href="https://stackoverflow.com/questions/441824/java-virtual-machine-vs-python-interpreter-parlance">virtual instruction set</a> <a href="https://stackoverflow.com/questions/14678060/interpreters-vs-compilers-vs-virtual-machines">etc.</a>)</li>
  <li>always includes an <a href="http://www.slideshare.net/nwind/virtual-machine-and-javascript-engine/6-How_Virtual_Machine_Work_Parser" rel="noreferrer">interpreter + intermediate language</a></li>
  <li><a href="https://stackoverflow.com/questions/11253303/how-does-the-java-runtime-environment-compare-with-the-net-framework-in-terms-o">besides</a> may include also compilation (<em>just-in-time</em> and/or <em>dynamic recompilation</em>)</li>
  <li>applications run only inside VM process as a thread</li>
  <li>coupled to an runtime environment</li>
  <li>examples: Java Virtual Machine, Dalvik Virtual Machine</li>
  </ul></li>
  <li><p>Runtimes</p>
  
  <ul>
  <li>does not abstract away from native code</li>
  <li>uses <em>solely</em> <a href="https://stackoverflow.com/questions/1564348/is-the-clr-a-virtual-machine">compilation</a> techniques (either <a href="https://en.wikipedia.org/wiki/Comparison_of_application_virtualization_software" rel="noreferrer"><em>just-in-time</em> or  <em>ahead-of-time</em></a>)</li>
  <li>lacks a VM process/sandboxed applications</li>
  <li>tight-coupled/dependencies to the underlying operating system</li>
  <li>examples: Common Language Runtime, Android Runtime</li>
  </ul></li>
  <li><p>Language Engines</p>
  
  <ul>
  <li>more lightweight</li>
  <li>may use either an <a href="https://en.wikipedia.org/wiki/JavaScript_engine" rel="noreferrer">interpreter</a> or <a href="https://en.wikipedia.org/wiki/V8_(JavaScript_engine)" rel="noreferrer">compilation</a> (<a href="http://www.slideshare.net/nwind/virtual-machine-and-javascript-engine/88-Unlocking_the_JavaScript_Opportunity_with" rel="noreferrer"><em>just-in-time</em> and/or <em>dynamic recompilation</em></a>)</li>
  <li>decoupled from underlying environment/operating system</li>
  <li>exemples: all JavaScript engines, Zend Engine</li>
  </ul></li>
  </ol>
  
  <p><strong>Questions:</strong></p>
  
  <ul>
  <li><p>is the upper list accurate, or is it just a byproduct based on totally coincidental similarities between most common runtime systems, which use the same denomination?</p></li>
  <li><p>are there also other noteworthy differences?  </p></li>
  </ul>