I think it’s kind of related to how the oomkiller really needs to be integrated with the applications - the application needs to be able to identify memory as “critical, nice to have, ehhhhh, and cache” and then let the kernel throw them away as necessary. Once you start having to throw away critical pages you oomkill the process.