Большинство операционных систем строится на концепции файлов, и снабжается набором программ для предварительной обработки этих файлов и передачи их более сложным приложениям для дальнейшей обработки: текстовому процессору, электронной таблице, броузеру Web.
Каждое из этих монолитных приложений наверняка содержит операцию ``открытия'' файла, то есть чтения его с диска в специально выделенные структуры памяти; большинство из них содержат команды поиска и замены текста, проверки грамматики, печати документа и т.д. Исходный код приложений для выполнения перечисленных задач хранится отделно внутри каждого приложения, занимая лишнее место в памяти и на диске. Это противоречит идеологии Linux.
К тому же, при использовании платного ПО, настоящий исходный код программ скрыт от пользователей - то есть, другие программисты не могут использовать его в полной мере для целей разработки или обучения. Если Вы приобретаете копию программы, Вы можете пользоваться ею, но никогда не узнаете, как же она действительно работает.
ОС, подобные Linux, не придают приложениям столь значимой роли. Вместо этого, они поставляются со множеством небольших программ, называемых ``инструментами''. Каждый инструмент способен выполнять лишь очень простую, определенную для него задачу - перенаправлять вывод из файлов, посылать вводимую информацию на принтер, сортировать строки в потоке ввода. Отличие состоит в том, что инструмент выполняет свою работу максимально эффективно.
Важным моментом при разработке Unix было введение ``конвейеров'', позволяющих передать результаты работы одного инструмента в качестве исходных данных другому. Зная, что по отдельности делает каждый инструмент и умея их комбинировать, пользователь может создавать достаточно мощные ``цепочки'' команд.