stringtranslate.com

Философия Unix

Кен Томпсон и Деннис Ритчи , ключевые сторонники философии Unix

Философия Unix , созданная Кеном Томпсоном , представляет собой набор культурных норм и философских подходов к минималистской модульной разработке программного обеспечения . Она основана на опыте ведущих разработчиков операционной системы Unix . Ранние разработчики Unix сыграли важную роль во внедрении концепций модульности и возможности повторного использования в практику разработки программного обеспечения, породив движение « программных инструментов ». Со временем ведущие разработчики Unix (и программ, которые работали на нем) установили набор культурных норм для разработки программного обеспечения; эти нормы стали такими же важными и влиятельными, как и сама технология Unix, и были названы «философией Unix».

Философия Unix подчеркивает создание простого, компактного, понятного, модульного и расширяемого кода, который может быть легко поддержан и перепрофилирован разработчиками, отличными от его создателей. Философия Unix отдает предпочтение компоновке в противовес монолитному дизайну .

Источник

Философия Unix описана Дугом Макилроем [1] в журнале Bell System Technical Journal за 1978 год: [2]

  1. Заставьте каждую программу хорошо делать что-то одно. Чтобы сделать новую работу, создавайте заново, а не усложняйте старые программы, добавляя новые «функции».
  2. Ожидайте, что вывод каждой программы станет вводом для другой, пока неизвестной программы. Не загромождайте вывод посторонней информацией. Избегайте строго столбчатых или двоичных форматов ввода. Не настаивайте на интерактивном вводе.
  3. Проектируйте и создавайте программное обеспечение, даже операционные системы, чтобы попробовать их как можно раньше, в идеале в течение нескольких недель. Не стесняйтесь выбрасывать неуклюжие части и перестраивать их.
  4. Чтобы облегчить задачу программирования, отдавайте предпочтение инструментам, а не неквалифицированной помощи, даже если вам придется приложить усилия для создания инструментов и ожидать, что некоторые из них придется выбросить после того, как вы закончите ими пользоваться.

Позже это было обобщено Питером Х. Салусом в книге «Четверть века Unix» (1994): [1]

В своей статье по Unix 1974 года Ритчи и Томпсон приводят следующие соображения по проектированию: [3]

Части

Среда программирования UNIX

В предисловии к книге 1984 года «Среда программирования UNIX» Брайан Керниган и Роб Пайк , оба из Bell Labs , дают краткое описание архитектуры и философии Unix: [4]

Роб Пайк , соавтор книги «Среда программирования UNIX»

Несмотря на то, что система UNIX представляет ряд инновационных программ и методов, ни одна программа или идея не заставит ее работать хорошо. Вместо этого, то, что делает ее эффективной, — это подход к программированию, философия использования компьютера. Хотя эту философию нельзя записать в одном предложении, в ее основе лежит идея о том, что сила системы исходит больше от взаимоотношений между программами, чем от самих программ. Многие программы UNIX делают довольно тривиальные вещи изолированно, но в сочетании с другими программами становятся общими и полезными инструментами.

Авторы далее пишут, что их цель в этой книге — «донести философию программирования UNIX». [4]

Разработка программ в среде UNIX

Брайан Керниган подробно написал о философии Unix

В октябре 1984 года Брайан Керниган и Роб Пайк опубликовали статью под названием « Проектирование программ в среде UNIX» . В этой статье они критикуют увеличение опций и функций программ, обнаруженных в некоторых новых системах Unix, таких как 4.2BSD и System V , и объясняют философию программных инструментов Unix, каждый из которых выполняет одну общую функцию: [5]

Большая часть мощи операционной системы UNIX исходит из стиля дизайна программ, который делает программы простыми в использовании и, что еще важнее, легкими в комбинировании с другими программами. Этот стиль был назван использованием программных инструментов и больше зависит от того, как программы вписываются в среду программирования и как их можно использовать с другими программами, чем от того, как они спроектированы внутри. [...] Этот стиль был основан на использовании инструментов : использование программ по отдельности или в комбинации для выполнения работы, а не выполнение ее вручную, монолитными самодостаточными подсистемами или специальными одноразовыми программами.

Авторы противопоставляют инструменты Unix, такие как cat, более крупным программным пакетам, используемым другими системами. [5]

Дизайн cat типичен для большинства программ UNIX: он реализует одну простую, но общую функцию, которая может использоваться во многих различных приложениях (включая многие, не предусмотренные первоначальным автором). Другие команды используются для других функций. Например, существуют отдельные команды для задач файловой системы, таких как переименование файлов, их удаление или определение их размера. Другие системы вместо этого объединяют их в одну команду «файловой системы» с собственной внутренней структурой и языком команд. ( Примером может служить программа копирования файлов PIP [6] , найденная в операционных системах, таких как CP/M или RSX-11 .) Такой подход не обязательно хуже или лучше, но он определенно противоречит философии UNIX.

Дуг Макилрой о программировании в 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]

17 правил Unix Эрика Рэймонда

В своей книге «Искусство программирования в Unix» , впервые опубликованной в 2003 году [11] , Эрик С. Рэймонд (сторонник открытого исходного кода и программист) суммирует философию Unix как принцип KISS : «Keep it Simple, Stupid» («Будь проще, глупый»). [12] Он предлагает ряд правил проектирования: [1]

Майк Ганкарц: Философия UNIX

