General-purpose instruction set processors suffer from a lack of forward compatibility: older processors do not support newer instruction set extensions, so they cannot run programs compiled for those extensions. This yields a form of programmed obsolescence in which software distributed as precompiled binaries cannot run on a machine whose only crime is to be old. The RISC-V instruction set is currently very vulnerable to this issue, as many devices have already been manufactured while new extensions were being ratified. Some newer extensions are explicitly required by some important software, such as Linux distributions. To improve forward compatibility, we propose an emulation layer that traps unsupported instructions and handles them in software. The proof-of-concept currently runs in userspace, but our goal is to provide it as a kernel module to run proprietary driver blobs—and perhaps even a precompiled Linux kernel—transparently. Emulation performance varies widely with the frequency of unsupported instructions, but we suggest dynamic code generation to improve performance significantly in some cases. CCS Concepts • Computer systems organization → Embedded software; Maintainability and maintenance.
Gorius et al. (Tue,) studied this question.