I don't think process_vm_writev can write to read-only memory, which executable memory is under modern operating systems. Doing that requires ptrace, which long predates Linux. According to the Linux man page, it is "CONFORMING TO: SVr4, 4.3BSD".
Executable code is only read-only by default, you can always change that (or just not do it, in the case of a JIT).
Sure they can.
https://stackoverflow.com/questions/49442087/how-does-ptrace...