Не только.
Сама проблема кроется в самой архитектуре процессора, по хорошему нужна разработка новой архитектуры процессора. Многие подходы тянутся со времён самых первых процессоров с целью совместимости прежнего ПО в этом и кроются все подводные камни. Например стек, удобный вроде бы подход к записи динамических данных, вызовов процедур и возврат обратно, но он может замереть данные или код программы при плоской памяти и даже если его организовывать в отдельной странице за выход которой будет вызывать панику ядра. Да и другие подходы тоже с проблемами, та же куча, прерывания. Разные виды режимов, хоть они и дают некую иллюзию защищённости изоляции процессов друг от друга в конечном итоге приводит к коллапсу системы.