In computer security and control-flow integrity (CFI) there are two terms: code-pointer separation (CPS) and code-pointer integrity (CPI), defined as follows:
Code-Pointer Integrity (CPI) is a property of C/C++ programs that guarantees absence of control-flow hijack attacks by requiring integrity of all direct and indirect pointers to code.
Are these (CPI and CPS) about programming discipline or compiler restrictions?