В 1994 году Майк Ганкарц, член группы Unix Engineering Group (UEG) корпорации Digital Equipment , опубликовал книгу The UNIX Philosophy , основанную на его собственной разработке порта Unix ( Ultrix ) в DEC в 1980-х годах и обсуждениях с коллегами. Он также является членом группы разработчиков X Window System и автором Ultrix Window Manager (uwm).

В книге основное внимание уделяется переносу UNIX на различные компьютеры во время войн Unix 1980-х годов и описывается его философия, согласно которой переносимость должна быть важнее эффективности использования нестандартных интерфейсов для аппаратных и графических устройств.

Девять основных «принципов», которые он считает важными, таковы:

  1. Маленькое — прекрасно.
  2. Заставьте каждую программу хорошо выполнять одну задачу.
  3. Создайте прототип как можно скорее.
  4. Выбирайте портативность вместо эффективности.
  5. Храните данные в простых текстовых файлах .
  6. Используйте возможности программного обеспечения в своих интересах.
  7. Используйте скрипты оболочки для повышения эффективности и переносимости.
  8. Избегайте использования зацикленных пользовательских интерфейсов.
  9. Сделайте каждую программу фильтром .

«Чем хуже, тем лучше»

Ричард П. Габриэль предполагает, что ключевым преимуществом Unix было то, что он воплощал философию дизайна, которую он назвал «чем хуже, тем лучше», в которой простота как интерфейса, так и реализации важнее любых других атрибутов системы, включая правильность, согласованность и полноту. Габриэль утверждает, что этот стиль дизайна имеет ключевые эволюционные преимущества, хотя он ставит под сомнение качество некоторых результатов.

Например, в ранние дни Unix использовал монолитное ядро ​​(что означает, что пользовательские процессы выполняли системные вызовы ядра все в пользовательском стеке). Если сигнал был доставлен процессу, когда он был заблокирован на долгосрочном вводе -выводе в ядре, обработка ситуации была неясной. Обработчик сигнала не мог быть выполнен, когда процесс находился в режиме ядра с конфиденциальными данными ядра в стеке.

Критика

В статье 1981 года под названием «Правда о Unix: пользовательский интерфейс ужасен » [13] , опубликованной в Datamation , Дон Норман критиковал философию дизайна Unix за ее отсутствие заботы о пользовательском интерфейсе. Опираясь на свой опыт в когнитивной науке и на текущую философию когнитивной инженерии [ 14] , он сосредоточился на том, как конечные пользователи понимают и формируют личную когнитивную модель систем — или, в случае Unix, не понимают, в результате чего катастрофические ошибки (например, потеря часа работы) становятся слишком простыми.

В подкасте On the Metal Джонатан Блоу критиковал философию UNIX как устаревшую. [15] Он утверждал, что связывание модульных инструментов приводит к очень неэффективным программам. Он говорит, что философия UNIX страдает от тех же проблем, что и микросервисы : без всеобщего надзора большие архитектуры оказываются неэффективными и непроизводительными.

Смотрите также

Примечания

  1. ^ abcde Raymond, Eric S. (2004). "Основы философии Unix". Искусство программирования Unix. Addison-Wesley Professional (опубликовано 2003-09-23). ​​ISBN 0-13-142901-9. Получено 01.11.2016 .
  2. ^ Дуг Макилрой ; EN Пинсон; BA Тейг (8 июля 1978 г.). «Система разделения времени Unix: Предисловие». Технический журнал Bell System . Bell Laboratories: 1902–1903.
  3. ^ Деннис Ритчи ; Кен Томпсон (1974), «Система разделения времени UNIX» (PDF) , Communications of the ACM , 17 (7): 365–375, doi :10.1145/361011.361061, S2CID  53235982
  4. ^ ab Керниган, Брайан В. Пайк, Роб. Среда программирования UNIX. 1984. viii
  5. ^ ab Rob Pike; Brian W. Kernighan (октябрь 1984 г.). «Проектирование программ в среде UNIX» (PDF) . AT&T Bell Laboratories Technical Journal . 63 (8). часть 2 . Получено 15 декабря 2022 г. .
  6. ^ "Руководство по операционной системе CP/M" (PDF) . 1983.
  7. ^ Деннис Ритчи (1984), «Эволюция системы разделения времени UNIX» (PDF) , Технический журнал AT&T Bell Laboratories , 63 (8): 1577–1593, doi :10.1002/j.1538-7305.1984.tb00054.x
  8. ^ Дуглас Макилрой. "Ремарка на церемонии вручения премии Японии Деннису Ритчи, 19 мая 2011 г., Мюррей-Хилл, Нью-Джерси" (PDF) . Получено 19 июня 2014 г.
  9. ^ Билл Макгонигл. «Родословная Linux — как началось веселье (2005)» . Получено 19 июня 2014 г.
  10. ^ "Интервью с Патриком Фолькердингом из Slackware". linuxquestions.org . 2012-06-07 . Получено 2015-10-24 .
  11. ^ Рэймонд, Эрик (2003-09-19). Искусство программирования Unix. Addison-Wesley. ISBN 0-13-142901-9. Получено 2009-02-09 .
  12. ^ Рэймонд, Эрик (2003-09-19). "Философия Unix в одном уроке". Искусство программирования Unix. Addison-Wesley. ISBN 0-13-142901-9. Получено 2009-02-09 .
  13. ^ Норман, Дон (1981). «Правда о Unix: пользовательский интерфейс ужасен» (PDF) . Datamation . Том 27, № 12.
  14. ^ «Устная история Unix». История науки Принстонского университета .
  15. ^ «На подкасте Metal: Джонатан Блоу».

Ссылки

Внешние ссылки