Краткая история Linux

Андрей Волков

Андрей Волков

Системное, сетевое администрирование +DBA. И немного программист!))  Профиль автора.

История операционной системы LinuxГоворя «Linux», обычно подразумевают полноценную UNIX-подобную операционную систему, часть которой формируется ядром Linux. Но такое толкование не совсем верно, по­скольку многие ключевые компоненты, содержащиеся в коммерческих дистрибутивах Linux, фактически берутся из проекта, появившегося несколькими годами раньше самой Linux.


Оглавление статьи[Показать]


 

Проект GNU

В 1984 году весьма талантливый программист Ричард Столлман (Richard Stallman), рабо­тавший в Массачусетском технологическом институте, приступил к созданию «свободно распространяющейся» реализации UNIX. Работа была затеяна Столлманом из этических соображений, и принцип свободного распространения был определен в юридическом, а не в финансовом смысле. Но, как бы то ни было, под сформулированной Столлманом правовой свободой подразумевалось, что такие программные средства, как операционные системы, должны быть доступны на бесплатной основе или поставляться по весьма скромной цене.

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

В ответ на это Столлман запустил проект GNU (рекурсивно определяемый акроним, взятый из фразы GNU’s not UNIX). Он хотел разработать полноценную, находящуюся в свободном доступе UNIX-подобную систему, состоящую из ядра и всех сопутствующих программных пакетов, и призвал присоединиться к нему всех остальных программистов. В 1985 году Столлман основал Фонд свободного программного обеспечения — Free Software Foundation (FSF), некоммерческую организацию для поддержки проекта GNU, а также для разработки совершенно свободного ПО.

Когда был запущен проект GNU, в понятиях, введенных Столлманом, версия BSD не была свободной. Для использования BSD по-прежнему требовалось получить лицензию от AT&T, и пользователи не могли свободно изменять и распространять дальше код AT&T, форми­рующий часть BSD.

Одним из важных результатов появления проекта GNU была разработка общедо­ступной лицензии — GNU General Public License (GPL). Она стала правовым воплощением представления Столлмана о свободном программном обеспечении. Большинство про­граммных средств в дистрибутиве Linux, включая ядро, распространяются под лицензией GPL или одной из нескольких подобных лицензий. Программное обеспечение, распро­страняемое под лицензией GPL, должно быть доступно в форме исходного кода и должно предоставлять право дальнейшего распространения в соответствии с положениями GPL. Внесение изменений в программы, распространяемые под лицензией, не запрещено, но любое распространение такой измененной программы должно также производиться в со­ответствии с положениями о GPL-лицензировании. Если измененное программное сред­ство распространяется в исполняемом виде, автор также должен дать всем получателям возможность приобрести измененные исходные коды с затратами, не дороже носителя, на котором они находятся. Первая версия GPL была выпущена в 1989 году. Текущая, третья версия этой лицензии, выпущена в 2007 году. До сих пор используется и вторая версия, выпущенная в 1991 году: именно она применяется для ядра Linux. (Различные лицензии свободно распространяемого программного обеспечения рассматриваются в источниках [St. Laurent, 2004] и [Rosen, 2005].)

В рамках проекта GNU так и не было создано работающее ядро UNIX. Но под эгидой этого проекта разработано множество других разнообразных программ. Поскольку эти программы были созданы для работы под управлением UNIX-подобных операционных систем, они могут использоваться и используются на существующих реализациях UNIX и в некоторых случаях даже портируются на другие ОС. Среди наиболее известных про­грамм, созданных в рамках проекта GNU, можно назвать текстовый редактор Emacs, пакет компиляторов GCC (изначально назывался компилятором GNU С, но теперь переимено­ван в пакет GNU-компиляторов, содержащий компиляторы для С, C++ и других языков), оболочка bash и glibc (GNU-библиотека С).

В начале 1990-х годов в рамках проекта GNU была создана практически завершенная система, за исключением одного важного компонента: рабочего ядра UNIX. Проект GNU и Фонд свободного программного обеспечения начали работу над амбициозной конструк­цией ядра, известной как GNU Hurd и основанной на микроядре Mach. Но ядро Hurd до сих пор находится не в том состоянии, чтобы его можно было выпустить. Даже сейчас работа над Hurd продолжается и это ядро может запускаться только на машинах с архитектурой х86-32.

Значительная часть программного кода, составляющего то, что обычно называют системой

Linux, фактически была взята из проекта GNU, поэтому при ссылке на всю систему Столлман предпочитает использовать термин GNU/Linux. Вопрос, связанный с названием (Linux или GNU/ Linux) стал причиной дебатов в сообществе разработчиков свободного программного обеспе­чения. 

