ML Runtimes versus the Legacy Engine
Runtimes and the Legacy Engine serve the same basic goal: they are container images that contain a complete Linux OS, interpreter(s), and libraries. They are the environment in which your code runs.
There are many runtimes. Currently each runtime contains a single interpreter (for example, Python 3.8, R 4.0, etc.) and a set of UNIX tools including gcc. Each runtime supports a single UI for running code (for example, the Workbench or JupyterLab).
There is one Legacy Engine. The engine is monolithic. It contains the machinery necessary to run sessions using all four engine interpreter options that we currently support (Python 2, Python 3, R, and Scala) and a much larger set of UNIX tools including LaTeX.
Runtimes are the future of CML. Their design keeps the images small, which is good for performance, maintenance, and security.
Runtimes will soon exceed the capabilities of the Legacy Engine, but they do not yet cover the full engine feature set. In particular, you cannot deploy a custom runtime, R runtimes do not support Models, there are no Scala runtimes, and runtimes do not support Workers.