Философия Unix , созданная Кеном Томпсоном , представляет собой набор культурных норм и философских подходов к минималистской модульной разработке программного обеспечения . Она основана на опыте ведущих разработчиков операционной системы Unix . Ранние разработчики Unix сыграли важную роль во внедрении концепций модульности и возможности повторного использования в практику разработки программного обеспечения, породив движение « программных инструментов ». Со временем ведущие разработчики Unix (и программ, которые работали на нем) установили набор культурных норм для разработки программного обеспечения; эти нормы стали такими же важными и влиятельными, как и сама технология Unix, и были названы «философией Unix».
Философия Unix подчеркивает создание простого, компактного, понятного, модульного и расширяемого кода, который может быть легко поддержан и перепрофилирован разработчиками, отличными от его создателей. Философия Unix отдает предпочтение компоновке в противовес монолитному дизайну .
Философия Unix описана Дугом Макилроем [1] в журнале Bell System Technical Journal за 1978 год: [2]
Позже это было обобщено Питером Х. Салусом в книге «Четверть века Unix» (1994): [1]
В своей статье о Unix 1974 года Ритчи и Томпсон приводят следующие соображения по проектированию: [3]
В предисловии к книге 1984 года «Среда программирования UNIX» Брайан Керниган и Роб Пайк , оба из Bell Labs , дают краткое описание архитектуры и философии Unix: [4]
Несмотря на то, что система UNIX представляет ряд инновационных программ и методов, ни одна программа или идея не заставит ее работать хорошо. Вместо этого ее делает эффективной подход к программированию, философия использования компьютера. Хотя эту философию нельзя выразить одним предложением, в ее основе лежит идея о том, что мощь системы исходит больше от взаимоотношений между программами, чем от самих программ. Многие программы UNIX выполняют довольно тривиальные вещи в изоляции, но в сочетании с другими программами становятся общими и полезными инструментами.
Авторы далее пишут, что их цель в этой книге — «донести философию программирования UNIX». [4]
В октябре 1984 года Брайан Керниган и Роб Пайк опубликовали статью под названием « Проектирование программ в среде UNIX» . В этой статье они критикуют увеличение опций и функций программ, обнаруженных в некоторых новых системах Unix, таких как 4.2BSD и System V , и объясняют философию программных инструментов Unix, каждый из которых выполняет одну общую функцию: [5]
Большая часть мощи операционной системы UNIX исходит из стиля дизайна программ, который делает программы простыми в использовании и, что еще важнее, легкими в комбинировании с другими программами. Этот стиль был назван использованием программных инструментов и больше зависит от того, как программы вписываются в среду программирования и как их можно использовать с другими программами, чем от того, как они спроектированы внутри. [...] Этот стиль был основан на использовании инструментов : использование программ по отдельности или в комбинации для выполнения работы, а не выполнение ее вручную, монолитными самодостаточными подсистемами или специальными одноразовыми программами.
Авторы противопоставляют инструменты Unix, такие как cat , более крупным программным пакетам, используемым другими системами. [5]
Дизайн cat типичен для большинства программ UNIX: он реализует одну простую, но общую функцию, которая может использоваться во многих различных приложениях (включая многие, не предусмотренные первоначальным автором). Другие команды используются для других функций. Например, существуют отдельные команды для задач файловой системы, таких как переименование файлов, их удаление или определение их размера. Другие системы вместо этого объединяют их в одну команду «файловой системы» с собственной внутренней структурой и языком команд. ( Примером может служить программа копирования файлов PIP [6], найденная в операционных системах, таких как CP/M или RSX-11 .) Такой подход не обязательно хуже или лучше, но он определенно противоречит философии UNIX.
Макилрой , тогдашний глава Исследовательского центра вычислительных наук Bell Labs и изобретатель конвейера Unix , [7] обобщил философию Unix следующим образом: [1]
Это философия Unix: Пишите программы, которые делают что-то одно и делают это хорошо. Пишите программы, которые будут работать вместе. Пишите программы для обработки текстовых потоков , потому что это универсальный интерфейс.
Помимо этих заявлений, он также подчеркивал простоту и минимализм в программировании Unix: [1]
Понятие «замысловатые и прекрасные сложности» — это почти оксюморон. Программисты Unix соревнуются друг с другом за «простые и прекрасные» почести — момент, который подразумевается в этих правилах, но его стоит сделать явным.
С другой стороны, Макилрой критиковал современный Linux за его раздутое программное обеспечение , отмечая, что «восторженные поклонники накормили Linux вкусностями до состояния удручающе большого ожирения ». [8] Он противопоставляет это более раннему подходу, принятому в Bell Labs при разработке и пересмотре Research Unix : [9]
Все было маленьким... и мое сердце замирает от восторга по поводу Linux, когда я вижу его размер. [...] Страница руководства , которая раньше была страницей руководства , теперь представляет собой небольшой томик с тысячью опций... Мы сидели в Unix Room и говорили: «Что мы можем выбросить? Зачем нужна эта опция?» Часто это происходит из-за того, что в базовом дизайне есть какой-то недостаток — вы не попали в нужную точку дизайна. Вместо того чтобы добавлять опцию, подумайте, что заставило вас добавить эту опцию.
Как заявил Макилрой и как принято в сообществе Unix, от программ Unix всегда ожидалось, что они будут следовать концепции DOTADIW, или «Делай одно дело и делай это хорошо». В Интернете имеется ограниченное количество источников аббревиатуры DOTADIW, но она подробно обсуждается во время разработки и упаковки новых операционных систем, особенно в сообществе Linux.
Патрик Фолькердинг , руководитель проекта Slackware Linux , использовал этот принцип проектирования в критике архитектуры systemd , заявив, что «попытка контролировать службы, сокеты, устройства, монтирования и т. д. в рамках одного демона противоречит концепции Unix, заключающейся в выполнении одной задачи и выполнении ее хорошо». [10]
В своей книге «Искусство программирования в Unix» , впервые опубликованной в 2003 году [11], Эрик С. Рэймонд (сторонник открытого исходного кода и программист) суммирует философию Unix как принцип KISS : «Keep it Simple, Stupid» («Будь проще, глупый»). [12] Он предлагает ряд правил проектирования: [1]
В 1994 году Майк Ганкарц, член группы Unix Engineering Group (UEG) корпорации Digital Equipment , опубликовал книгу The UNIX Philosophy, основанную на его собственной разработке порта Unix ( Ultrix ) в DEC в 1980-х годах и обсуждениях с коллегами. Он также является членом группы разработчиков X Window System и автором Ultrix Window Manager (uwm).
В книге основное внимание уделяется переносу UNIX на различные компьютеры во время войн Unix 1980-х годов и описывается его философия, согласно которой переносимость должна быть важнее эффективности использования нестандартных интерфейсов для аппаратных и графических устройств.
Девять основных «принципов», которые он считает важными, таковы:
Ричард П. Габриэль предполагает, что ключевым преимуществом Unix было то, что он воплощал философию дизайна, которую он назвал «чем хуже, тем лучше», в которой простота как интерфейса, так и реализации важнее любых других атрибутов системы, включая правильность, согласованность и полноту. Габриэль утверждает, что этот стиль дизайна имеет ключевые эволюционные преимущества, хотя он ставит под сомнение качество некоторых результатов.
Например, в ранние дни Unix использовал монолитное ядро (что означает, что пользовательские процессы выполняли системные вызовы ядра все в пользовательском стеке). Если сигнал был доставлен процессу, когда он был заблокирован на долгосрочном вводе-выводе в ядре, обработка ситуации была неясной. Обработчик сигнала не мог быть выполнен, когда процесс находился в режиме ядра с конфиденциальными данными ядра в стеке.
В статье 1981 года под названием «Правда о Unix: пользовательский интерфейс ужасен » [13], опубликованной в Datamation , Дон Норман критиковал философию дизайна Unix за ее отсутствие заботы о пользовательском интерфейсе. Опираясь на свой опыт в когнитивной науке и на текущую философию когнитивной инженерии [14] , он сосредоточился на том, как конечные пользователи понимают и формируют личную когнитивную модель систем — или, в случае Unix, не понимают, в результате чего катастрофические ошибки (например, потеря часа работы) становятся слишком простыми.
В подкасте On the Metal Джонатан Блоу критиковал философию UNIX как устаревшую. [15] Он утверждал, что связывание модульных инструментов приводит к очень неэффективным программам. Он говорит, что философия UNIX страдает от тех же проблем, что и микросервисы : без всеобщего надзора большие архитектуры оказываются неэффективными и непроизводительными.