Emulating PDP-11 Abstract Machine as the Root Cause of Spectre and Meltdown  

The following excerpts from the ACM Queue article caught my attention.

“The root cause of the Spectre and Meltdown vulnerabilities was that processor architects were trying to build not just fast processors, but fast processors that expose the same abstract machine as a PDP-11. This is essential because it allows C programmers to continue in the belief that their language is close to the underlying hardware.”

“The quest for high ILP was the direct cause of Spectre and Meltdown.”

By the definition that a “low-level language” should be “close to metal”, C is not a low-level language anymore. “Close to metal” means the language constructs and memory model should trivially map to processor feature/instruction set. If the language, compiler and processor had first-class support for parallel constructs we would not have needed to encounter Spectre/Meltdown.

The author makes the case for modern languages, compilers and processors to move away from the simplistic flat-memory and sequential-execution legacy that we have inherited from PDP-11. The paradigm shift from CPU to GPU is a case in point – rather than resorting to speculative execution (ILP), parallelism is supported by the GUP processor and the language exposes the necessary vectorization and parallelization primitives, so programmers actively think and program for parallelism/concurrency.

On a related note, the author David Chisnall, concludes:

“There is a common myth in software development that parallel programming is hard. This would come as a surprise to Alan Kay, who was able to teach an actor-model language to young children, with which they wrote working programs with more than 200 threads. It comes as a surprise to Erlang programmers, who commonly write programs with thousands of parallel components. It’s more accurate to say that parallel programming in a language with a C-like abstract machine is difficult, and given the prevalence of parallel hardware, from multicore CPUs to many-core GPUs, that’s just another way of saying that C doesn’t map to modern hardware very well.”