на каком машинном коде написана ос unix
Рождение и развитие Unix
Томпсон (сидит) и Ритчи работают на PDP-11, 1972 год.
Период 1968-69 гг. был очень неопределенным для Bell Labs: проект операционной системы с разделением времени Multics (Multiplexed Information and Computing Service), разрабатываемой с 1964 года для дорогой 36-битной ЭВМ GE-645, не имел четких перспектив и целей, а лишь разрастался в размерах и сложности, всё ясней был виден его предполагаемый провал. В конце концов, American Telephone & Telegraph вышла из проекта, в который за пять лет были вложены миллионы долларов.
Однако, некоторые из инженеров, работавших над Multics — Кен Томпсон, Деннис Ритчи, Малкольм Дуглас Макилрой, Джозеф Оссанна, — ощущали необходимость в продолжении работы над подобным проектом, и не хотели терять успевшую сформироваться уютную рабочую атмосферу. Поэтому в 1969 году они начали искать альтернативу Multics: Оссанна, Томпсон, Ритчи пытались протолкнуть покупку машины средней мощности, для которой группа обещала написать операционную систему. Заказ на предлагаемые ЭВМ DEC PDP-10 и Sigma 7 так и не был сделан, и хотя несколько раз ситуация выходила на грань получения нужного оборудования, было вполне очевидно, что команда просит слишком крупную сумму для проекта с расплывчатым планом, тем более, что после провала Multics операционные системы стали не настолько привлекательной сферой. Поэтому Томпсон (в основном это была его задумка), Кэнэдэй и Ритчи (привнесший идею файлов-устройств) разработали на обычных черных учебных досках и бумаге устройство файловой системы, которая позже стала сердцем Unix.
Начало работы
Томпсон написал для Multics симуляцию производительности предлагаемой файловой системы и страничного поведения программ, начал реализацию новой операционной системы для GE-645. Он разработал ассемблер для машины и рудиментарное системное ядро, способное лишь выводить приветственное сообщение. Сложность оборудования делала заметным достижение Томпсона, но как только выяснилось, что ввиду выхода из проекта Multics 645-ая серия в Bell Labs будет продолжать работать от силы несколько месяцев, работа была прекращена.
Также в 1969 году Томпсон написал игру Space Travel для Multics, пока ещё имел к ней доступ, а потом переписал её на Фортране для GECOS, операционной системы машин GE-635. Игра содержала всего лишь симуляцию движения основных тел Солнечной системы, среди которых игроку предлагалось провести корабль и приземлиться на планетах и их лунах. Игра в версии для GECOS имела два основных недостатка: высокая цена вычислительного времени ($75 за игру) и подтормаживания графики. Поискав, Кен нашел немного использовавшийся PDP-7 с отличным экраном, ранее машину купили как терминал Graphic-II для проекта анализа цепей.
Ритчи и Томпсон переписали Space Travel для запуска на этой ЭВМ. Работа над маленькой игрой была куда более важной, чем может показаться: поскольку они проигнорировали существующее программное обеспечение, приходилось писать пакет для обработки чисел с плавающей запятой, спецификации графических символов и систему отладки самостоятельно. Всё это было написано на GECOS на кросс-ассемблере для PDP-7, и процесс переноса ассемблерного кода на перфокартах использовался в дальнейшем для реализации уже файловой системы, проект которой уже был разработан.
Летом 1969 года жена Кена уехала к его родителям, чтобы показать новорожденного сына, и Томпсон с головой ушел в работу. Вместе с файловой системой новой операционной системы появился маленький набор пользовательских программ: копирование, печать, удаление, редактирование и, конечно же, интерпретатор команд, командный процессор. После доработки ассемблера отпала необходимость писать на GECOS и переносить файлы перфолентой. Хотя название Unix как отсылка к Miltics появилось только в 1970 году как шутка Брайана Кернигана на тему того, что новая система поддерживала лишь пользователя Томпсона, и поэтому должна носить название Un-multiplexed Information and Computing Service, операционная система уже родилась и жила.
Файловая система Unix для PDP-7 имела линейный массив индексных дескрипторов, каждый из которых описывал файл, директории (особый файл, содержащий имена и ассоциированный индекс), особые файлы, описывающие устройства. Вызовы файловой системы тоже не слишком отличаются от сегодняшних: read, write, open, creat, close. Отличие было в том, что единицей ввода-вывода в PDP-7 было машинное слово, а не байт. Примитивная по сегодняшним меркам операционная система предоставляла более удобную среду разработки, чем существовавшие аналоги. Всё очевиднее становилось, что изначально устаревшая PDP-7, накладывающая множество раздражающих ограничений на работу новой операционной системы, не сможет удовлетворить нужды для дальнейшего развития, как и вся серия машин PDP-7, а разрешать закупку нового оборудования руководство вряд ли решится.
Оссанна, до конца его дней увлекавшийся текстовым процессингом, предложил схитрить и попросить у начальства новейший микрокомпьютер компании DEC — PDP-11 — для создания инструментов редактирования и форматирования текста. А факт того, что для создания этих инструментов потребуется написать операционную систему, шел почти что как сноска. Запрашиваемая сумма была куда меньше, чем ранее — всего 65 тыс. долларов.
Предыдущие расплывчатые предложения встречались с неодобрением, это же было слишком узко́. Не сразу, но начальство клюнуло, уже в мае 1970 года благодаря усилиям Макмахона был произведен заказ на PDP-11. Машина прибыла в конце лета, но продукт был настолько новым, что накопительный диск пришлось ждать до декабря. Всё это время Томпсон, Ритчи и остальные продолжали работать над Unix на PDP-7. В это время новенький PDP-11 три месяца обсчитывал ходы шахматного коня на доске 6×8.
Лишь после установки накопителя PDP-11 всё усложняющаяся операционная система была переписана на новую машину. У версии Unix для PDP-11 не имелось особых преимуществ относительно версии для PDP-7. К примеру, всё так же не было многозадачности: лишь одна пользовательская программа могла находиться в ядре. Размеры системы были невелики: 24 килобайта ОЗУ (16 килобайт для операционной системы и 8 килобайт для пользовательских программ), диск с тысячей блоков (512 килобайт). Файлы были ограничены размером в 64 килобайта.
Затем была переписана программа roff, текстовый процессор, написанный Осанной. Впервые Unix испытали вне Bell Labs при работе в патентном отделе AT&T, где требовалось редактировать и форматировать заявки на патенты. Unix-система имела преимущества над испытываемой в это же время в патентном отделе коммерческой системой редактирования текста: во-первых, Unix имела поддержку 37-ой модели терминалов Teletype, печатавшей все требующиеся математические символы, во-вторых, в roff быстро добавили возможность нумеровать страницы, чем конкурент не обладал.
Во время второго полугодия 1971 года группа осуществляла поддержку трех машинисток и пыталась продолжать работу в свободное время. Unix получила хорошую репутацию за поддержку интересных функций на скромном оборудовании, и система была принята к использованию в патентном отделе AT&T, что давало возможность группе убедить руководство заказать ещё одну машину, другую модель PDP-11 — PDP-11/45, ещё более мощную, чем уже купленная.
В ранние годы Unix постоянно изменялась и эволюционировала, поэтому не было смысла выпускать версии или релизы, хотя периодически происходили издания программисткого руководства, и первые системы Unix носили названия этих изданий. Первое издание датируется ноябрем 1971 года.
Языки программирования высокого уровня
Каждая программа для Unix в версии PDP-7 писалась на очень слабом ассемблере — к примеру, не было макрокоманд. Первым интересным языком был TMG Макклура, реализованный Макилроем. Потом Томпсон решил, что нельзя предлагать компьютерную систему без Фортрана, поэтому он начал писать Фортран в TMG, но намерение реализовать его продлилось неделю. То, что он сделал, было компилятором для нового языка B. Новый язык испытал сильное влияние BCPL, вкуса Томпсона к спартанскому синтаксису и скромные размеры места для компилятора, который производил простой и медленный, но исполняемый код, что сделало жизнь программистов легче. Позже кросс-компилятор PDP-7 для PDP-11 был написан на B, и постепенно компилятор для PDP-7 был транслитерирован из TMG в B. С прибытием PDP-11 почти сразу же на ней был настроен B. Ещё до прибытия накопителя для новой машины на PDP-11 был написан калькулятор.
Над переписыванием операционной системы на B не особо задумывались, даже ассемблер для новой ЭВМ переписывался на ассемблере, поскольку интерпретируемый код был слишком медленным. Также стояла проблема несоответствия ориентированного на машинное слово B и PDP-11 с байтовой адресацией.
Поэтому в 1971 году была начата работа над тем, что стало языком C. Всем прекрасна известна связь BCPL → B → C, и нет смысла повторять её, стоит лишь отметить, что в 1973 году ядро операционной системы было переписано на C, и Unix приобрел черты своих современных версий. Было ещё множество внешних изменений, и внутреннее строение системы стало более рациональным и простым. Успех попытки подтвердил, что C является полезным и практически универсальным инструментом для системного программирования, а не игрушкой для простых приложений. Сегодня лишь самые важные программы Unix-подобных систем пишутся на ассемблере, почти все утилиты и приложения написаны на C.
Дальнейшее развитие
Годами Unix оставалась лишь исследовательским проектом Bell Labs, но в 1973 году авторы представили систему на симпозиуме Ассоциации по вычислительной технике, и запросы на предоставление копий посыпались сразу же. Это ставило AT&T в крайне неудобное положение: ещё в 1956 году монополист связи был ограничен от продажи продуктов и услуг, не связанных напрямую с телефонами и телекоммуникациями, и поэтому Unix не могла продаваться. Именно этим мы обязаны выпуску исходных кодов ранних версий практически всем желающим без поддержки, рекламы и исправлений.
И такая политика дала свои плоды: поклонники операционной системы уже тогда начали общаться и собираться вместе для обмена опытом, исправлениями и багфиксами, новыми инструментами и улучшениями системы. К популярности Unix в конечном счете привели не только простота, элегантность её устройства, востребованность и портируемость, но и формирование сплоченного комьюнити Usenix. Сообщества формировались не только в США, но и в Австралии (в университете Нового Южного Уэльса и Сиднейском университете), и все они обменивались магнитными лентами с новыми программами и исправлениями для системы. К середине 70-х годов именно это окружение сформировало современные традиции сообщества open-source.
Однако, чем популярнее становилась Unix, тем пристальнее юристы AT&T следили за несколько фривольным поведением лицензиатов. К примеру, Джон Лайонс, преподающий в университете Нового Южного Уэльса, в 1977 году опубликовал одну из самых известных книг всех времен «Комментарии к операционной системе Unix», включавшую и листинг исходных кодов ОС. Условия лицензирования Unix допускали обмен исходниками, поэтому вначале книга Лайона продавалась только лицензиатам. В 1979 году AT&T ужесточила наказание за использование книги в учебных классах, и нет ничего удивительного в том, что книга стихийно начала копироваться самиздатом, порой, фотокопии фотокопий имели практически нечитабельное состояние.
Юристы AT&T следили и за жизнью в Bell Labs. К примеру, между изданием шестого издания Unix в 1975 году и седьмого в 1979 Томпсон собрал из внешних и внутренних источников Bell Labs десятки важных исправлений для системы, которые собирался вбросить в пользовательскую базу. Юристы компании запретили ему это делать, поскольку это было бы формой поддержки. Но корректоры ошибок всё равно стали доступны: Лоу Кацу, основателю и презиенту Usenix, однажды позвонили и сообщили, что если он в 2 часа дня посетит определенное место на Маунтайн авеню (где и находится Bell Labs), то он найдет кое-что интересное. Кац последовал указаниям и нашел магнитную ленту с исправлениями, которые немедленно попали в руки бесчисленного числа пользователей.
80-е. Ответвления
После разрушения монополии Bell System компания AT&T более не была связана путами соглашения 1956 года. Одновременно с этим развивались многочисленные ответвления Unix, в первую очередь версия университета Беркли, которая была тщательно вычищена от кода AT&T, чтобы сделать её свободно распространяемой. После суда в 1992 году AT&T против университета Беркли законный статус Unix-клонов был подтвержден.
Если бы исходные коды Unix не были бы доступны общественности, Линус Торвальдс, как он сам говорит, вряд ли бы создал Linux, который в начале 90-х был написан с нуля. Сегодня именно Linux и семейство BSD несут крест отошедшей на задний план Unix и управляют всем: от мобильных телефонов до суперкомпьютеров.
Что такое UNIX и зачем он нужен
Операционная система, которая изменила мир, хотя в ней почти никто не работал
В 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 заточен на работу в серверах. А у серверов чаще всего нет ни клавиатуры, ни монитора — только сетевые соединения, через которые пользователи и соединяются с сервером, чтобы им управлять.
Как UNIX стал стандартом
С середины 1970-х годов идёт довольно мутная история, в которой компания
AT&T долго и небезуспешно пытается заработать на UNIX, а американские университеты и инженеры-любители делают свою открытую версию. Идёт конкуренция между стандартами, инструментами, поставками и протоколами.
Конкуренция выливается в то, что у UNIX появляется множество более совершенных потомков. Их мы называем Unix-подобными системами.
Можно сказать, что Unix-подобность — это такой набор правил, условностей и стандартов, которых должны придерживаться новые операционки, чтобы сохранять преемственность и некоторую совместимость. То есть такой ГОСТ для операционных систем. Операционка может быть и без ГОСТа, но с ним лучше.
Где сегодня используется UNIX
В чистом виде UNIX сейчас используется только на серверах и оборудовании связи. Всё дело в том, что для домашнего использования эта система подходит слабо: у неё нет встроенного графического интерфейса и все операции и программы нужно настраивать вручную.
Зато если нужна гарантированная надёжность, производительность и масштабируемость, особенно при сетевых нагрузках, — используют UNIX или производные от неё. Про них сейчас тоже расскажем.
UNIX-подобные системы
На основе оригинальных версий Юникса появилось много разных операционных систем: BSD, Solaris, HP-UX и даже MacOS, который сделан на основе BSD версии 4.4. Идеи, которые были заложены 50 лет назад, оказались настолько рабочими, что применяются до сих пор.
А ещё есть Linux и его производные — RedHat, Calculate, Ubuntu и ещё сотня дистрибутивов. Многие думают, что Линукс — это развитие Юникса, но на самом деле это полностью самостоятельное и независимое от него семейство операционных систем, хотя и слова похожие. Про Линукс обязательно расскажем в следующей статье.
Jenyay’s blog
Приложение к сайту «Софт, исходники и фото»
История UNIX-систем
Операционная система UNIX — прародитель многих современных операционных систем, таких как Linux, Android, Mac OS X и многих других была создана в стенах исследовательского центра Bell Labs — подразделении компании AT&T. Вообще говоря, Bell Labs — настоящий рассадник питомник ученых, которые совершили открытия, буквально изменившие технику. Например, именно в Bell Labs работали такие ученые, как Уильям Шокли, Джон Бардин и Уолтер Браттейн, впервые создавшие биполярный транзистор в 1947 году. Можно сказать, что именно в Bell Labs был изобретен лазер, хотя к тому времени уже были созданы мазеры. Клод Шеннон, основатель теории информации также работал в Bell Labs. Там же работали создатели языка C Кен Томпсон и Денис Ритчи (о них мы еще вспомним), а также работает автор C++ — Бьярн Страуструп.
На пути к UNIX
Прежде чем говорить о самой UNIX, давайте вспомним те операционные системы, которые были созданы до нее, и которые во многом определили то, чем является UNIX, а через нее и многие другие современные операционные системы.
Разработка UNIX была не первая работа в области операционных систем, проводимых в Bell Labs. В 1957 году в лаборатории начали разрабатывать операционную систему, которая получила название BESYS (сокращение от Bell Operating System). Руководителем проекта был Виктор Высотский — сын русского астронома, эмигрировавшего в Америку. BESYS был внутренний проект, который не выпускался как законченный коммерческий продукт, хотя всем желающим BESYS рассылалась на магнитных лентах. Эта система была предназначена для выполнения на компьютерах серии IBM 704 — 709x (IBM 7090, 7094). Хочется называть эти штуковины допотопным словом ЭВМ, но, чтобы не резало слух, будем их называть дальше все-таки компьютерами.
В первую очередь BESYS предназначалась для пакетного выполнения большого количества программ, то есть таким образом, когда задается список программ, и их выполнение планируется таким образом, чтобы занимать максимально возможные ресурсы, чтобы компьютер не простаивал. В то же время у BESYS уже были зачатки операционной системы с разделением времени — то есть по сути того, что сейчас называют многозадачностью. Когда появились полноценные системы с разделением времени, то эта возможность использовалась для того, чтобы с одним компьютером могли работать одновременно несколько человек, каждый со своего терминала.
В 1964 году в Bell Labs произошел апгрейд компьютеров, в результате которого на новых компьютерах от IBM BESYS уже не могла быть запущена, о кроссплатформенности тогда не было и речи. Компьютеры в то время IBM поставляла без операционных систем. Разработчики из Bell Labs могли бы начать писать новую операционку, но они поступили по-другому — присоединились к разработке операционной системы Multics.
Проект Multics (сокращение от слов Multiplexed Information and Computing Service) был предложен профессором Массачуссетского Технологического Института (MIT) Джеком Дэннисом. Он вместе со своими студентами в 1963 году разработал спецификацию на новую операционную систему и сумел заинтересовать проектом представителей компании General Electric. В итоге Bell Labs присоединился к MIT и General Electric в разработке новой операционки.
А задумки у проекта были очень амбициозными. Во-первых, это должна была быть операционная система с полноценным разделением времени. Во-вторых, Multics писался не на ассемблере, а на одном из первых языков высокого уровня — PL/1, который был разработан в 1964 году. В-третьих, Multics могла работать на многопроцессорных компьютерах. В этой же операционной системе была иерархическая файловая система, имена файлов могли содержать любые символы и быть довольно длинными, также в файловой системе были предусмотрены символьные ссылки на директории.
К сожалению, работа над Multics затянулась надолго, программисты Bell Labs так и не дождались релиза этого продукта и в апреле 1969 году вышли из проекта. А релиз состоялся уже в октябре того же года, но, говорят, первая версия была жутко глючная, и еще год оставшиеся разработчики исправляли баги, о которых им сообщали пользователи, хотя через год Multics был уже более надежной системой.
Разработка Multics велась еще довольно долгое время, последний релиз состоялся в 1992 году, и это была версия 12.5, хотя это уже совсем другая история, но Multics оказал огромное влияние на будущий UNIX.
Рождение UNIX
Но однажды Кен Томпсон наткнулся на комьютер DEC PDP-7, который редко использовался, и вполне мог подойти для запуска Space Travel, к тому же у него был более хороший видеопроцессор.
Портировать игру на PDP-7 было не так просто, по сути, требовалось написать новую операционную систему для ее запуска. За этим дело не стало, на что только не пойдут программисты ради любимой игрушки. Так зародился UNIX, точнее Unics. Название, которое предложил Брайан Керниган, является сокращением от слов Uniplexed Information and Computing System. Напомню, что название Multics произошло от слов Multiplexed Information and Computing Service, таким образом, Unics в некотором роде противопоставлялся Multics в плане простоты. И действительно, на Multics уже тогда были нападки по поводу ее сложности. Для сравнения, первые версии ядра Unics занимали всего 12 кБ оперативки против 135 кБ у Multics.
На этот раз разработчики не стали (пока) экспериментировать с языками высокого уровня, и первая версия Unics была написана на ассемблере. В разработке Unics приняли участие сам Томпсон, Денис Ритчи, позже к ним присоединились Дуглас Макилрой, Джои Оссанна и Рад Кеннедей. На первых порах Керниган, предложивший название ОС, оказывал только моральную поддержку.
Чуть позже, в 1970 году, когда была реализована многозадачность, операционку переименовали в UNIX и перестали считать сокращением. Именно этот год считается официальным годом рождения UNIX, и именно от первого января 1970 года отсчитывается системное время (количество секунд, начиная с этой даты). Эту же дату называют более пафосно — начало эры UNIX (по-английски — UNIX Epoch). Помните, нас все пугали проблемой 2000-го года? Так вот подобная проблема нас ждет еще в 2038 году, когда для представления времени не будет хватать 32-битных целых чисел, которые часто используются для определения даты, и время с датой станут отрицательными. Хочется верить, что к этому времени весь жизненно важный софт будет использовать для этой цели 64-битные переменные, чтобы отодвинуть эту страшную дату еще на 292 миллиона лет, а там уж что-нибудь придумаем. 🙂
К 1971 году UNIX была уже полноценной операционной системой и Bell Labs даже застолбила за собой торговую марку UNIX. В этом же году UNIX была переписана для работы на более мощном компьютере PDP-11, и именно в этом году вышла первая официальная версия UNIX (ее еще называют First Edition).
Параллельно с разработкой Unics/UNIX Кен Томпсон и Денис Ритчи, начиная с 1969 года, разрабатывали новый язык B (Би), который был основан на языке BCPL, а тот, в свою очередь, можно считать потомком языка Algol-60. Ритчи предложил переписать UNIX на B, который был переносимый, хотя и интерпретируемый, после чего он продолжил модифицировать этот язык под новые нужды. В 1972 году вышла вторая версия UNIX — Second Edition, которая была написана практически полностью на B, на ассемблере оставался довольно небольшой модуль примерно в 1000 строк, так что перенос UNIX на другие компьютеры теперь давался сравнительно легко. Так UNIX стал портируемым.
Кен Томпсон и Деннис Ритчи
Затем язык B развивался вместе с UNIX, пока из него не родился язык C, один из наиболее известных языков программирования, который теперь принято поливать грязью или возносить, как идеал. В 1973 году вышла третья редакция UNIX со встроенным компилятором языка C, а начиная с 5-й версии, появившейся на свет в 1974 году, считается, что UNIX был переписан полностью на C. Кстати, именно в UNIX 1973 года появилось такое понятие, как трубы (pipe).
Начиная с 1974-1975 годов UNIX начал распространяться за пределы Bell Labs. Томпсон и Ритчи публикуют описание ОС UNIX в «Communications of the ACM», а компания AT&T предоставляет UNIX образовательным учреждениям как средство для обучения. В 1976 году можно сказать, что произошло первое портирование UNIX на другую систему — на компьютер Interdata 8/32. Кроме того, в 1975 году вышла 6-я версия UNIX, начиная с которой появились различные реализации этой операционки.
Операционная система UNIX оказалась настолько удачной, что, начиная с конца 70-ых годов другие разработчики стали делать подобные системы. Давайте теперь переключимся с оригинальной UNIX на ее клоны и посмотрим, какие еще появились операционные системы благодаря ей.
Появление BSD
Размножению этой операционной системы во многом поспособствовали американские чиновники, еще до рождения UNIX, в 1956 году, наложившие ограничения на компанию AT&T, которой принадлежала лаборатория Bell Labs. Дело в том, что тогда министерство юстиции вынудило AT&T подписать соглашение, запрещавшее компании заниматься деятельностью, не связанной с телефонными и телеграфными сетями и оборудованием, но к 70-ым годам AT&T уже поняли, какой удачный проект получился из UNIX и захотели сделать его коммерческим. Для того, чтобы чиновники разрешили им это сделать, AT&T передала исходники UNIX некоторым американским вузам.
Одним из таких вузов, имевших доступ к телу исходникам был Калифорнийский университет в Беркли, а если есть чужие исходники, то невольно возникает желание подправить в программе что-нибудь под себя, тем более, что лицензия это не запрещала. Таким образом, через несколько лет (в 1978 году) появилась первая UNIX-совместимая система, созданная не в стенах AT&T. Это был BSD UNIX.
Калифорнийский университет в Беркли
BSD — это сокращение от слов Berkeley Software Distribution, специальная система распространения программ в исходных кодах с очень мягкой лицензией. Лицензия BSD была создана как раз для распространения новой UNIX-совместимой системы. Эта лицензия разрешает повторное использование исходного кода, распространяющегося под ней, и, кроме того, в отличие от GPL (которого тогда еще не было), не накладывает каких-либо ограничений на производные программы. Кроме того, она очень короткая и не оперирует большим количеством нудных юридических терминов.
Первая версия BSD (1BSD) была скорее дополнением к оригинальной UNIX версии 6, чем самостоятельная система. В 1BSD был добавлен компилятор Паскаля и текстовый редактор ex. Вторая версия BSD, вышедшая в 1979 году включала в себя такие известные программы, как vi и C Shell.
После того, как появился BSD UNIX количество UNIX-совместимых систем стало расти неимоверно быстро. Уже от BSD UNIX начали отпочковываться отдельные ветки операционных систем, разные операционные системы обменивались друг с другом кодом, переплетения становились довольно запутанными, поэтому в дальнейшем не будем останавливаться на каждой версии всех UNIX-систем, а посмотрим, как появились наиболее известные из них.
Пожалуй, наиболее известными непосредственными потомками BSD UNIX являются операционные системы FreeBSD, OpenBSD и, чуть в меньшей степени, NetBSD. Все они произошли от так называемой 386BSD, вышедшей в 1992 году. 386BSD, как можно догадаться из названия, являлась портом BSD UNIX на процессор Intel 80386. Эта система была создана также выпускниками Университета в Беркли. Авторы посчитали, что исходный код UNIX, полученный от AT&T был достаточно сильно изменен, чтобы забить на лицензию AT&T, однако, сама компания AT&T так не считала, поэтому вокруг этой операционной системы шли судебные разбирательства. Судя по тому, что сама 386BSD стала родителем многих других операционных систем, для нее все закончилось благополучно.
Проект FreeBSD (в начале у него не было своего имени) появился, как набор патчей к 386BSD, однако, эти патчи почему-то не были приняты, а затем, когда стало ясно, что 386BSD больше развиваться не будет, в 1993 году проект был развернут в сторону создания полноценной операционной системы, получившей название FreeBSD.
Beastie. Талисман FreeBSD
Одновременно с этим сами разработчики 386BSD создали новый проект NetBSD, от которой, в свою очередь, ответвилась OpenBSD. Как видите, получается довольно развесистое дерево операционных систем. Целью проекта NetBSD было создание такой UNIX-системы, которая могла бы работать на как можно большем количестве архитектур, то есть добиться максимальной переносимости. Даже драйвера для NetBSD должны быть кроссплатформенными.
Solaris
Однако первой от BSD отпочковалась операционная система SunOS, детище, как вы понимаете из названия, компании Sun Microsystems, к сожалению, ныне покойной. Это произошло в 1983 году. SunOS — это операционка, которая прилагалась к компьютерам, собранным самой фирмой Sun. Вообще говоря, у Sun за год до этого, в 1982 году, появилась операционка Sun UNIX, которая в своей основе имела кодовую базу Unisoft Unix v7 (Unisoft — это компания, основанная в 1981 году, и занимавшаяся портированием Unix на различное железо), но именно SunOS 1.0 основана на коде 4.1 BSD. SunOS регулярно обновлялась вплоть до 1994 года, когда вышла версия 4.1.4, а затем была переименована в Solaris 2. Откуда взялась двойка? Тут немного получилась запутанная история, потому что Solaris’ом сначала стали называть SunOS версии 4.1.1 — 4.1.4, разрабатывавшиеся с 1990 по 1994 годы. Считайте, что это был своеобразный ребрендинг, который прижился только, начиная с версии Solaris 2. Затем, вплоть до 1997 года выходили Solaris 2.1, 2.2 и т.д. до 2.6, а вместо Solaris 2.7 в 1998 году вышел просто Solaris 7, затем стала наращиваться только эта цифра. На данный момент последняя версия Solaris — 11, вышедшая 9 ноября 2011 года.
История Solaris тоже довольно сложная, вплоть до 2005 года Solaris была полностью коммерческой операционкой, но в 2005 году Sun решили открыть часть исходного кода Solaris 10 и создать проект OpenSolaris. Кроме того, раньше, пока была жива Sun, Solaris 10 можно было использовать либо бесплатно, либо можно было покупать официальную техподдержку. Потом, в начале 2010 года, когда Oracle поглотил Sun, он сделал Solaris 10 платной системой. К счастью, OpenSolaris Oracle угробить пока не смогла.
Linux. Куда ж без него?
А теперь настала очередь рассказать про наиболее известную из реализаций UNIX — Linux. История Linux замечательна тем, что в ней сошлись сразу три интересных проекта. Но прежде чем говорить о создателе Linux — Линусе Торвальдсе, нужно упомянуть еще двух программистов, один из которых — Эндрю Таненбаум, сам того не ведая, подтолкнул Линуса на создание Linux, а второй — Ричард Столлман, чьими инструментами пользовался Линус при создании своей операционной системы.
Эндрю Таненбаум является профессором Амстердамского свободного университета и занимается в первую очередь разработкой операционных систем. Его перу совместно с Альбертом Вудхаллом принадлежит такая известная книга, как «Операционные системы: разработка и реализация», именно она вдохновила Торвальдса заняться написанием Linux. В этой книге рассматривается такая UNIX-подобная система, как Minix. К сожалению, Таненбаум долгое время рассматривал Minix только как проект для обучения навыкам создания операционных систем, но не как полноценную рабочую ОС. У исходников Minix была довольно ограниченная лицензия, когда можно изучать ее код, но нельзя распространять свои измененные версии Minix, да и сам автор долгое время не хотел применять патчи, которые ему слали.
Первая версия Minix вышла вместе с первым изданием книги в 1987 году, последующие вторая и третья версии Minix выходили вместе с соответствующими редакциями книги про операционные системы. Третью версия Minix, вышедшею в 2005 году, уже вполне можно использовать как самостоятельную операционную систему для компьютера (есть LiveCD-версии Minix, которые не требуют ее установку на жесткий диск), так и в качестве встраиваемой операционной системы для микроконтроллеров. Последняя на данный момент версия Minix 3.2.0 появилась на свет в июле 2011 года.
А теперь вспомним про Ричарда Столлмана. В последнее время его стали воспринимать только как пропагандиста свободного софта, хотя много известных ныне программ появилось благодаря нему, да и Торвальдсу в свое время его проект значительно облегчил жизнь. Самое интересное, что и Линус, и Ричард подошли к созданию операционной системы с разных сторон, а в результате проекты слились в GNU/Linux. Здесь надо дать некоторые пояснения по поводу того, что это за GNU, и откуда он взялся.
Про Столлмана можно рассказывать довольно долго, например, то, что он получил диплом с отличием по физике в Гарвардском университете. Кроме того, Столлман работал в Массачуссетском Технологическом Институте, где и начал писать свой знаменитый редактор EMACS в 1970-ых годах. При этом исходники редактора были доступны всем желающим, что не являлось какой-то особенностью в MIT, где долгое время держалась в некотором смысле дружеская анархия, или, как это называл Стивен Леви, автор замечательной книги «Хакеры. Герои компьютерной революции», «хакерская этика». Но чуть позже, в MIT начали заботиться о безопасности компьютеров, пользователям раздали пароли, неавторизованные пользователи не могли получить доступ к компьютеру. Столлман был резко против такой практики, он сделал программу, которая могла бы позволить узнать любой пароль любого пользователя, пропагандировал оставлять пароль пустым. Например, он рассылал пользователям вот такие сообщения: «Я вижу, что вы выбрали пароль [такой-то]. Я предполагаю, что вы можете переключиться на пароль «возврат каретки». Его гораздо легче набирать, и это соответствует принципу, по которому здесь не должно быть паролей». Но его усилия ни к чему не привели. Более того, новые люди, которые приходили в MIT уже начали заботиться о правах на свою программу, о копирайте и тому подобной мерзости.
Позже Столлман говорил (цитата из той же книги Леви): «Я не могу поверить в то, что у программного обеспечения должны быть владельцы. То, что происходило, саботировало в целом все человечество. Оно не давало людям извлечь максимум возможностей из существования программ». Или вот еще одна его цитата: «Машины начали ломаться, а чинить их было некому. Никто не делал нужные изменения в программном обеспечении. Нехакеры реагировали на это просто – они начинали пользоваться покупными коммерческими системами, принося вместе с ними фашизм и лицензионные соглашения».
В результате Ричард Столлман ушел из MIT и решил создать свою свободную реализацию UNIX-совместимой операционной системы. Так 27 сентября 1983 года появился проект GNU, что переводится как «Gnu is Not UNIX». Первой программой, относящейся к GNU стал EMACS. В рамках же проекта GNU в 1988 году была разработана собственная лицензия GNU GPL — GNU General Public License, которая обязывает авторов программ на основе исходников, распространяющихся под этой лицензией, также открывать исходники под лицензией GPL.
До 1990-го года в рамках GNU (уже не только Столлманом) писался разнообразный софт для будущей операционной системы, но у этой ОС не было своего ядра. За ядро взялись только в 1990-м году, это был проект под называнием GNU Hurd, но он «не выстрелил», последняя его версия вышла в 2009 году. Зато «выстрелил» Linux, к которому мы, наконец-то, подошли.
Несмотря на то, что Торвальдсу Minix в целом нравилась, но постепенно он стал понимать, какие у нее ограничения и недостатки. Особенно его раздражала программа эмуляции терминала, прилагавшаяся к операционной системе. В результате он решил написать свой эмулятор терминала, а заодно и разобраться в работе 386-го процессора. Торвальдс писал эмулятор на низком уровне, то есть начинал с загрузчика BIOS, постепенно эмулятор обрастал новыми возможностями, затем, чтобы скачивать файлы, Линусу пришлось написать драйвер дисковода и файловой системы и пошло, и поехало. Так появилась операционная система Linux (на тот момент у нее еще не было какого-либо названия).
Когда операционная система стала более-менее вырисовываться, первой программой, которую Линус запустил на ней, была bash. Правильнее было бы сказать даже, что он подправлял свою операционную систему таким образом, чтобы bash, наконец, смог работать. После этого он стал постепенно запускать под своей операционной системой другие программы. А операционная система должна была называться совсем не Linux. Вот цитата из автобиографии Торвальдса, которая вышла под названием «Just for Fun»: «Про себя я называл ее Linux. Честное слово, я никогда не собирался выпускать ее под именем Linux, потому что это казалось мне слишком нескромным. Какое имя я приготовил для окончательной версии? Freax. (Поняли? Freaks — фанаты — и на конце х от Unix)».
25 августа 1991 года в конференции comp.os.minix появилось следующее историческое сообщение: «Привет всем пользователям minix! Я тут пишу (бесплатную) операционную систему (любительскую версию — она не будет такой большой и профессиональной, как gnu) для 386-х и 486-х AT. Я вожусь с этим с апреля, и она, похоже, скоро будет готова. Напишите мне, кому что нравится/не нравится в minix, поскольку моя ОС на нее похожа (кроме всего прочего, у нее — по практическим соображениям — то же физическое размещение файловой системы). Пока что я перенес в нее bash (1.08) и gсс (1.40), и все вроде работает. Значит, в ближайшие месяцы у меня получится уже что-то работающее, и мне бы хотелось знать, какие функции нужны большинству. Все заявки принимаются, но выполнение не гарантируется :-)»
Обратите внимание, здесь уже упоминается GNU и программа gcc (на тот момент эта аббревиатура расшифровывалась как GNU C Compiler). И вспомните про Столлмана и его GNU, которые начали разрабатывать операционную систему с другого конца. Наконец, произошло слияние. Поэтому Столлман обижается, когда операционную систему называют просто Linux, а не GNU/Linux, все-таки Linux — это именно ядро, а многие обвески были взяты из проекта GNU.
Есть еще такой момент, что хотя Торвальдс и написал Linux под влиянием Minix, между Linux и Minix есть принципиальное с точки зрения программирования различие. Дело в том, что Таненбаум — сторонник микроядерных операционных систем, то есть таких, когда у операционной системы есть небольшое ядро с некоторым небольшим количеством функций, а все драйвера и сервисы операционной системы выступают в виде отдельных независимых модулей, а у Linux ядро монолитное, туда включены многие возможности операционной системы, поэтому под Linux, если нужна какая-то особая возможность, может понадобиться перекомпилировать ядро, внося туда какие-то изменения. С одной стороны у микроядерной архитектуры плюсы — это надежность и простота, в то же время, при небрежном проектировании микроядра, монолитное ядро будет работать быстрее, так как ему не надо обмениваться большими объемами данных со сторонними модулями. После появления Linux, в 1992 году, между Торвальдсом и Таненбаумом, а также их сторонниками в конференции comp.os.minix разгорелся виртуальный спор на тему, какая архитектура лучше — микроядерная или монолитная. Таненбаум утверждал, что за микроядерной архитектурой будущее, и Linux, не успев выйти, уже устарел. С того дня прошло уже почти 20 лет… Кстати, GNU Hurd, который должен был стать ядром операционной системы GNU, разрабатывался тоже как микроядро.
Мобильный Linux
Итак, с 1991 года Linux постепенно развивается, и хотя на компьютерах простых пользователей доля Linux пока не велика, на серверах и суперкомпьютерах он уже давно пользуется популярностью, и Windows пытается оттяпать свою долю в этой области. Кроме того, сейчас Linux занял хорошие позиции на телефонах и планшетах, ведь Android — это тоже Linux.
История Android началась с компании Android Inc, появившейся в 2003 году, и вроде бы занимавшейся разработкой мобильных приложений (конкретные разработки этой компании в первые годы своего существования до сих пор не особо афишируются). Но уже менее чем через два года компанию Android Inc поглощает Google. Никаких официальных подробностей по поводу того, чем именно занимались разработчики Android Inc до поглощения найти не удалось, хотя уже в 2005 году, после ее покупки Google, поговаривали, что они уже тогда занимались разработкой новой операционной системы для телефонов. Однако, первый релиз Android состоялся 22 октября 2008 года, после чего у него регулярно стали выходить новые версии. Из особенностей развития Android можно было бы назвать то, что на эту систему начались нападки по поводу якобы нарушенных патентов, да и с Java-реализацией там непонятно обстоят дела с юридической точки зрения, но давайте не будем вдаваться в эти не технические передрязги.
Но Android — не единственный мобильный представитель Linux, кроме него есть еще операционная система MeeGo. Если за спиной Android стоит такая мощная корпорация, как Google, то у MeeGo одного сильного попечителя нет, она разрабатывается сообществом под эгидой The Linux Foundation, которому помогают такие компании как Intel, Nokia, AMD, Novell, ASUS, Acer, MSI и другие. В данный момент основная помощь идет от компании Intel, что не удивительно, так как сам проект MeeGo вырос из проекта Moblin, который был инициирован Intel. Moblin — это такой дистрибутив Linux, который должен был работать на портативных устройствах, управляемыми процессором Intel Atom. Упомянем еще один мобильный Linux — Openmoko. Linux довольно резво пытается укрепиться на телефонах и планшетах, Google c Android за дело взялся серьезно, перспективы же остальных мобильных версий Linux пока туманные.
Как видите, на данный момент Linux может запускаться на многих системах, управляемыми разными процессорами, однако, в начале 1990-ых годов Торвальдс не верил, что Linux удастся портировать куда-то еще кроме 386-го процессора.
Mac OS X
Теперь переключимся на другую операционную систему, также являющейся UNIX-совместимой — Mac OS X. Первые версии Mac OS, вплоть до 9-й, не были основаны на UNIX, поэтому не будем на них останавливаться. Самое интересное для нас началось после изгнания Стива Джобса из Apple в 1985 году, после чего он основал компанию NeXT, которая занималась разработкой компьютеров и софта к ним. В компанию NeXT попал программист Аветис Теванян, который до этого занимался разработкой микроядра Mach для UNIX-совместимой операционной системы, разрабатываемой в Carnegie Mellon University. Ядро Mach должно было заменить собой ядро BSD UNIX.
Логотип компании NeXT
Аветис Теванян был лидером команды, разрабатывающей новую UNIX-совместимую операционную систему, которая получила название NeXTSTEP. Чтобы не изобретать велосипед, NeXTSTEP была основана на том же ядре Mach. С точки зрения программирования, NeXTSTEP, в отличие от многих других операционных систем, являлась объектно-ориентированной, огромную роль в ней играл язык программирования Objective-C, который сейчас широко используется в Mac OS X. Первая версия NeXTSTEP была выпущена в 1989 году. Несмотря на то, что NeXTSTEP изначально рассчитывалась на процессоры Motorola 68000, но в начале 1990-ых годов, операционная система была портирована на 80386 и 80486 процессоры. Дела у компании NeXT шли не самым лучшим образом, и в 1996 году компания Apple предложила Джобсу купить компанию NeXT с тем, чтобы использовать NeXTSTEP вместо Mac OS. Здесь еще можно было бы рассказать про соперничество между операционными системами NeXTSTEP и BeOS, закончившееся победой NeXTSTEP, но не будем удлинять и без того длинный рассказ, к тому же BeOS никак не относится к UNIX, поэтому на данный момент она нас не интересует, хотя сама по себе эта операционная система была очень интересной, и жалко, что ее развитие прервалось.
Через год, когда Джобс вернулся в Apple, при нем продолжилась политика приспособления NeXTSTEP для компьютеров Apple, а еще через несколько лет эта операционная система была портирована на процессоры PowerPC и Intel. Таким образом, серверная версия Mac OS X (Mac OS X Server 1.0) вышла в 1999 году, а в 2001 вышла операционная система для конечных пользователей — Mac OS X (10.0).
Позже, на основе Mac OS X была разработана операционная система для телефонов iPhone, которая получила название Apple iOS. Первая версия iOS вышла в 2007 году. На этой же операционной системе работает и iPad.
Заключение
После всего вышесказанного, у вас может возникнуть вопрос, какую же операционную систему можно считать UNIX? На этот счет нет однозначного ответа. С формальной точки зрения существует Единая Спецификация UNIX — стандарт, которому должна удовлетворять операционная система, чтобы ее можно было называть UNIX. Не путайте со стандартом POSIX, которому может удовлетворять и не UNIX-подобная операционная система. Кстати, название POSIX было предложено все тем же Ричардом Столлманом, а формально стандарт POSIX имеет номер ISO/IEC 9945. Получение единой спецификации — дело дорогое и долгое, поэтому не многие операционные системы с этим связываются. Из операционных систем, получивших такой сертификат можно назвать Mac OS X, Solaris, SCO и еще несколько менее известных операционных систем. Сюда не входят, ни Linux, ни *BSD, но ведь никто не сомневается в их «ЮниксОвости». Поэтому, например, программист и писатель Эрик Реймонд, предложил еще два признака для определения, является ли та или иная операционная система UNIX-подобной. Первый из таких признаков — это «неследственность» исходного кода от первородного UNIX, разрабатываемого в AT&T и Bell Labs. Сюда попадают BSD-системы. Второй признак — «UNIX по функциональности». Сюда попадают операционные системы, которые ведут себя близко к тому, как описано в спецификации UNIX, но не получили формальный сертификат, и, кроме того, никак не связаны с исходниками исходного UNIX. Сюда относится Linux, Minix, QNX.
На этом мы, пожалуй, остановимся, а то получилось и так слишком много букв. В этот обзор попали в основном истории появления наиболее известных операционных систем — вариаций BSD, Linux, Mac OS X, Solaris, за бортом остались еще некоторые UNIX-ы, такие как QNX, Plan 9, Plan B и некоторые другие. Как знать, может быть в будущем и про них еще вспомним.