Embora pareça haver muitas semelhanças, existem algumas diferenças importantes:
Um bom exemplo de um Runtime System seria a Java Virtual Machine, que fornece um ambiente consistente de plataforma cruzada para o código de byte Java [compilado].
Um bom exemplo de uma Camada de Compatibilidade seria o WINE, que permite que os usuários executem aplicativos Windows não modificados diretamente no Linux e no Unix. Em comparação com o WINE, as camadas de compatibilidade também podem ser muito pequenas, como uma única biblioteca que a base de código principal usa para acessar recursos específicos do SO (por exemplo, abrir um arquivo, se comunicar pela Internet etc.) que fornecem uma API consistente para que o aplicativo efetivamente oculte todas as diferenças específicas do SO.
A desvantagem de um ambiente de tempo de execução é que todo o ambiente deve estar disponível para qualquer código que esteja sendo executado, o que pode exigir muito esforço de desenvolvimento.
A desvantagem de uma Camada de Compatibilidade é que ela não necessariamente fornece consistência e pode ser mais difícil de depurar.
A vantagem de um ambiente de tempo de execução é que, depois de serem portados para uma nova plataforma, os aplicativos serão executados sem modificação.
A vantagem de uma Camada de Compatibilidade é que, para suportar uma nova plataforma, apenas uma nova camada (ou conjunto de camadas) precisa ser criada, e o aplicativo principal pode ser compilado para a nova plataforma de destino com mudanças mínimas.
A virtualização é como um Runtime Environment extremamente extenso, mas o diferente é que um conjunto de instruções da CPU (e quaisquer dispositivos necessários) estão sendo virtualizados ou emulados muito bem.