So far you’ve looked at software that communicates with your users, via text-based or graphical interfaces, and system software that doesn’t need to talk to users at all. One thing that both types of software have in common is the need to deal with the underlying system that it sits on top of. That system is a structure containing the file system, operating system, hardware interfaces, and various system-level services. When programming for the Web, you typically don’t interact with hardware, lower-level aspects of the system, and so on. Indeed, in many cases, you specifically take steps to prohibit your users from doing so!