В этом разделе мы кратко рассмотрим историю развития многоуровневых машин, покажем, как число и природа уровней менялись с годами. Программы, написанные на машинном языке (уровень 1), могут сразу выполняться электронными схемами компьютера (уровень 0), без применения интерпретаторов и трансляторов. Эти электронные схемы вместе с памятью и средствами ввода-вывода формируют аппаратное обеспечение. Аппаратное обеспечение состоит из осязаемых объектов — интегральных схем, печатных плат, кабелей, источников электропитания, запоминающих устройств и принтеров. Абстрактные понятия, алгоритмы и команды не относятся к аппаратному обеспечению.
Программное обеспечение, напротив, состоит из алгоритмов (подробных последовательностей команд, которые описывают, как решить задачу) и их компьютерных представлений, то есть программ. Программы могут храниться на жестком диске, гибком диске, компакт-диске или других носителях, но в сущности программное обеспечение — это набор команд, составляющих программы, а не физические носители, на которых эти программы записаны.
В самых первых компьютерах граница между аппаратным и программным обеспечением была очевидна. Со временем, однако, произошло значительное размывание этой границы, в первую очередь благодаря тому, что в процессе развития компьютеров уровни добавлялись, убирались и сливались. В настоящее время очень сложно отделить их друг от друга. В действительности аппаратное и программное обеспечение логически эквивалентны.
Любая операция, выполняемая программным обеспечением, может быть реализована аппаратным обеспечением (желательно после того, как она продумана). Карен Панетта Ленц говорил: «Аппаратное обеспечение — это всего лишь окаменевшее программное обеспечение». Конечно, обратное тоже верно: любая команда, выполняемая аппаратным обеспечением, может быть смоделирована в программном обеспечении. Решение разделить функции аппаратного и программного обеспечения основано на таких факторах, как стоимость, скорость, надежность, а также частота ожидаемых изменений. Существует несколько жестких правил, сводящихся к тому, что X должен быть в аппаратном обеспечении, а Y должен программироваться. Эти решения изменяются в зависимости от тенденций экономического и технологического развития.