История

Предыстория

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

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

В те времена, когда все программное обеспечение было составляющей частью компьютера (и не подлежало замене на другое), оно разрабатывалось с той же скоростью и в то же время, что и аппаратное обеспечение. Например, время проектирования ЭВМ Мир, начиная с теоретических разработок и заканчивая эксплуатационным образцом, составило 12 лет. И на протяжении всего этого времени параллельно с аппаратным разрабатывалось программное обеспечение, именно для "скрепления" аппаратуры, а не для решения пользовательских задач. Пользователи для решения своих задач писали программы сами. Ведущей компьютерной фирмой США --- IBM --- использовались аналогичные подходы: создание системы IBM System/360 от начала разработки до начала стабильной работы заняло так же около десяти лет и операционная система OS/360 была неотъемлемой частью этой ЭВМ.

Неотъемлемость программного обеспечения от аппаратного можно наблюдать и в некоторых современных устройствах, например, в неуправляемых свитчах. В них нет операционной системы, тем не менее, в них есть регистры для хранения MAC-адресов, программный код для работы с ними и так далее.

Исторической и идеологической предшественницей GNU/Linux является операционная система UNIX. История UNIX весьма обширна и интересна, но мы заострим внимание лишь на трех вещах, её касающихся.

Разработка для себя

Исторически операционная система UNIX разрабатывалась "для себя". После того, как Bell Labs (исследовательское подразделение AT&T) отказалось от участия в проекте MULTICS, группа исследователей из Bell Labs, задействованная в этом проекте, хотела продолжить работу над созданием операционной системы с разделением времени. Название UNIX предложил Брайан Керниган, по ассоциациям с MULTICS. Предложение купить новый компьютер для проекта было отклонено и поначалу для экспериментов использовался относительно старый PDP-7.

Немного ранее, при работе над Multics, Кен Томпсон создал игру Space Travel, и был ею весьма увлечен, кроме того, он разработал язык B (предтечу языка С), компилятор которого был создан при участии Дениса Ритчи. Для работы Space Travel и был использован компьютер PDP-7 как обладающей неплохим текстовым дисплеем. В ходе работ по переносу Space Travel на PDP-7 была начата разработка утилит, необходимых для удобной разработки игры прямо на PDP-7. В результате этих работ была по сути создана однопользовательская операционная система, названная UNICS (в противоположность MULTICS). В дальнейшем в нее была добавлена многозадачность, и название изменилось на UNIX.

Чтобы на одном компьютере могли одновременно выполняться несколько процессов и работать несколько пользователей, рабочей среде нужно было ядро, отвечающее за грамотное распределение ресурсов --- машинного времени, оперативной памяти, внешних устройств. Уже тогда было очевидно, что такое ядро должно быть обособлено от пользовательских задач, и должно лишь предоставлять возможность разделения ресурсов.

С точки зрения программ, ядро операционной системы --- это всего лишь большая библиотека, предоставляющая функции для управления ресурсами. Ресурс можно заказать, освободить, можно получить отказ в доступе к ресурсу, и т.п. Доступ к программному интерфейсу ядра предоставляется в виде системных вызовов (system calls, 2-ая секция man). Программы, позволяющие воспользоваться функциями ядра называют утилитами. По замыслу разработчиков набор утилит должен реализовывать командный интерфейс ядра на основе программного. Утилиты позволяют манипулировать файлами, производить печать, и т. д.

../system_architecture_flower_72dpi.png

Кен Томпсон и Денис Ритчи продвинулись в реализации этой концепции. В начале 70-х задачей начал заниматься целый отдел, началось внедрение. Начальник отдела Дуглас Макилрой увлекался макроязыками и предложил идею конвейера, т.е. потоковую передачу данных между процессами и макроязыка для ее описания. В технологии конвеера отсутствует способ нормальной реализации механизма ветвления, однако, при использовании командной строки механизмы сложнее конвейера могут быть трудными для использования пользователем.

Затем в разработке начал принимать участие известный популяризатор науки Брайан Керниган. Он предложил, во-первых, добавить в язык B некоторые высокоуровневые средства из PL/I, например структуры. Во-вторых, Керниган предложил переписать операционную систему с PDP-ассемблера на язык C. Идея состояла в том, что при написании большей части операционной системы на неком языке программирования этой операционной системой потенциально можно оснастить любой компьютер, для которого существует компилятор использовавшегося языка.

В то время уже существовали языки программирования, такие как PL/I, FORTRAN, ALGOL и LISP. Но они были ориентированы больше на решение пользовательских задач, чем системных. FORTRAN (от FORmula TRANslator), первый высокоуровневый язык, был придуман математиками и ориентирован на решение математических задач. ALGOL-60 имел некоторые особенности, не позволявшие создавать нормальные реализации. PL/I только начинал приобретать законченную форму и также был ориентирован скорее на пользовательские задачи, хотя и содержал много интересных идей. В результате для написания ядра операционных систем использовался машинный язык соответствующей ЭВМ.

