Философия Unix лежит в основе не только оригинальной UNIX, разрабатываемой Кеном Томпсоном в Bell Labs с 1969 года, но и ее многочисленных прямых потомков и клонов, к коим относятся Solaris, Linux и семейство BSD(1), называемые в совокупности Unix-подобными операционными системами. Она оказалась определяющим фактором быстрого роста и успеха Linux и стала причиной того, что эти операционные системы до сих пор считаются лучшими(1) операционными системами, разработанными на сегодняшний день, несмотря на то, что они, безусловно, являются самыми старыми операционными системами в широком доступе.

Не существует единого стандартизированного изложения философии. Но если бы ее нужно было описать одним словом, то это слово было бы модульность, что подразумевает систему, состоящую из компонентов (то есть модулей), которые могут быть собраны вместе и скомпонованы различными способами.

Модульность является обычным явлением в природе, и ее применение к продуктам, созданным руками человека (как товарам, так и услугам), было ключевым фактором в развитии и прогрессе индустриального общества. Тем не менее, она относительно мало использовалась для компьютерного программного обеспечения до разработки UNIX, и даже сегодня ее огромные преимущества не могут быть полностью раскрыты другими операционными системами, в первую очередь системами Microsoft Windows.

Несколько более длинное и более традиционное изложение философии Unix, но которое по сути говорит то же самое, было бы следующим: разрабатывайте программы так, чтобы они выполняли только одну задачу, но делали это хорошо, и чтобы они хорошо работали вместе с другими программами(3)..

Философия обычно излагается в виде серии кратких правил или принципов(4). Хотя все они обычно логически вытекают из концепции модульности (например, небольшой размер, эффективность, простые интерфейсы и легкость понимания), думаю будет полезно сформулировать и обсудить их по отдельности.

Среди этих принципов выделяют так называемое правило композиции, которое гласит, что программы (из которых состоит модульная операционная система) должны разрабатываться таким образом, чтобы их можно было легко подключать к другим программам. Еще одно — правило тишины, которое гласит, что программы по умолчанию не должны ничего говорить (т. е. не выдавать никаких результатов), кроме того, что может быть интересно, необычно или удивительно.

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

Самый известный из этих интерфейсов, который к тому же является одним из самых важных нововведений UNIX — это pipe (конвейер, пайп). Представленные вертикальным символом черты в командах, вводимых пользователем, пайпы позволяют комбинировать программы так, что выходные данные одной становятся входными данными другой. Такие конвейеры команд позволяют легко выполнять узкоспециализированные операции, которые были бы достаточно затруднительными или практически невозможными при использовании немодульной системы.

Другим важным принципом этой философии является использование читаемого текста (plain text — т. е. человеко читаемых буквенно-цифровых символов) вместо двоичных файлов (которые не очень легко читаются человеком) в максимально возможной степени для входных и выходных данных программ и файлов конфигурации. Это потому, что текст — это универсальный интерфейс, то есть, он может позволить программам легко взаимодействовать друг с другом в виде текстовых выходных и входных данных, избавляя их от трудностей, которые возникли бы у них, если бы каждая из них использовала взаимно несовместимые двоичные форматы, и потому, что с такими файлами людям легче взаимодействовать. Последнее означает, что людям легко изучать, исправлять, улучшать и расширять такие файлы, а также переносить (т. е. модифицировать) их на новые платформы (т. е. другие комбинации операционных систем и оборудования).

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

Исторический контекст

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

Еще одним важным фактором стремления Томпсона к максимальной простоте и эффективности был тот факт, что он изначально написал свою операционную систему для компьютера PDP-7, который имел чрезвычайно маленькую оперативную память, всего 4000 18-битных слов. (Однако это считалось вполне приемлемым, когда этот компьютер был создан в 1965 году, особенно с учетом его низкой стоимости — всего 72000$ за базовую модель.)

Хотя за последующие десятилетия размер и сложность Unix-подобных операционных систем значительно увеличились в ответ на непрерывное снижение стоимости памяти и повышение производительности CPU (центрального процессора), наследие первоначальной простоты продолжает жить, а Unix-подобные операционные системы по-прежнему гораздо более модульны, чем большинство других систем (в первую очередь систем Microsoft Windows).