Начало было положено. Чтобы соответствовать полноценной UNIX-системе, созданной в рамках проекта GNU, требовалось только рабочее ядро.

 

Ядро Linux

В 1991 году Линус Торвальдс (Linus Torvalds), финский студент хельсинкского универ­ситета, задумал создать операционную систему для своего персонального компьютера с процессором Intel 80386. Во время учебы он имел дело с Minix, небольшим UNIX- подобным ядром операционной системы, разработанным в середине 1980-х годов Эндрю Таненбаумом (Andrew Tanenbaum), профессором голландского университета. Таненбаум распространял Minix вместе с исходным кодом как средство обучения проектированию ОС в рамках университетских курсов. Ядро Minix могло быть собрано и запущено в си­стеме с процессором Intel 80386. Но, поскольку оно в первую очередь рассматривалось в качестве учебного пособия, ядро было разработано с прицелом на максимальную не­зависимость от архитектуры аппаратной части и не использовало все преимущества, предоставляемые процессорами Intel 80386.

По этой причине Торвальдс приступил к созданию эффективного полнофункцио­нального ядра UNIX для работы на машине с процессором Intel 80386. Через несколько месяцев он спроектировал основное ядро, позволявшее компилировать и запускать раз­личные программы, разработанные в рамках проекта GNU. Затем, 5 октября 1991 года, Торвальдс обратился за помощью к другим программистам, анонсировав версию своего ядра под номером 0.02 в следующем, теперь уже широко известном (многократно про­цитированном) сообщении в новостной группе Usenet:

«Вы скорбите о тех временах, когда мужчины были настоящими мужчинами и сами писали драйверы устройств? У вас нет хорошего проекта и вы мечтаете вонзить свои зубы в какую- нибудь ОС, чтобы модифицировать ее для своих нужд? Вас раздражает то, что все работает под Minix? И не требуется просиживать ночи, чтобы заставить программу работать? Тогда это послание адресовано вам. Месяц назад я уже упоминал, что работаю над созданием свободной версии Minix-подобной операционной системы для компьютеров семейства АТ-386. И вот на­конец моя работа достигла той стадии, когда системой уже можно воспользоваться (хотя, может быть, и нет, все зависит оттого, что именно вам нужно), и у меня появилось желание обнародо­вать исходный код для его свободного распространения. Пока это лишь версия 0.02..., но под ее управлением мне уже удалось вполне успешно запустить такие программные средства, как bash, gcc, gnu-make, gnu-sed, compress и так далее».

По сложившейся со временем традиции присваивать клонам UNIX имена, оканчи­вающиеся на букву X, ядро в конечном итоге получило название Linux. Изначально оно было выпущено под более ограничивающую лицензию, но вскоре Торвальдс сделал его доступным под лицензией GNU GPL.

Призыв к поддержке оказался эффективным. Для разработки Linux к Торвальдсу присоединились другие программисты. Они начали добавлять новую функциональ­ность: усовершенствованную файловую систему, поддержку сетевых технологий, ис­пользование драйверов устройств и поддержку многопроцессорных систем. К марту 1994 года разработчики смогли выпустить версию 1.0. В марте 1995 года появилась версия Linux 1.2, в июне 1996 года — Linux 2.0, затем, в январе 1999 года, вышла версия Linux 2.2, а в январе 2001 года была выпущена версия Linux 2.4. Работа над созданием ядра версии 2.5 началась в ноябре 2001 года, что в декабре 2003 года привело к выпуску версии Linux 2.6.

 

Отступление: версии BSD

Следует заметить, что в начале 1990-х годов уже была доступна еще одна свободная версия UNIX для машин с архитектурой х86-32. Портированную на архитектуру х86-32 версию вполне состоявшейся к тому времени системы BSD под названием 386/BSD раз­работали Билл (Bill) и Линн Джолиц (Lynne Jolitz). Она была основана на выпуске BSD Net/2 (июнь 1991 года) — версии исходного кода 4.3BSD. В нем весь принадлежавший AT&T исходный код был либо заменен, либо удален, как в случае с шестью файлами, которые не так-то просто было переписать. При портировании кода Net/2 в код для ар­хитектуры х86-32 Джолицы заново написали недостающие исходные файлы, и первый выпуск (версия 0.0) системы 386/BSD состоялся в феврале 1992 года.

