Systems programming is any type of programming that impacts aspects of the host system beyond the explicitly published interfaces available to the programmer. So if your fscking with memory, diddling the hardware, programmatically being a DBA, you're doing systems programming.

This issue didn't really arise until 1) C became popular because that's what came with UNIX 2) everyone became a systems programmer when they all had their own systems. Windows and Linux have both made things worse because 1) Windows is a terrible OS design that makes it impossible NOT to do systems programming 2) Linux is UNIX and like it or not, the Linux user is a systems administrator.

Memory management should not be an issue beyond a well-defined barrier. Unfortunately the OSes in common use don't have that barrier.

Could be that Java accidentally became popular because it brings along its own pseudo-OS in the form of the VM. Sort of a shitty solution when the VM is just a process in the same sucky OS. But, if the OS were VM based at the bottom, it would work.