Снижение доли рынка UNIX по сравнению с системами Microsoft Windows, начавшееся в 1990-х годах, иногда объяснялось мнением, что UNIX — это старая, неуклюжая система, которая изжила себя. Однако оказалось, что это снижение на самом деле не связано ни с каким-либо внутренним дефектом ни в философии, ни в самой операционной системе, ни с каким-либо врожденным превосходством систем Microsoft. Скорее, это было результатом того факта, что философия была разработана для другой эпохи, когда к программному обеспечению относились как к математике или любому другому научному знанию. То есть программное обеспечение было чем-то, чем можно было поделиться и улучшить для всеобщего блага, а не чем-то, что нужно было копить и оберегать ради увеличения корпоративной прибыли.

Таким образом, вместо отказа от философии требовалось что-то дополнительное, чтобы операционные системы, основанные на ней, могли снова процветать и расти в этой новой среде. Это дополнение появилось в форме концепции лицензирования свободного/бесплатного программного обеспечения, которая сохраняет программы бесплатными не только в финансовом смысле, но и в отношении их использования (включая копирование, изменение, расширение и распространение). Особенно важным в этом контексте было развитие концепции copyleft (авторского лева), которая предотвращает появление доминирующих версий, требующих использования дорогостоящего оборудования, а также способствует совместимости между различными версиями, не препятствуя инновациям. Результатом стало возвращение широкой общественности права собственности на Unix-подобные операционные системы и прикладные программы для использования с ними, что как следствие привело к оживлению технологического развития.

Контраст с проприетарными системами

Философия Unix явно сильно отличается от философии, лежащей в основе операционных систем Microsoft Windows. Даже больше, эти системы характеризуются некоторыми совсем противоположными качествами. По сути, они монолитны (т. е. не имеют модульности). Конкретные характеристики включают чрезвычайно большие размеры программ, большую сложность исходного кода, очевидное отсутствие мастерства во многих аспектах (например, плохая безопасность), отсутствие прозрачности (исходный код является тщательно охраняемым секретом) и отсутствие портативности (т.е. может работать только на одном базовом типе процессора).

Исходный код (source code, также называемый source или code) — это версия программного обеспечения (обычно прикладная программа или операционная система) в том виде, в котором она изначально написана (т. е. набрана на компьютере) человеком в виде обычного текста. Он может быть написан на любом из многочисленных языков программирования, одними из самых популярных из которых являются C, C ++, Java, Perl, PHP, Python и Tcl/Tk.

Этот резкий контраст вполне естественен, поскольку операционные системы Microsoft Windows, как и многие другие проприетарные (т. е. коммерческие) программы, возникли в другую эпоху и руководствуются совершенно другим набором приоритетов. Упор делается на завоевание или поддержание доли рынка и максимизацию прибыли, и мало внимания уделяется приоритетам разработчиков UNIX. Вероятно, также играет роль совершенно другая модель разработки (например, централизованная в противовес распределенной разработке).

Конечно, в таких рыночных целях нет ничего плохого. Даже больше, они, в целом, полезны, поскольку именно они были причиной огромного экономического роста, который произошел во всем мире в начале последнего тысячелетия. Тем не менее, как быстро отметят экономисты, эти цели приносят максимальную пользу обществу только там, где существует свободная конкуренция (т. е. существует множество продавцов и покупателей, конкурирующих на основе цены и качества), а не там, где рынки (в силу самых разных обстоятельств) становятся монополистическими (т. е. характеризуются только одним поставщиком или продавцом продукта без хороших альтернатив).

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

За пределами проприетарного UNIX

Большой успех UNIX и его философии оказал влияние далеко за пределы оригинальной операционной системы, которая была разработана в Bell Labs, а затем в Калифорнийском университете в Беркли (UCB). Возможно, наиболее важно то, что они формируют основу Linux, которая в настоящее время является самой быстрорастущей операционной системой и которая, по мнению многих компьютерных экспертов, может стать доминирующей системой для многих приложений в будущем.

Linux удалось вернуть преимущества философии Unix на первый план и в целом вернуть Unix-подобные операционные системы на их прежнюю лидирующую роль, в основном за счет использования лицензий свободного программного обеспечения. Также основополагающим фактором его успеха, а также растущего успеха других свободных программ стала доступность интернета, позволяющая программистам по всему миру сотрудничать. Это во многом помогло уравнять правила игры и позволить бесплатным программам эффективно конкурировать с проприетарных программами (и, возможно, даже поставить под угрозу модель разработки проприетарных программ), несмотря на огромные финансовые ресурсы последних.