Керниган предложил реализовать язык программирования, ориентированный на системные задачи, и достаточно простой для того, чтобы реализация его компилятора на любой платформе не представляла собою сложную задачу, эдакий "переносимый ассемблер". Потенциальным результатом использования подобного подхода была возможность портирования операционной системы на компьютер с принципиально отличающейся архитектурой. В 1972 году ОС Unix была портирована на 32-разрядный Interdata-32 с 16-разрядного PDP-11. Небольшая часть ядра операционной системы, разумеется, реализовывалась и продолжает реализовываться на ассемблере, однако вся логика операционной системы была написана на языке C.

Переносимость программ

Портируемость программных продуктов стала, в определенном смысле, революционным событием. Появилась возможность создать программный продукт системного уровня один раз, и после этого использовать его на различных компьютерах. В случае одинаковой архитектуры достаточно было простого копирования скомпилированного кода, в случае разных --- перекомпиляции. В результате жизненный цикл программного продукта полностью отделился от жизненного цикла компьютера и даже класса компьютеров. Это начало происходить в 70-е годы. Стало ясно, что производство программных продуктов отличается от производства глиняных горшков: для того, чтобы сделать в два раза больше горшков надо потратить в два раза больше времени, сил, глины; для того, чтобы сделать две копии программы достаточно вызвать утилиту копирования. Стало очевидно, что переносимые программные продукты не являются материальными, поскольку больше не являются частью "программно-аппаратных комплексов", какими были ЭВМ до 70-х годов, и могут являться новым товаром, если внушить людям необходимость его покупать. Эта идея была сформулирована известным бизнесменом Биллом Гейтсом в середине 70-х в "Открытом письме любителям".

Коллективная разработка

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

После того, как UNIX получила распространение, в течение порядка десяти лет она развивалась вышеописанным способом. Люди писали программы, на конференциях обменивались ими, находили ошибки и дорабатывали, снова обменивались. Этот процесс затронул не столько UNIX, разрабатывавшийся Кеном Томпсоном и Денисом Ричи в Bell Labs (тот был производственным продуктом и принадлежал компании AT&T), сколько UNIX-подобную ОС, создававшуюся американскими университетами и получившую название BSD (Berkeley System Distribution, по названию самого известного кампуса Университета Калифорнии). Тогда же появилась концепция создания и распространения некоторого блока программ, написанных различными людьми, называющегося distribution. Авторы программ распространяли их затем, чтобы другие пользователи подправляли и дорабатывали программы. Такая форма разработки программного продукта хорошо себя зарекомендовала уже тогда, хотя в те времена, чтобы передать копию программы надо было записать её на ленту и либо отдать при личной встрече, либо выслать бандеролью. Программы тогда разрабатывались не слишком многочисленными учеными, которые постоянно встречались и общались на различных конференциях, обмениваясь не только идеями, но и их воплощениями.

Это счастливое время продолжалось до конца 70-х-начала 80-х годов, когда стала очевидно, что ОС UNIX и её подобия обладают с точки зрения бизнеса двумя очень важными свойствами:

  • для того, чтобы снабдить переносимой ОС новый компьютер/тип компьютеров надо значительно меньше времени, чем тратилось на разработку ОС ранее. Например, полгода вместо пяти лет;
  • UNIX проста и технологична в своей архитектуре, что позволяет гибко конструировать всевозможные решения пользовательских задач.

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

Лицензионно-правовые аспекты

В 80-е годы стало выяснятся, что большинство программного кода UNIX-систем имеет правообладателей. Более того, если программа не была написана в свободное от работы время и иного не указано в контракте, правообладателем является работодатель программиста (им мог быть и университет). Многие правообладатели не хотели свободного распространения исходного кода. Это совершенно не согласовывалось с описанным выше академическим стилем создания программ. Разработчики UNIX-систем привыкли показывать свои работы заинтересованным коллегам, которые высказывали мнения, помогали, дополняли. Работа в сообществе сильно отличается от работы в одиночку. Также выяснилось, что многие не задумывались о принадлежности кода, и для большого количества программ установить писались ли они в рабочее время, и кто написал какую часть не представляется возможным. В результате значительная часть кода была признана принадлежащим компании AT&T (владельцу Bell Labs на момент появления UNIX). Кроме того, на основе BSD была создана закрытая коммерческая UNIX-система SunOS.

В результате указанных факторов в 80-х годах, параллельно с развитием университетских версий, произошел стремительный рост коммерческих UNIX-подобных систем: полное дерево родословной UNIX-систем занимает около 24 листов формата А4.

В начале 80-х годов стала повышаться информационная связность университетов. В Америке и крупных исследовательских центрах Европы появился Интернет. Компьютеры объединялись в группы, внутри которых люди могли обмениваться программами, уже не посылая бандеролью магнитные ленты. Эффективность команд, которые состояли из заинтересованных людей, находящихся в разных местах, сильно повысилась, появились первые примитивные средства групповой работы.

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

