На чем написан unix
Ранняя история UNIX
Это перевод фрагмента из статьи, который, на мой взгляд, уместно вынести в отдельный пост. Основная статья: habrahabr.ru/post/193798
Проект МАС (Multiple Access Computer, Machine-Aided Cognition, Man and Computer) начался как чисто исследовательский в MIT в 1963 году. Потом он разросся в лабораторию компьютерных наук (LCS), а в наши дни назыается Лаборатория компьютерных наук и искусственного интеллекта
В начале 60-х был всплеск интереса к системам с разделением времени. Джон МакКарти написал заметку под заглавием “Программа для оператора с разделением времени для проекта IBM 709” в 1959 году. Корбато, Мервин-Даггет и Далей в 1962 году написали в статье, что “мы на пороге третьего глобального изменения к подходу использования компьюьтеров, из-за разделения времени”. Сначала это рассматривали как способ поднять эффективность использования компьютера, но очень быстро пришли к идее многопользовательской системы. Деннис Ритчи потом скажет, что самый медленный этап в цикле “написать-скомпилировать-выполнить-отладить” стал определяться человеком, а не машиной.
В рамках проекта МАС получился значительный вклад в системы с разделяемым временем, включая разработку операционной системы (тогда таких слов не было, но давайте так говорить для определенности — прим. перев.) CTSS (Compatible Time-Sharing System). Во второй половине 60-х было создано несколько других систем с разделением времени, например BBN, DTSS, JOSS, SDC, и пр. Но все это не имеет отношения к этой статье. А вот Multiplexed Information and Computing Service (MULTICS) — имеет.
Multics
Это совместная разработка MIT, Bell Telephone Laboratories (BTL) и General Electric (GE) по созданию ОС с разделением времени для компьютера GE-645.
В то время “использовать компьютер” значило практически исключительно “программировать”. То есть, необходимо было более эффективно выполнять упомянутый выше цикл «написать-отладить».
Хотя BTL вышел из проекта, некоторые его сотрудники захотели продолжить самостоятельно. Например, Кен Томпсон, Деннис Ритчи, Стью Фельдман, Дуг МакИлрой, Боб Моррис, Джо Оссанна. Томпсон работал над игрой Space Travel на GE-635. Ее написали сначала для Multics, а потом переписали на Фортране под GECOS на GE-635. Игра моделировала тела Солнечной системы, а игроку надо было посадить корабль куда-нибудь на планету или спутник. Ни софт, ни железо этого компьютера не годились для такой игры. Томпсон искал альтернативу, и переписал игру под бесхозный PDP-7. Память была объемом 8К 18-битных слов, и еще был процессор векторного дисплея для вывода красивой для того времени графики. Томпсон с помощью Ритчи переписал игру для PDP-7 на ассемблере. В процессе работы также получился софтверный блок работы с плавающей запятой. Игра работала на голом железе, без ОС.
Нулевое издание (конец 1969 года)
Первая версия команды cp обрабатывала аргументы попарно:
Команда dsw (delete using switches) позволяла интерактивно удалять файлы.
UNIX также работал на PDP-9. В 1969 году также запустили первый узел ARPANET и опубликовали первый RFC.
Группа разработчиков UNIX уболтала BTL купить более продвинутый компьютер, PDP-11/20 с 24 Кб памяти. Они пообещали написать систему правки и редактирования документации для запуска без ОС, а UNIX использовать только для разработки. UNIX на новом компьютере запустили в начале 1971 года. 12 Кб памяти было занято ядром, еще немного — программами, а все остально ушло под рамдрайв.
Первое издание (ноябрь 1971 года)
Первое издание работало на PDP-11/20 без MMU и аппаратной защиты памяти. Так что стабильность работы и устойчивость к сбоям была не на высоте. Мультипрограммности тоже не было, но пути к файлам уже появились. Была документация к таким системным вызовам: break, cemt, chdir, chmod, chown, close, creat, exec, exit, fork, fstat, getuid, gtty, ilgins, intr, link, mkdir, mount, open, quit, read, rele, seek, setuid, smdate, stat, stime, stty, tell, time, umount, unlink, wait, write.
Из языков программирования поддерживались ассемблер, B, BASIC, FORTRAN. С еще не было.
Файлы среды разработки на В и ассемблере:
/bin/as ассемблер. Файл вывода по умолчанию называется a.out
/bin/ld редактор ссылок (по контексту скорее линковщик, но из оригинала такой перевод получить очень затруднительно — прим. перев.). В одной директории может одновременно работать только один пользователь из-за конфликта временных файлов
/bin/nm выводит таблицу символов из результата работы ассемблера или загрузчика
/bin/strip удаляет лишние символы из бинарников
/bin/un выводит список не определенных в программе символов
/etc/as2 второй проход ассемблера
/etc/ba ассемблер B (prog.i —> prog.s)
/etc/bc компилятор B (prog.b —> prog.i)
/etc/bilib библиотека интерпретатора В
/etc/brt1, /etc/brt2 рантайм В
/etc/liba.a ассемблерные подпрограммы
/etc/libb.a библиотека подпрограмм для В
/usr/b/rc шелл-скрипт для компиляции программы на В в бинарник. Работает по цепочке program.b —> program.i —> program.s —> a.out
Второе издание (июнь 1972 года)
:(1) Ничего не делает. Изначально это была метка для goto, нужно было научить шелл игнорировать такие строки
cc(1) компилятор С
m6(1) макропроцессор общего назначения
opr(1) отправляет задание на печать
tmg(1) компилятор компиляторов. TMG — это язык для написания компиляторов.
tss(1) интерфейс для удаленного доступа к ОС Honeywell TSS.
salloc(3) библиотека для работы со строками произвольной длины
Во втором издании все также не было ни мультипрограммности, ни защиты памяти, зато появился копирайт
Третье издание (Февраль 1973)
Эта версия заработала на PDP-11/45 с защитой памяти и поддержкой большого ее объема — до 256 Кб.
Из новых фич следует обратить внимание на конвейеры и мультипрограммность. Кроме того:
cdb(1) дебаггер С
crypt(3) процедура шифрования паролей
proof(1) прото-diff
ps(8) список процессов
sno(1) компилятор и интерпретатор SNOBOL III
speak(1) Синтезатор речи. На вход получает поток слов, выдает их произношение
typo(1) цитата из мануала: «… ищет в документе редкие слова, опечатки и hapax legomena и печатает их в стандартный вывод»)
yacc(6) компилятор компиляторов
Четвертое издание (ноябрь 1973)
Это фактически третье издание, переписанное на С. Также поддерживаются новые модели PDP-11 — /60 и /70. Из-за разработки на языке более высокого уровня объем системы вырос на треть. Были небольшие обновления команд, язык В исключен из поставки.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
UNIX — семейство переносимых, многозадачных и многопользовательских операционных систем.
Идеи, заложенные в основу UNIX, оказали огромное влияние на развитие компьютерных операционных систем. В настоящее время UNIX-системы признаны одними из самых исторически важных ОС.
Содержание
Обзор
Первая система UNIX была разработана в подразделении Bell Labs компании AT&T. С тех пор было создано большое количество различных UNIX-систем. Юридически право называться «UNIX» имеют лишь те операционные системы, которые прошли сертификацию на соответствие стандарту Single UNIX Specification. Остальные же, хотя и используют сходные концепции и технологии, называются UNIX-подобными операционными системами.
Особенности
Основное отличие UNIX-подобных систем от других операционных систем заключается в том, что это изначально многопользовательские многозадачные системы. То есть в один и тот же момент времени сразу множество людей может выполнять множество вычислительных задач (процессов). Даже популярную во всём мире систему Microsoft Windows нельзя назвать полноценной многопользовательской системой, так как кроме как на некоторых серверных версиях, в один и тот же момент за одним компьютером с Windows может работать только один человек. В Unix может работать сразу много людей, при этом каждый из них может выполнять множество различных вычислительных процессов, которые будут использовать ресурсы именно этого компьютера.
Вторая колоссальная заслуга Unix в её мультиплатформенности. Ядро системы написано таким образом, что его легко можно приспособить практически под любой микропроцессор, а не только под популярное семейство i-386 (i-686).
UNIX имеет и другие характерные особенности:
Применение
В настоящее время UNIX-системы распространены в основном среди серверов, а также как встроенные системы для различного оборудования. Среди ОС для рабочих станций и домашнего применения UNIX и UNIX-подобные ОС занимают после Microsoft Windows второе (OS X), третье (GNU/Linux) и многие последующие места.
История
Предшественники
В 1957 году в Bell Labs была начата работа по созданию операционной системы для внутренних нужд. Под руководством Виктора Высотского была создана система BESYS. Впоследствии он возглавил проект Multics, а затем стал главой информационного подразделения Bell Labs.
В 1964 году появились компьютеры третьего поколения, для которых возможности BESYS уже не подходили. Высотский и его коллеги приняли решение не разрабатывать новую собственную операционную систему, а подключиться к Multics — совместному проекту General Electric и MIT. Телекоммуникационный гигант AT&T, в состав которого входила Bell Labs, оказал проекту существенную поддержку, но в 1969 году вышел из него, поскольку проект не приносил финансовых выгод.
Первые UNIX-системы
История операционной системы UNIX началась в 1969 году в одном из подразделений AT&T Bell Laboratories, когда на «малоиспользуемой» машине DEC PDP-7 Кен Томпсон, Деннис Ричи и другие, прежде занимавшиеся созданием ОС Multics, начали работу над операционной системой, названной ими первоначально Unics (UNiplexed Information and Computing System). В течение первых 10 лет развитие UNIX происходило, в основном, в Bell Labs. Соответствующие начальные версии назывались «Version n» (Vn) и предназначались для ЭВМ DEC PDP-11 (16-битовая) и VAX (32-битовая).
Версии Vn разрабатывались группой Computer Research Group (CRG) в Bell Labs. Поддержкой занималась другая группа, Unix System Group (USG). Разработкой также занималась группа Programmer’s WorkBench (PWB), привнесшая систему управления исходным кодом sccs, именованные каналы и ряд других идей. В 1983 году эти группы были объединены в одну, Unix System Development Lab.
Хронология основных событий в истории ОС UNIX
Основные характеристики
ОС UNIX имеет следующие основные характеристики:
Архитектура ОС UNIX
Основные функции ядра
Основные функции ядра UNIX (которое может быть монолитным или модульным) включают:
Системные вызовы
Системные вызовы обеспечивают:
Системные вызовы преобразуют процесс, работающий в режиме пользователя, в защищенный процесс, работающий в режиме ядра. Это позволяет процессу вызывать защищенные процедуры ядра для выполнения системных функций.
Системные вызовы обеспечивают программный интерфейс для доступа к процедурам ядра. Они обеспечивают управление системными ресурсами, такими как память, пространство на дисках и периферийные устройства. Системные вызовы оформлены в виде библиотеки времени выполнения. Многие системные вызовы доступны через командный интерпретатор.
Пользовательские процессы и процессы ядра
Пользовательские процессы образуют следующие два уровня и:
Пользовательский процесс работает в режиме ядра, когда начинает выполнять код ядра через системный вызов.
Обмен данными между пространством ядра и пользовательским пространством
Поскольку пользовательские процессы и ядро не имеют общего адресного пространства памяти, необходим механизм передачи данных между ними. При выполнении системного вызова, аргументы вызова и соответствующий идентификатор процедуры ядра передаются из пользовательского пространства в пространство ядра. Идентификатор процедуры ядра передается либо через аппаратный регистр процессора, либо через стек. Аргументы системного вызова передаются через пользовательскую область вызывающего процесса.
Пользовательская область процесса содержит информацию о процессе, необходимую ядру:
Пользовательский процесс не может обращаться к пространству ядра, но ядро может обращаться к пространству процесса.
Системное программное обеспечение
ОС UNIX обеспечивает ряд стандартных системных программ для решения задач администрирования, переконфигурирования и поддержки файловой системы, в частности:
Для решения этих задач системное ПО (работающее в пользовательском режиме) часто использует системные вызовы.
Пользователи и группы
UNIX — многопользовательская операционная система. Пользователи, занимающиеся общими задачами, могут объединяться в группы. Каждый пользователь обязательно принадлежит к одной или нескольким группам. Все команды выполняются от имени определенного пользователя, принадлежащего в момент выполнения к определенной группе.
В многопользовательских системах необходимо обеспечивать защиту объектов (файлов, процессов), принадлежащих одному пользователю, от всех остальных. ОС UNIX предлагает базовые средства защиты и совместного использования файлов на основе отслеживания пользователя и группы, владеющих файлом, трех уровней доступа (для пользователя-владельца, для пользователей группы-владельца, и для всех остальных пользователей) и трех базовых прав доступа к файлам (на чтение, на запись и на выполнение). Базовые средства защиты процессов основаны на отслеживании принадлежности процессов пользователям.
Интересные факты
UNIX-время
UNIX-время — система описания моментов во времени, принятая в UNIX и других POSIX-совместимых операционных системах. Определяется как количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг); время с этого момента называют «эрой UNIX».
UNIX-время представлено целым числом, которое увеличивается с каждой прошедшей секундой без необходимости вычислений для определения года, месяца, дня, часа или минуты для удобства восприятия человеком. Современное UNIX-время согласуется с UTC — отсчет происходит в секундах СИ. Временной промежуток одного дня почти всегда разбит на 86400 секунд, но при объявлении високосных секунд составляет 86401 секунду. Такие секунды, согласно Всемирному времени, сохраняют длительность дней синхронизированной со временем оборота планеты. В UNIX-времени соответствующие номера секунд повторяются, то есть високосные секунды не учитываются.
В момент времени 00:00:00 UTC 1 января 1970 года (четверг) UNIX-время равно нулю. Начиная с этого времени, число возрастает на определённое количество в день. Каждый день число, представляющее Unix-время вычисляется описанным образом в UTC (00:00:00Z), и увеличивается ровно на 1 в секунду, начиная с полночи. Следовательно, 16-09-2004 17:55:43.54, 64543.54 секунд с полуночи, из примера выше, будет представлено в UNIX-времени числом 1095292800 + 64543.54 = 1095357343.54. Для дат, предшествующих началу отсчета, число также возрастает, т.е. с течением времени приближается к нулю.
Используемую целочисленную систему удобно использовать для сравнения и хранения дат (дата и время в этом формате занимают всего 4 или 8 байт). При необходимости обращения к элементам дат (день, месяц, год) секунды можно преобразовать в любой подходящий формат (и наоборот).
В программах для хранения UNIX-времени используется целочисленный знаковый тип. 32-битные числа со знаком могут ссылаться на моменты времени от пятницы 13 декабря 1901 года 20:45:52 до вторника 19 января 2038 года 03:14:07 включительно.
19 января 2038 года в 03:14:08 по всемирному времени значение переменной типа time_t, отсчитывающей число секунд, прошедших с 1 января 1970 года, достигнет 231, что может привести к ошибочной интерпретации этого числа как отрицательного. Возможное решение данной проблемы состоит в использовании для хранения времени не 32-битной, а 64-битной переменной (что и делается во всех современных 64-битных операционных системах), этого хватит на 292 млрд лет.
Проблема Apple iOS как UNIX-системы
У 64-битных iOS устройств от Apple существует проблема как UNIX системы. Если перевести время на устройстве с 64-битным процессором под управлением iOS на час ночи первого января 1970 года и перезагрузить устройство, будучи в часовом поясе от UTC +1:30 и больше, то после перезагрузки устройства оно не будет включаться, всё время будет светиться «белое яблоко». Происходит это из-за разницы в часовых поясах, то есть: если перевести время на 1:00 1 января 1970 года в часовом поясе UTC +1:30 или больше, то счётчик UNIX-time уходит в минус, так как отсчёт ведётся от UTC времени, что система понять не в состоянии, вследствие чего счётчик зависает. Устройство даже не восстанавливается через DFU, но у проблемы есть три решения другими способами. Первый способ: просто оставить включенным устройство и ждать пока счётчик UNIX-time уйдёт в плюс (пока не доказано, что данный способ работает). Второй способ: ждать пока аккумулятор телефона сядет полностью и счётчик сам сбросится на нулевое состояние. Третий способ: разобрать устройство и отключить аккумулятор на некоторое время, затем собрать устройство, счётчик так же сбросится на ноль и устройство будет работать.
Философия 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 также способствует их развитию и совершенствованию. Это связано с тем, что использование небольших специализированных (т. е. модульных) программ значительно облегчает разработчикам их улучшение в сравнении с громоздкими многофункциональными программами. Одна из причин заключается в том, что небольшие программы могут быть достаточно маленькими и простыми для понимания одним человеческим разумом, в то время как большие и сложные программы, как правило, не могут. Это также связано с тем, что такая специализация делает практичным для разработки (включая улучшения) быть максимально распределенной, а не сконцентрированной в одном или нескольких центральных местах.
Исторический контекст
Еще одним важным фактором стремления Томпсона к максимальной простоте и эффективности был тот факт, что он изначально написал свою операционную систему для компьютера 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 и его философии оказал влияние далеко за пределы оригинальной операционной системы, которая была разработана в 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-скрипты для увеличения мощи и портативности, избегайте скрытых пользовательских интерфейсов и сделайте каждую программу фильтром. К последним относятся: позвольте пользователю настраивать среду, делайте ядра операционных систем маленькими и легкими, используйте строчные буквы и будьте лаконичны, берегите деревья, тишина — это золото, думайте параллельно, сумма частей больше целого, хуже — лучше, и мыслите иерархически.
Материал подготовлен в рамках курса «Программист С». Если вам интересно узнать подробнее о формате обучения и программе, познакомиться с преподавателем курса — приглашаем на день открытых дверей онлайн. Регистрация здесь.