Фактически, использование лицензирования свободного программного обеспечения вместе с возможностью для программистов (а также тестировщиков и обычных пользователей) участвовать в процессе разработки независимо от географического положения или членства в организации еще больше расширило базовую концепцию философии Unix (т. е. модульность) и привело к значительному увеличению преимуществ. Это то, что можно назвать философией Linux.

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

________

(1) Помимо FreeBSD, NetBSD и OpenBSD, сюда также входит Darwin, на котором базируется достаточно успешная Mac OS X.

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

(3) Дуг Макилрой, изобретатель пайпов Unix, резюмировал философию в книге Питера Х. Салуса «Четверть века Unix» в 1994 году следующим образом: «Пишите программы, которые делают одно и делают это хорошо. Пишите программы для совместной работы. Пишите программы для обработки текстовых потоков, потому что это универсальный интерфейс ". Обычно это сильно сокращается до «Делай одно, делай это хорошо». Из трех частей только третья относится к Unix-подобным операционным системам.

(4) Эта философия была хорошо выражена Майком Ганкарцем в его книге 1995 года «Философия UNIX» как набор основных и второстепенных принципов. К первым относятся: маленький — красивый, заставьте каждую программу делать что-то хорошо, как можно скорее создавайте прототип, выберите портативность, а не эффективность, храните числовые данные в неструктурированных файлах, используйте программные средства себе на пользу, используйте shell-скрипты для увеличения мощи и портативности, избегайте скрытых пользовательских интерфейсов и сделайте каждую программу фильтром. К последним относятся: позвольте пользователю настраивать среду, делайте ядра операционных систем маленькими и легкими, используйте строчные буквы и будьте лаконичны, берегите деревья, тишина — это золото, думайте параллельно, сумма частей больше целого, хуже — лучше, и мыслите иерархически.


Материал подготовлен в рамках курса «Программист С». Если вам интересно узнать подробнее о формате обучения и программе, познакомиться с преподавателем курса — приглашаем на день открытых дверей онлайн. Регистрация здесь.