Стало ясно, что необходимо строго разделить свободное ПО, с которым можно делать что угодно (или почти что угодно) без ответственности перед правообладателем, и несвободное, распространение исходников которого незаконно. На собственном примере это понял одни из самых известных людей в области свободного ПО --- Ричарда Мэтью Столлмана (RMS). В частности, в начале 80-х он работал в над lisp-машиной (компьютером, имеющим язык lisp в качестве ассемблера), и вдруг выяснилось, что всё им разработанное, в том числе и текстовый редактор Emacs, написанный для личных нужд, принадлежит компании-работодателю, так как было сделано в рабочее время.

В результате, в истории UNIX-систем 80-е годы известны как UNIX wars, из-за двух конфликтов:

  • конфликт между академическими и коммерческими разработчиками;
  • конфликт между поставщиками ПО, которые породили множество вариантов UNIX, в большинстве закрытых и несовместимых друг с другом благодаря отсутствию стандартов.

С точки зрения развития операционных систем, 80-е стали временем стагнации. Десятилетие прошло под лозунгом "компьютер в каждый дом", но при этом технологический прогресс приостановился. На 8-битных и 16-ти битных домашних компьютерах не было даже полноценных операционных систем. Внимание уделялось разработке интерфейсов, повышению usability (особенно это отличало Apple Macintosh), но как операционная система Mac OS не был новаторским продуктом: через 15 лет Mac OS X стал базироваться на все том же BSD. Технологии же не могут развиваться без исследований, а исследования не могут существовать без академической структуры.

К концу 80-х возросшая информационная связность позволила сформироваться свободному сообществу вокруг программных продуктов: при совместной работе над проектом людям более не приходилось платить за свой энтузиазм. В конце 80-х -- начале 90-х в связи с развитием интеренета стали отмирать такие вещи как система UUCP, FIDO, телефонные BBS-системы, в какой-то период не выпускались даже GNU Distributions (подборки свободного ПО). В России, в силу не очень широкого распространения Интернета, всё это использовалось намного дольше.

Вместе с со связностью, возросло и напряжение между свободным и несвободным. Появились случаи серьезного преследования, инициируемого проавообладателями, наиболее известным был иск AT&T к университету Berkeley, разрабатывающем BSD.

Свободное лицензирование программ

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

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

Используя американский механизм авторской лицензии, RMS и его коллеги из Free Software Foundation (FSF) добились юридической значимости свободной лицензии General Public License (GPL). Во многих странах GPL либо сама является значимой, либо, как в России, принимается во внимание. Таким образом, разработчики получили возможность распространять свои программные продукты по условиям лицензии, запрещающей делать свободное ПО менее свободным.

В рамках движения FSF было создано большое количество свободных программных продуктов, включая компилятор языка С GCC, однако долгое время не было ядра, лицензированного по GPL. В принципе, существовала теоретическая перелицензировать ядро BSD, но этого так и не произошло. Возможно по причине того, что ядро BSD имело код AT&T и BSD в итоге была втянута в UNIX wars, а возможно из-за каких-то разногласий между RMS и разработчиками BSD.

К началу 90-х годов у FSF были все основные части свободной операционной системы --- кроме работающего ядра. Один финский (этнически --- шведский) студент, Линус Торвальдс в то время экспериментировал с учебной ОС Minix. OC Minix распространялась с исходниками, но на тот момент была несвободной. Ее главным автором был академический классик в области построения ОС --- Э. Танненбаум. В ходе этих экспериментов Линус написал собственную маленькую UNIX-подобную ОС. ОС Линуса умещалась на дискете и, по обычаям того времени, была несвободной: её можно было изучать, но распространение допускалось только в университетах.

Главной ценностью работы Линуса было работоспособное ядро, хотя в тот момент и с очень скромными возможностями. Благодаря участию энтузиастов по всему миру, ядро росло и развивалось, а в 1992-м году для его кода была выбрана лицензия GPL. Таким образом. В 1993-м года Патрик Фолькердинк в качестве дипломной работы объединил свободное ядро Linux и свободные утилиты GNU, создав, всего за несколько месяцев, дистрибутив операционной системы, то есть нечто, что после установки чего на компьютере появляется операционная система. Это было беспрецедентное явление, так как ранее создание полноценных UNIX-подобных операционных систем считалось прерогативой крупных компаний. Благодаря активности заинтересованных в свободной ОС пользователей Патрик продолжал и продолжает делать релизы своего дистрибутива, названного им Slackware.

Как только процесс создания операционной системы стал занимать не несколько лет, а несколько месяцев, начали появляться и другие дистрибутивы --- Debian, SuSe, RedHat. Некоторые люди сочли, что создание дистрибутива это новая технология, позволяющая продавать услуги. В течение 90-х годов количество дистрибутивов, получивших название "операционная система GNU/Linux" неуклонно росло. Итак, дистрибутив --- это не свободные программы, и, тем более, не ядро. Дистрибутив --- это сделанная из разрозненного набора компонент операционная система с уникальными свойствами. Например, Ubuntu и ALT Linux далеко не одинаковы, хотя и то и то является операционной системой GNU/Linux.


Сведения о ресурсах

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

1

1

1

1