В ответ на это Столлман запустил проект 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 C, но теперь переименован в пакет GNU-компиляторов, содержащий компиляторы для C, C++ и других языков), оболочка bash и glibc (GNU-библиотека C).
В начале 1990-х годов в рамках проекта GNU была создана практически завершенная система, за исключением одного важного компонента: рабочего ядра UNIX. Проект GNU и Фонд свободного программного обеспечения начали работу над амбициозной конструкцией ядра, известной как GNU Hurd и основанной на микроядре Mach. Но ядро Hurd до сих пор находится не в том состоянии, чтобы его можно было выпустить. (На время написания этой книги работа над Hurd продолжалась и это ядро могло запускаться только на машинах с архитектурой x86-32.)
Значительная часть программного кода, составляющего то, что обычно называют системой Linux, фактически была взята из проекта GNU, поэтому при ссылке на всю систему Столлман предпочитает использовать термин GNU/Linux. Вопрос, связанный с названием (Linux или GNU/Linux) стал причиной дебатов в сообществе разработчиков свободного программного обеспечения. Поскольку данная книга посвящена в основном API ядра Linux, в ней чаще всего будет использоваться термин Linux.
Начало было положено. Чтобы соответствовать полноценной UNIX-системе, созданной в рамках проекта GNU, требовалось только рабочее ядро.
1.2.2. Ядро Linux
В 1991 году Линус Торвальдс (Linus Torvalds), финский студент хельсинкского университета, задумал создать операционную систему для своего персонального компьютера с процессором Intel 80386. Во время учебы он имел дело с Minix, небольшим UNIX-подобным ядром операционной системы, разработанным в середине 1980-х годов Эндрю Таненбаумом (Andrew Tanenbaum), профессором голландского университета. Таненбаум распространял Minix вместе с исходным кодом как средство обучения проектированию ОС в рамках университетских курсов. Ядро Minix могло быть собрано и запущено в системе с процессором Intel 80386. Но, поскольку оно в первую очередь рассматривалось в качестве учебного пособия, ядро было разработано с прицелом на максимальную независимость от архитектуры аппаратной части и не использовало все преимущества, предоставляемые процессорами Intel 80386.