После первой волны успеха и популярности работа над 386/BSD по различным причи­нам замедлилась. Вскоре появились две альтернативные группы разработчиков, которые создавали собственные выпуски на основе 386/BSD. Это были NetBSD, где основной упор был сделан на возможность портирования на широкий круг аппаратных платформ, и FreeBSD, созданный с прицелом на высокую производительность и получивший наиболее широкое распространение из всех современных версий BSD. Первый выпуск NetBSD под номером 0.8 состоялся в апреле 1993 года. Первый компакт-диск с FreeBSD (версии 1.0) появился в декабре 1993 года. Еще одна версия BSD под названием OpenBSD была выпущена в 1996 году (исходная версия вышла под номером 2.0) после ответвления от проекта NetBSD. В OpenBSD основное внимание уделялось безопасности. В середине 2003 года, после отделения от FreeBSD 4.x, появилась новая версия BSD — DragonFly BSD. Подход к ее разработке отличался от применявшегося при создании FreeBSD 5.x. Теперь особое внимание было уделено проектированию под архитектуры симметричной многопроцессорности (SMP).

Наверное, рассказ об истории BSD в начале 1990-х годов будет неполным без упо­минания о судебных процессах между UNIX System Laboratories (USL, дочерней ком­пании, принадлежащей AT&T и занимавшейся разработкой и рыночным продвижением UNIX) и командой из Беркли. В начале 1992 года компания Berkeley Software Design, Incorporated (BSDi, в настоящее время входит в состав Wind River) приступила к рас­пространению сопровождаемых на коммерческой основе версий BSD UNIX под на­званием BSD/OS (на базе выпуска Net/2) и добавлений, разработанных Джолицами под названием 386/BSD. Компания BSDi распространяла двоичный и исходный код по цене $995 и советовала потенциальным клиентам пользоваться телефонным номером 1-800-ITS-UNIX.

В апреле 1992 года компания USL предъявила иск компании BSDi, пытаясь воспре­пятствовать продаже этих проектов. Как заявлялось в USL, они по-прежнему представля­ли собой исходный код, который был защищен патентом, полученным USL, и составлял коммерческую тайну. Компания USL также потребовала, чтобы BSDi прекратила ис­пользовать вводящий в заблуждение телефонный номер. Со временем иск был выдвинут еще и Калифорнийскому университету. Суд в конечном итоге отклонил все, кроме двух претензий USL, а также встречный иск Калифорнийского университета к USL, в котором утверждалось, что USL не упомянула о том, что в System V содержится код BSD.

В ходе рассмотрения иска в суде USL была куплена компанией Novell, чей руково­дитель, ныне покойный Рэй Нурда (Ray Noorda), публично заявил, что он предпочел бы конкурировать на рынке, а не в суде. Спор окончательно был урегулирован в январе 1994 года. В итоге от Калифорнийского университета потребовали удалить из выпуска Net/2 три из 18 000 файлов, внести незначительные изменения в несколько файлов и до­бавить упоминание об авторских правах USL в отношении примерно 70 других файлов, которые университет тем не менее мог продолжать распространять на свободной основе. Эта измененная система была выпущена в июне 1994 года под названием 4.4BSD-Lite. (Последним выпуском университета в июне 1995 года был 4.4BSD-Lite, выпуск 2.) На данный момент по условиям правового урегулирования требуется, чтобы в BSDi, FreeBSD и NetBSD их база Net/2 была заменена исходным кодом 4.4BSD-Lite. Как отме­чено в публикации [McKusick et al., 1996], хотя эти обстоятельства привели к замедлению процесса разработки версий, производных от BSD, был и положительный эффект. Он заключался в том, что эти системы были повторно синхронизированы с результатами трехлетней работы, проделанной университетской группой Computer Systems Research Group co времени выпуска Net/2.

Номера версий ядра Linux

Подобно большинству свободно распространяемых продуктов, для Linux практикуется модель ранних (release-early) и частых (release-often) выпусков, поэтому новые исправ­ленные версии ядра появляются довольно часто (иногда чуть ли не каждый день). По мере расширения круга пользователей Linux каждая модель выпуска была настро­ена так, чтобы не влиять на тех, кто уже пользуется этой системой. В частности, после выпуска Linux 1.0 разработчики ядра приняли систему нумерации версий ядра x.y.z, где х обозначала номер основной версии, у — номер второстепенной версии в рамках основной версии, а г - номер пересмотра второстепенной версии (с незначительными улучшениями и исправлениями).

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

