programming tools
levels of services for programmers
windowing systems
core support for separate and simultaneous user-system activity
programming the application and control of dialogue
interaction toolkits
bring programming closer to level of user perception
user interface management systems
controls relationship between presentation and functionality