I would define systems programming to be that which (by necessity, rather than optimization, featursm, ignorance, or a combination thereof) interacts directly with the operating system; the system (as opposed to application) programming interface, traditionally documented in section 2 of the UNIX manual. I consider a language a systems language if it:
- provides full (typechecked, direct, efficient) support for said system programming interface
- this means a systems language on one host might not be a (useful) systems language on another!
- provides control of data layout up to the capabilities of the host
- this can be necessary for operating with binary specifications, etc
C is (and always has been) the prototypical systems language of most UNIX systems.