После выпуска версии ядра с номером 2.6 модель разработки была изменена. Глав­ной причиной для этого изменения послужили проблемы и недовольства, вызванные длительными периодами между выпусками стабильных версий ядра. Вокруг доработки этой модели периодически возникали споры, но основными остались следующие характеристики.

  • Версии ядер перестали делить на стабильные и дорабатываемые. Каждый новый выпуск 2.6.2 может содержать новые функции. У выпуска есть жизненный цикл, на­чинающийся с добавления функций, которые затем стабилизируются в течение не­скольких версий-кандидатов. Когда такие версии признают достаточно стабильными, их выпускают в качестве ядра 2.6.2. Между циклами выпуска обычно проходит около трех месяцев.
  • Иногда в стабильный выпуск с номером 2.6.2 требуется внести небольшие исправ­ления для устранения недостатков или решения проблем безопасности. Если эти исправления важны и кажутся достаточно простыми, то разработчики не ждут следу­ющего выпуска с номером 2.6.2, а вносят их, выпуская версию с номером вида 2.6.2.R. Здесь R является следующим номером для второстепенной редакции ядра, имеющего номер 2.6.2.
  • Дополнительная ответственность за стабильность ядра, поставляемого в дистрибути­ве, перекладывается на поставщиков этого дистрибутива.

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

Для изменений, появившихся в серии ядра с номерами 2.6.2, я указываю точную вер­сию ядра. Когда говорится, что функция является новой для ядра версии 2.6, без указания номера редакции 2, имеется в виду функция, которая была реализована в дорабатываемых сериях ядра с номером 2.5 и впервые появилась в стабильной версии ядра 2.6.0.

 

В представленном здесь списке каждый из экземпляров 2.6.Z может быть просто заменен на 4.z и описание будет по-прежнему актуальным для текущей модели разработки ядра.

 

Портирование на другие аппаратные архитектуры

В начале разработки Linux главной целью было не достижение возможности портиро­вания системы на другие вычислительные архитектуры, а создание работоспособной реализации под архитектуру Intel 80386. Но с ростом популярности Linux стала портироваться на другие архитектуры. Список аппаратных архитектур, на которые была портирована Linux, продолжает расти и включает в себя х86-64, Motorola/IBM PowerPC и PowerPC64, Sun SPARC и SPARC64 (UltraSPARC), MIPS, ARM (Acorn), IBM zSeries (бывшая System/390), Intel IA-64 (Itanium; см. публикацию [Mosberger & Eranian, 2002]), Hitachi SuperH, HP PA-RISC и Motorola 68000.

 

Дистрибутивы Linux

Если называть вещи своими именами, то название Linux относится лишь к ядру, разрабо­танному Линусом Торвальдсом. И тем не менее, сам термин Linux обычно используется для обозначения ядра, а также широкого ассортимента других программных средств (инструментов и библиотек), которые в совокупности составляют полноценную операци­онную систему. На самых ранних этапах существования Linux пользователю требовалось собрать все эти инструменты воедино, создать файловую систему и правильно разместить и настроить в ней все программные средства. На это уходило довольно много времени и требовался определенный уровень квалификации. В результате появился рынок для распространителей Linux. Они проектировали пакеты (дистрибутивы) для автоматиза­ции основной части процесса установки, создания файловой системы и установки ядра, а также других требуемых системе программных средств.

Самые первые дистрибутивы появились в 1992 году. Это были MCC Interim Linux (Manchester Computing Centre, UK), TAMU (Texas A&M University) и SLS (SoftLanding Linux System). Самый старый из выживших до сих пор коммерческих дистрибутивов, Slackware, появился в 1993 году. Примерно в то же время появился и некоммерческий дистрибутив Debian, за которым вскоре последовали SUSE и Red Hat. В настоящее время весьма большой популярностью пользуется дистрибутив Ubuntu, который впервые по­явился в 2004 году. Теперь многие компании-распространители также нанимают програм­мистов, которые активно обновляют существующие проекты по разработке свободного ПО или инициируют новые проекты.

 

Вас заинтересует / Intresting for you:

Основа операционной системы Li...
Основа операционной системы Li... 3031 просмотров Андрей Волков Wed, 09 Jan 2019, 05:36:45
Процессы Linux
Процессы Linux 4554 просмотров Doctor Wed, 23 Jan 2019, 16:47:24
Сигналы в Linux: назначение и ...
Сигналы в Linux: назначение и ... 2043 просмотров Fortan Fri, 05 Nov 2021, 07:58:01
Linux: как инсталлировать прог...
Linux: как инсталлировать прог... 1478 просмотров Дэйзи ак-Макарова Sun, 11 Nov 2018, 11:54:59
Войдите чтобы комментировать

AlexV аватар
AlexV ответил в теме #9344 5 года 1 мес. назад
Linux сегодня самая динамично развивающаяся система. Краткий ликбез по истории вовсе не лишним будет, так сказать!