В 1970-х годах в мире появился UNIX — операционная система, из которой растут ноги у большинства современных операционок. Для своего времени это был технологический прорыв, а заложенные там принципы мы используем до сих пор. В этой статье — что же там было такого революционного.
Статья расширяет кругозор и помогает лучше понять информатику, но не имеет прикладной ценности. Если вам нужно что-то прикладное — прочитайте про размеры элементов в CSS .
Однозадачные компьютеры
Когда компьютеры только начали появляться, то работали они примерно так:
- Компьютер включался.
- Находил на носителе информации первую команду программы, которую нужно выполнить.
- Выполнял эту команду и переходил к следующей.
- Так происходило, пока в программе не заканчивались шаги или она сама не останавливалась. Тогда специальными командами оператор говорил компьютеру, где найти код для другой программы, или запускал первую программу заново.
Получается, что они работали в однозадачном режиме: работает только одна программа, а для запуска второй нужно остановить первую. По этому принципу до сих пор работают контроллеры в ваших микроволновках и холодильниках, а также контроллеры типа Arduino.
Сначала такой подход всех устраивал, потом стало неудобно.
Многозадачные компьютеры
Чтобы компьютер работал более эффективно, программисты написали код, который управляет работой всего компьютера — операционную систему.
Первые операционные системы были псевдомногозадачными. Это значит, что они не запускали одновременно несколько программ, а в цикле по очереди брали по одной команде из каждой программы и выполняли их. Так как переключение между командами из разных программ происходит быстро, то создаётся впечатление, что они работают одновременно.
Потом эту проблему тоже решили, и компьютер мог выполнять несколько программ действительно одновременно , чтобы они не мешали друг другу. Так появились многозадачные операционные системы.
Но в то время домашних компьютеров не было, а желающих поработать за университетским компьютером было много, поэтому все работали по очереди. Например, один лаборант работал на нём с часу до двух, второй — с двух до трёх, а научный руководитель работал за компьютером с трёх до шести.
При этом мощности компьютеров уже хватало на то, чтобы с ним мог работать второй пользователь, не замедляя работу первого. А вот операционных систем, которые бы так умели, — не было. И здесь появляется UNIX.
UNIX — многопользовательская операционная система
Создатели UNIX Кен Томпсон и Деннис Ритчи (который потом напишет язык C) решили проблему так:
- Есть один центральный компьютер — сервер, на котором выполняются все программы.
- Если кто-то хочет поработать за этим компьютером, то он подключается к нему не напрямую, а через терминал. Терминал — это монитор и клавиатура, которые соединены с сервером. Сам терминал ничего не считает, а только отправляет и получает результаты с сервера.
- Пользователь вводит свой логин и пароль и получает право запускать на сервере программы, которые ему нужны. При этом на сервере может быть запущено одновременно много программ от разных пользователей.
- Сервер помнит, кто на каком терминале зашёл под каким логином, поэтому результаты работы программы он отправляет в нужный терминал.
Со стороны пользователя кажется, что весь сервер в его распоряжении, но на самом деле сервером могут пользоваться одновременно десятки человек и не знать о том, что сервер выполняет что-то ещё. Сейчас это звучит обычно и примитивно, но для того времени это был прорыв.
Операционную систему, которая умеет всё это делать, назвали UNIX — сокращение от Uniplexed Information and Computing Service (единый информационно-вычислительный сервис). Изначально это называлось UNICS, но потом последние две буквы превратились в одну.
Что нового появилось в UNIX, чего до неё не было
Вот что впервые появилось именно в UNIX — и в виде идей, и в виде готового кода:
Файловая система с любой глубиной вложенности . Мы сейчас привыкли к папкам, в которых можно создавать другие папки, а в них третьи и так почти до бесконечности. Но до UNIX глубина вложенности была ограничена — нельзя было создать, например, папку внутри другой папки.
Модель работы с файлами . Пользователю раньше нужно было самому предусмотреть формат, размер и физическое размещение файлов на диске. В UNIX это всё взяла на себя операционная система.
Работа с программами напрямую. До UNIX настройку работы всех программ можно было сделать только в командной строке: запустил → компьютер что-то посчитал → показал результат. Если нужно изменить параметры, то это надо было делать через командную строку . В новой системе можно было менять настройки программ прямо внутри них — именно так и устроены сейчас все программы.
Вывод всего как текста . Раньше компьютеры работали с битами и выводили битовые последовательности. Их нужно было отдельно разбивать на нужные фрагменты или использовать встроенные программы для перевода битов в байты, а из них — в текст.
В UNIX единица вывода — это не бит, а байт. А в байт как раз умещается символ текста, а значит, с ним можно работать как с текстом: искать, склеивать с другими, отправлять в файл и так далее.
Регулярные выражения стали использоваться не только в профессиональных задачах, но и как основа для обработки вывода программ.
Язык C . Этот язык появился в UNIX как замена языка B. Но B был интерпретируемым языком (как Python), и для запуска программ нужен был его интерпретатор. Язык C — компилируемый, а значит, готовые программы можно запускать на любом совместимом компьютере, даже если на нём нет компилятора C .
Протокол TCP/IP . До UNIX этот протокол не был популярен, и компьютеры связывались друг с другом по более старому протоколу, который не имел столько возможностей. Теперь благодаря этой операционной системе весь мир пользуется интернетом , построенным на протоколе TCP/IP. Справедливости ради, этот протокол появился не в первой поставке UNIX.
Как работают в UNIX
Для управления этой системой почти всегда используется командная строка. Есть, конечно, и графический интерфейс для некоторых систем и задач, но штука в том, что UNIX заточен на работу в серверах. А у серверов чаще всего нет ни клавиатуры, ни монитора — только сетевые соединения , через которые пользователи и соединяются с сервером, чтобы им управлять.
Источник: dzen.ru
Системы Unix: особенности и описание
Unix – это семейство переносимых, многопользовательских и многозадачных операционных систем. Базируются на идеях проекта под названием AT
Что такое unix подобные операционные системы
Unix VS Linux. UNIX и Unix подобная система Linux в чем отличие? Маленький секрет MAC OS
Через месяц постоянной работы Томпсон развернул ОС с ассемблером, редактором и оболочкой под именем YEW-nihks. Последняя базировалась на ранних наработках Multics. Unix оказался более компактным. Он представил систему однозадачного типа.
Unix изначально был создан на Assembler. Это продолжалось до 1973 года. Тогда появилось его четвертое издание – на C. Изменение стало одним из революционных, ведь Юникс-системы казались слишком сложными для написания на языках высокого уровня.
В начале 80-х Unix стал активно распространяться, особенно в научной сфере. В 1990-х были разработаны дистрибутивы двух операционных систем, благодаря которым Unix стал особо популярен у «обычных» пользователей.
Сейчас большинство современных ОС и мобильных платформ работают под управлением Unix. Такие операционные системы принадлежат компании Open Group. Первая версия стандарта спецификации Unix V7 послужила четвертой модификацией, созданной в 2013 году.
Концепции
Рассматриваемые ОС используют простой тест при хранении данных, а также иерархические файловые системы и конкретные типы взаимодействия между процессорами устройства (IPC).
Пользователи смогут связать здесь инструменты и небольшое программное обеспечение. Делается это при помощи интерпретатора командной строки. Так называется программа пользовательского уровня. Ее аналог есть в Windows – служба CMD.
Разработчики смогут написать собственную оболочку, а затем добавить новые команды без ее изменения. Связано это с тем, что Юникс использует один и тот же язык как для сценариев, так и для интерактивных команд.
Концепции являются достаточно влиятельными. На то существуют различные причины:
- ОС рассматривают все типы файлов в виде простых байтовых массивов. Последние формируют упрощенную файловую модель.
- Использование при работе иерархической файловой системы с произвольно вложенными подкаталогами. До появления таких ОС компьютеры умели делить память устройства на разделы исключительно с фиксированным количеством уровней.
- Наличие модульности и возможности многократного использования.
Unix сформировали некий набор культурных правил для разработки программного обеспечения. Такие системы имеют собственную философию, которая пользуется спросом у современных программистов.
Архитектура
Архитектура UNIX является многоуровневой. На нижнем уровне (он расположен над оборудованием) функционирует ядро системы. Его функции будут доступны при помощи интерфейса системных вызовов. Он формирует второй уровень. Далее будут работать командные интерпретаторы, а также утилиты и команды системного администрирования.
Сюда же можно отнести протоколы, драйверы коммуникационного характера – то, что обычно относится к непосредственному программному обеспечению. Внешний уровень будет образовываться из прикладных программ пользователей, а также сетевых и иных коммуникационных служб, утилит и СУБД.
Unix поддерживает следующие возможности:
- многозадачность;
- собственный интерфейс разработки;
- применение файлов в качестве абстракций;
- многопользовательский интерфейс;
- встроенная сеть со стандартом TCP/IP.
Также в Юникс присутствуют постоянные системные процессы. Они носят название «демонов» (daemons). Управляются при помощи init или inet.
О файлах и процессах
В системах Unix все является или файлом, или процессом. Процесс – исполняемая программа, которая идентифицируется при помощи уникального идентификатора процессора PID. Файл здесь представлен некий набором информации в электронном виде. Он создается пользователями при помощи успешно функционирующих компиляторов, а также всевозможных текстовых редакторов.
Все файлы в рассматриваемых системах группируются через структуру каталогов. Файловая система складывает собственную иерархию, которая чем-то напоминает перевернутое дерево. Вершина по традиции носит название root. Записывается в качестве косой черты – слеша.
Текстовые файлы в oc могут быть отображены на дисплее, их можно редактировать. Для систем на базе Unix характерно использование нескольких программ для работы с текстом. В качестве наиболее популярных применяются:
Второй вариант является примитивным. Он предоставлен пользователям вместе со встроенным почтовым сервисом Pine.
Основные элементы
ОС на базе Unix обладают следующими ключевыми компонентами:
- Ядро. Это главная программа, отвечающая за управление ОС. Она манипулирует памятью, системными вызовами, а также иными функциями низкого уровня. Предоставляет драйверы для взаимодействия и управления различным оборудованием.
- Shell-оболочка. Представляет собой интерактивную программу, обеспечивающую интерфейс между ядром и пользователями. Она интерпретирует команды, введенные клиентом или предоставленные сценариями оболочки, после чего передает их ядру для дальнейшей обработки.
- Файловая система. Она использует иерархическую структуру с корневым каталогом, расположенным в самом верху. Для определения смонтированных файловых систем в Unix и Unix-подобной системе, используется mount-команда.
- Команды. Они включают в себя крупное ядро стандартных утилит для редактирования текста, формирования, манипулирования и компиляции приложений. При помощи команд тут удается работать с пользовательской средой, получать сведения об ОС, а также ее клиентах. После отправки вписанного алгоритма происходит его интерпретация и передача ядру для реализации.
В Юникс пользователи могут работать через командную строку, за счет которой удается добиться максимального контроля и гибкости. Менее опытные клиенты обращаются к помощи встроенного удобного графического интерфейса.
Ядро и вызовы
Ключевыми функциями ядра в Unix (оно может быть монолитным или модульным) относят:
- управление памятью;
- обработку прерываний;
- синхронизацию процессов;
- управление дисками и буферизацию информации;
- низкоуровневую поддержку устройств при помощи драйверов;
- планирование и переключение процессов.
Системные вызовы отвечают за обеспечение:
- сопоставление пользовательских действий с запросами драйверов для тех или иных устройств;
- создание и прекращение процессов;
- доступ к файлам, а также дискам на компьютере;
- поддержку терминальных функций;
- реализацию ввода-вывода.
Системные вызовы преобразовывают процесс, функционирующий в пользовательском режиме, в защищенный. Он будет работать в режиме ядра. Такой подход позволяет процессу вызывать защищенные процедуры ядра для выполнения системных функций.
Подобные вызовы отвечают за обеспечение программного интерфейса, необходимого для доступа к процедурам ядра. С их помощью гарантируется управление памятью, пространством на дисках, а также периферийными устройствами. В ОС вызовы будут оформляться в качестве библиотеки времени выполнения. Многие из них доступны при помощи командного интерпретатора.
Процессы ядра и пользователя
- будут защищены от других пользовательских процессов;
- не обладают доступом к процедурам ядра, исключение – через системные вызовы;
- не способны непосредственно работать с пространством памяти ядра.
Пространство ядра – это область памяти, в которой процессы ядра реализуют его службы. Любой процесс, выполняемый в пространстве ядра, относится к работающему в его режиме.
Пространство ядра – это привилегированная область. Пользователь сможет получить к ней доступ только при помощи интерфейса системных вызовов.
Назначение аргументов оболочки
Пользователи взаимодействуют с Unix при помощи специальной программы – оболочки. Она запрашивает команды и передает их ОС для дальнейшей обработки после непосредственного ввода. Оболочки включают в себя имя команды, а также аргументы.
Некоторые аргументы, получившие название опций, вводятся при помощи символа «-». Они корректируют поведение команды.
Оболочка поставляется в двух вариантов:
Каждая оболочка использует определенный символ или их строки для запроса у пользователя команд. Этот процесс носит название приглашения по умолчанию для bash
Unix поддерживают несколько пользователей одновременно. Это означает что для работы с системной клиент должен сначала идентифицировать себя. Соответствующая операция называется входом в систему. Когда клиент подключается к компьютеру, у него запрашивают логин (имя-идентификатор) и пароль.
Терминал
Для управления Unix-системами в основном используется командная строка. Она реализована в так называемом терминале. Это программное обеспечение обрабатывает запрос, поданный клиентом, а затем выводит ему результат. Промежуточное звено между компьютером и пользователем. Иногда называется оболочкой.
Связано это с тем, что терминал охватывает операционную систему based on Unix, чтобы скрыть некоторые ее особенности (сложности функционирования) и сделать взаимодействие более простым.
Терминал – программа, поддерживающая возможность запуска других приложений вместо выполнения различных вычислений. Наиболее популярный терминал Unix – это Bash. Он поставляется в большинстве реализацию Юникс по умолчанию. Предусматривает богатый ассортимент инструментов для пользовательской работы. Они напоминают ПО из Windows.
Команды будут короткими – всего в несколько символов, но их имена бывает на так просто понять. Выводом являются текстовые строки, а не визуальные объекты. Терминалы способны объединять имеющиеся инструменты в крупные и мощные контейнеры, помогающие работать с крупными объемами информации автоматизировано.
- делает работу пользователя наиболее продуктивной;
- способствует повышению производительности различных операций;
- позволяет повторять одни и те же операции при помощи нескольких элементарных команд.
При помощи терминала часто обеспечивается управление удаленными компьютерами и суперкомпьютерами. Знакомство с данным ПО обязательно для использования узкоспециализированных инструментов и ресурсов, включая высокопроизводительные вычислительные системы.
Unix-подобные системы
Unix-подобная операционная система – это понятие, которое до сих пор не имеет четкого определения. Термин включает в себя множество ОС. Это означает, в данную категорию вносят системы, которые ведут себя как Unix. Они также предоставляют клиентам аналогичные утилиты, не обязательно лицензированные The Open Group.
Unix подобные ОС могут иметь как открытый исходный код, так и нет. Некоторые делят системы на базе Юникс на несколько категорий:
- основанные на оригинальной базе Bell Labs и AT
- соответствующие единой спецификации;
- запатентованные варианты – для веб-серверов и мобильных устройств.
Далее будут представлены ОС base on Unix. Они наиболее популярны среди современных пользователей.
Linux
Это общее название Юникс-систем, базирующихся на одноименном ядре. Здесь поддерживается реализация:
- многозадачности;
- многопользовательского режима;
- управления устройствами и памятью;
- выполнения различных программ и приложений.
Linux – это специальное программное обеспечение, управляющее всеми аппаратными ресурсами, которые связаны со стационарными компьютерами и ноутбуками. Обладает множеством дистрибутивов – Mint, PuppyRUS, Ubuntu и так далее.
Используется для серверного программирования, в мобильных устройствах, а также в суперкомпьютерах и игровых консолях. Linux широко распространена в искусственном интеллекте. Это означает, что на ее базе создаются «умные» гаджеты.
BSD
Это программное обеспечение Berkeley, которое послужило производной Unix. Первая разработка появилась в 1977 году. Разработка этого ПО прекратилось в 1995. Сейчас оригинальной BSD нет, зато полно потомков. Они развиваются в качестве проектов с открытыми исходными кодами.
Наиболее популярным является FreeBSD. Это операционная система общего назначения. Она полностью функциональна, в то время как Linux – это просто ядро. Включает в себя:
- драйверы;
- ядро;
- документацию;
- утилиты.
FreeBSD не имеет графического интерфейса по умолчанию. Данная проблема исправляется при помощи одной из наиболее популярных сред – Xfce, KDE, GNOME.
Также есть NetBSD. Он обладает большей ориентированностью на чистый дизайн и простоту переносимости между архитектурами. Работает практически на любом устройстве. Используется для крупномасштабных серверов, а также встроенных систем.
Solaris
Еще один неплохой вариант, разработанный в 1983 году. SunOS создали для того, чтобы обеспечить рабочую станцию и сервер, а не персональный рабочий стол. До 1992 года данные системы были образованы на базе BSD, после – начали использовать более современную Unix. Получившийся продукт получил название Oracle Solaris.
Изначально проект был закрытым. В 2005 году появилась кодовая база по лицензии, одобренной Open Source Initiative. Она опирается на Solaris 10 и называется OpenSolaris.
OS X
Современные Mac разработаны на базе Unix. До MacOS 9 операционные системы Apple формировались только собственными силами компании. В 2001 году все изменилось. Это значит, что появился совершенно новый продукт – MacOS X. В 2012 году он получил название OS X.
Это итоговая версия для iOS. Данная система поддерживается мобильными устройствами от Apple. Предоставляет не только командную строку, но и весьма дружелюбный пользовательский интерфейс. Может быть несколько непривычна пользователям Windows, но на современном рынке весьма распространена.
Теперь понятно, какие ОС относятся к Unix. Пользоваться можно любой из них. Непревзойденный лидер – это семейство Linux.
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!
Источник: otus.ru
Философия Unix: Краткое введение
Философия 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-скрипты для увеличения мощи и портативности, избегайте скрытых пользовательских интерфейсов и сделайте каждую программу фильтром. К последним относятся: позвольте пользователю настраивать среду, делайте ядра операционных систем маленькими и легкими, используйте строчные буквы и будьте лаконичны, берегите деревья, тишина — это золото, думайте параллельно, сумма частей больше целого, хуже — лучше, и мыслите иерархически.
Материал подготовлен в рамках курса «Программист С». Если вам интересно узнать подробнее о формате обучения и программе, познакомиться с преподавателем курса — приглашаем на день открытых дверей онлайн. Регистрация здесь.
- язык программирования c
- c developer
- unix
- философия unix
- Блог компании OTUS
- Программирование
- C
Источник: habr.com