Комментарии (10)


  1. ophil
    24.09.2021 00:33
    +6

    спасибо автору, интересно, заставило задуматься. Исходя из своего 25+ летнего опыта, выделил бы в дополнение такой список по субж.

    1. everything is file - состояние системы, конфиги, процессы - всё доступно как файл. Файлы, точнее, древовидная структура как именованная иерархия объектов, возможно, была известна и ранее, но массовой стала именно после Unix

    2. правильная программа принимает StdIn на вход и выдаёт StdOut на выходе - это основа конвейеров и стандартного набора утилит Юникс. Это техническая сторона модульности системы, несмотря на то что само ядро в основном монолит.

    3. система многопользовательская с самой первой версии, хотя Кен Томпсон писАл её как бы на персональном компьютере. Разделение владения объекта на ID юзера, группу и всех прочих, и 3 прав доступа - чтение, запись, исполнение - итого 9 бит прав доступа (+3 suid'ных бита), оказалось на удивление гибким и адаптируемым до всемирной сети.


    1. ophil
      24.09.2021 01:37
      +5

      4. открытость системы - Unix вскоре был переписан на Си и доступен в исходном коде вместе с компилятором Си на очень мягких условиях. Linux, кстати, возник из Minix, только благодаря тому что Andew S. Tanenbaum не позволял развивать её всем желающим.


      1. le2
        27.09.2021 18:10

        на мягких?! Лицензия для университетов стоила порядка 100 тыс долларов без всякой поддержки со стороный Bell labs. Продажа оригинального unix для коммерческого использования также практически не велась, ибо была запрещена по антимонопольному законодательству.

        Linux, все же, я думаю, возник по причине появления дешевого 80386 процессора с защищенным режимом и возникновения Интернета. Корпорациям понадобились сервера в неприличных количествах. Всё было бы иначе, если бы Майкрософт сориентировался и выкатил Винду баксов 30 для этих целей. Линуса Торвальдса, по правилам этого мира, без Интернета также бы корпорации сгноили в судах. Но вместо этого Линукс начали писать инженеры корпораций на окладе. 99.9% кода написано ими.


        1. ophil
          27.09.2021 20:40

          100к долларов, скорее всего, ошибка. Вот, например, на сайте https://www.osp.ru/os/1995/01/178547 - "Четверть века операционной системы UNIX", автор С. Д. Кузнецов:
          Хотя для работы на уровне исходных текстов уже тогда требовалось приобретение лицензии Bell Labs, стоимость этой лицензии не создавала особых проблем даже для университетов
          Более похож на правду рассказ, что исходники Юникс какое-то время раздавали по цене носителя - магнитной ленты. Но важнее другое - Bell Labs не запрещала развивать систему, нечто вроде BSD License ещё до её возникновения.


          1. le2
            28.09.2021 09:33
            +2

            Время UNIX. A History and a Memoir | Керниган Брайан У.
            страница 167:
            «В 1973 году AT&T за номинальную плату начала продавать лицензии на Unix университетам. По большей части это были лицензии на 6-ю редакцию, которая вышла в 1975 году. Было и несколько коммерческих лицензий стоимостью 20 тысяч долларов. В современном эквиваленте эта сумма превышает 100 тысяч долларов. Лицензия давала возможность получить исходный код ОС, но не поддержку. ».

            Да, вероятно, вы правы.
            BSD — просто переписали систему, потому что интерфейсы не защищены законом. Потом, когда приняли стандарт POSIX запрещать стало ещё сложнее. Тем не менее, думаю, Линуса Торвальдса, при желании, могли бы прищемить, если бы не было столько заинтересантов в бесплатном UNIX.


  1. Gorthauer87
    24.09.2021 00:41
    +1

    По ощущениям это довольно старая статья. Сейчас мир стал куда сложнее и запутаннее.


    1. victor_1212
      24.09.2021 03:24

      вы правы, легко проверить оригинал "The Unix Philosophy: A Brief Introduction ...Created August 6, 2006" , см

      http://www.linfo.org/unix_philosophy.html


  1. Ulys-ses
    27.09.2021 23:14
    +1

    Я думаю, Windows выиграла у *nix'ов именно благодаря своей монолитности: простому юзеру проще разобраться с одной программой, которая сразу сделает то, что ему нужно, чем выстравать взаимодействие нескольких. К тому же, в случае одной программы, он сразу знает, куда обратиться в случае проблем.

    Сейчас Linux выигрывает благодаря своей бесплатности, чему в значительной степени способствует жадность Microsoft'а. Чем больше они закручивают гайки с лицензированием, тем больше пользователей от них уходит. А, когда уходят разработчики (которые тоже не особо хотят платить за Windows), уходят и корпорации. Впрочем, возможно, они одумаются.

    А вся эта философия интересна только гикам. Сделал программку для себя, выложил и трава не расти. Не нравится - ищи другое. Или сам сделай. Зато, если кто-то пользуется, чувствуешь себя творцом. А нет - значит, не оценили.


    1. le2
      28.09.2021 09:51
      +1

      Корпорации оплатили разработку сервера, суперкомпьютера, телефона на nix'ах. Но не оплачивала декстоп, кроме MacOS и ChromeOS.

      А дальше всем нужна одна ось, одна процессорная архитектура для десктопа. Очень дорого портировать на весь зоопарк, даже на две оси. Главная проблема — с драйверами, все потому что ошибки есть не только в софте, но и в харде. Однажды я писал драйвер для «стандартных» Bluetooth-usb-свистков. Это смерть. Они все разные. Например один иногда не реагирует на стартовую команду, надо слать второй раз и все в таком же духе. То есть железо должно работать с программными костылями. Написать драйвер по-спецификации просто. Дорого и муторно сделать поддержку и отладку всего зоопарка. По этому большинство вендоров по правилу Паретто напишут один драйвер для одной оси и на этом успокоятся.

      Мнение пользователей мало кого интересует. Сам Линус Торвальдс в интервью ставит на SteamOS. Представьте что в SteamOS будет достаточно надежный античит и пользователей просто перестанут пускать на игровые сервера без этой системы. Или SteamOS станет достаточно качественной, а вместе с бесплатностью станет поставляться сразу со всеми новыми компьютерами.


      1. Ulys-ses
        28.09.2021 10:26

        Мнение пользователей мало кого интересует.

        В мире свободного ПО - да. В мире платного - куда от этого деться. Как Микрософт ни ругай, но они что-то делают. Например, вернули (почти) нормальное меню.