Тем временем компания AT&T лишилась своего монопольного положения на рынке и занялась продажами системы UNIX. В результате появился еще один основной вариант UNIX под названием System V, который также послужил базой для нескольких коммерческих реализаций.
К разработке (GNU) Linux привели два разных проекта. Одним из них был GNU-проект, основанный Ричардом Столлманом. В конце 1980-х годов в рамках GNU была создана практически завершенная, свободно распространяемая реализация UNIX. Недоставало только работоспособного ядра. В 1991 году Линус Торвальдс, вдохновленный ядром Minix, придуманным Эндрю Таненбаумом, создал работоспособное ядро UNIX для архитектуры Intel x86-32. Торвальдс обратился за помощью к другим программистам для усовершенствования ядра. На его призыв откликнулось множество программистов, и со временем система Linux была расширена и портирована на большое количество разнообразных аппаратных архитектур.
Проблемы портирования, возникшие из-за наличия разных реализаций UNIX и C, существовавших к концу 1980-х годов, сильно повлияли на решение вопросов стандартизации. Язык C прошел стандартизацию в 1989 году (C89), а пересмотренный стандарт вышел в 1999 году (C99). Первая попытка стандартизации интерфейса операционной системы привела к выпуску POSIX.1, одобренному в качестве стандарта IEEE в 1988 году и в качестве стандарта ISO в 1990 году. В 1990-е годы были разработаны дополнительные стандарты, включая различные версии спецификации Single UNIX Specification. В 2001 году был одобрен объединенный стандарт POSIX 1003.1-2001 и SUSv3. Этот стандарт собрал воедино и расширил различные более ранние стандарты POSIX и более ранние версии спецификации Single UNIX Specification. В 2008 году был завершен менее масштабный пересмотр стандарта, что привело к объединенному стандарту POSIX 1003.1-2008 и SUSv4.
В отличие от большинства коммерческих реализаций UNIX, в Linux реализация отделена от дистрибутива. Следовательно, не существует какого-либо «официального» дистрибутива Linux. Предложения каждого распространителя Linux состоят из какого-то варианта текущей стабильной версии ядра с добавлением различных усовершенствований. В рамках LSB разрабатывается и внедряется набор стандартов для систем Linux с целью обеспечения совместимости двоичных приложений в разных дистрибутивах Linux. Эти стандарты позволяют запускать откомпилированные приложения в любой LSB-совместимой системе, запущенной на точно таком же аппаратном оборудовании.
Дополнительные сведения об истории и стандартах UNIX можно найти в публикациях [Ritchie, 1984], [McKusick et al., 1996], [McKusick & Neville-Neil, 2005], [Libes & Ressler, 1989], [Garfinkel et al., 2003], [Stevens & Rago, 2005], [Stevens, 1999], [Quartermann & Wilhelm, 1993], [Goodheart & Cox, 1994] и [McKusick, 1999].
В публикации [Salus, 1994] изложена подробная история UNIX, откуда и были почерпнуты основные сведения, приведенные в начале главы. В публикации [Salus, 2008] предоставлена краткая история Linux и других проектов по созданию свободных программных продуктов. Многие подробности истории UNIX можно также найти в выложенной в Интернет книге Ронды Хобен (Ronda Hauben) History of UNIX (http://www.dei.isep.ipp.pt/~acc/docs/unix.html). Весьма подробную историческую справку, относящуюся к выпускам различных реализаций UNIX, вы найдете по адресу http://www.levenez.com/unix/.
В публикации [Josey, 2004] дается обзорная информация по истории систем UNIX и разработке SUSv3, а также приводится руководство по использованию спецификации, сводные таблицы имеющихся в SUSv3 интерфейсов и пособие по переходу от SUSv2 к SUSv3 и от C89 к C99.
Наряду с предоставлением программных продуктов и документации, на сайте GNU (http://www.gnu.org/) содержится подборка философских статей, касающихся свободного программного обеспечения. А в публикации [Williams, 2002] дается биография Ричарда Столлмана.
Собственные взгляды Торвальдса на развитие Linux можно найти в публикации [Torvalds & Diamond, 2001].
2. Основные понятия
В этой главе вводится ряд понятий, имеющих отношение к системному программированию Linux. Она предназначена для тех читателей, которые работали в основном с другими операционными системами или имеют весьма небогатый опыт работы с Linux либо иными реализациями UNIX.
Понятие
• Для обозначения всего пакета, содержащего основные программные средства управления ресурсами компьютера и все сопроводительные стандартные программные инструменты: интерпретаторы командной строки, графические пользовательские интерфейсы, файловые утилиты и редакторы.