Начнем обсуждение программного обеспечения с рассмотрения его классификации. Всё программное обеспечение можно разделить на две большие группы: прикладное программное обеспечение (application software) и системное программное обеспечение (system software). К прикладному программному обеспечению относятся программы, выполняющие задачи, касающиеся предметной области применения машины. Компьютер, который используется для составления каталогов в производственной компании, и компьютер, с которым работает инженер, будут содержать разные приложения. К прикладному программному обеспечению также относятся электронные таблицы, базы данных, системы подготовки публикаций, системы бухгалтерского учета, системы разработки программ и компьютерные игры.
В отличие от прикладного, системное программное обеспечение выполняет задачи, которые, в принципе, присущи вычислительным системам. В некотором смысле системное программное обеспечение является средой, в которой размещается прикладное, почти так же как инфраструктура государства определяет образ жизни отдельных граждан.
Системное программное обеспечение можно разделить на две группы: операционная система и обслуживающее программное обеспечение, или утилиты (utility software). Большая часть обслуживающего программного обеспечения установки состоит из программ, выполняющих действия, которые являются важными для работы вычислительной машины, однако не входят в операционную систему. В некотором смысле обслуживающее программное обеспечение состоит из программ, которые расширяют возможности операционной системы.
Различие между прикладным и обслуживающим программным обеспечением часто очень условно. По нашему мнению, различие заключается в том, является ли пакет программ частью инфраструктуры программных средств или нет. То есть новое приложение может стать обслуживающей программой, если оно станет базовым инструментом. Различие между обслуживающим программным обеспечением и операционной системой также неопределенно. В некоторых системах программы, которые обеспечивают такие основные услуги, как ведение перечня файлов в запоминающем устройстве, рассматриваются как обслуживающие, в других же они включены в операционную систему.