Это перевод страницы, написанной на английском языке.

Linux и система GNU

Многие пользователи компьютеров каждый день запускают модифицированную версию системы GNU, даже не осознавая этого. В силу особого поворота событий версия GNU, которую сегодня широко используют, часто называется “Linux”, и многим из ее пользователей не известно, что в основном это система GNU, разработанная проектом GNU.

Там действительно есть Linux, и эти люди используют ее, но это только часть системы, которой они пользуются. Linux — это ядро — системная программа, которая выделяет ресурсы машины другим программам, которые вы запускаете. Ядро — важная часть операционной системы, но само по себе оно бесполезно; оно может функционировать только в составе полной операционной системы. Linux обычно применяют в комбинации с операционной системой GNU: вся система представляет собой в основном GNU с добавлением Linux, то есть GNU/Linux. Все так называемые дистрибутивы “Linux” на самом деле являются дистрибутивами GNU/Linux.

Многие пользователи не понимают, в чем разница между ядром, то есть Linux, и целой системой, которую они также называют “Linux”. Неоднозначное употребление названия не способствует пониманию этого. Эти пользователи часто думают, что Линус Торвальдс разработал целую операционную систему в 1991 — году, ему только немного помогли.

Программисты, в сущности, знают, что Linux — это ядро. Но поскольку они нередко слышали, как всю систему тоже называют “Linux”, они часто представляют себе историю, которая оправдала бы наименование всей системы по ядру. Например, многие думают, что как только Линус Торвальдс написал Linux (ядро), его пользователи оглянулись вокруг в поисках других свободных программ, чтобы работать с ним, и обнаружили, что (без какой бы то ни было особой причины) почти все необходимое для построения системы типа Unix уже под рукой.

То, что они обнаружили, не было случайностью — это было не совсем полной системой GNU. Доступные свободные программы сложились в полную систему, потому что проект GNU работал над этим с 1984 года. В “Манифесте GNU” мы поставили целью разработать свободную систему типа Unix под названием GNU. “Первоначальное объявление” проекта GNU также очерчивает некоторые из начальных планов по системе GNU. К тому времени, когда началась разработка Linux, GNU была почти завершена.

Цель большинства проектов по созданию свободных программ — разработка определенной программы для определенной задачи. Например, Линус Торвальдс решил написать Linux, ядро типа Unix; Дональд Кнут решил написать TeX, программу верстки текста; Боб Шейфлер решил разработать оконную систему (систему X Window). Естественно измерять вклад такого рода проекта по конкретным программам, которые пришли из этого проекта.

Если бы мы попытались измерить таким образом вклад проекта GNU, к какому бы выводу мы пришли? Один из поставщиков компакт-дисков установил, что в их “дистрибутиве Linux” программы GNU — самый крупный единый массив — около 28% всего исходного текста; в их состав входят некоторые существенные компоненты, без которых системы не могло бы быть; собственно Linux составляет около 3%. (В 2008 году пропорции сходны: в разделе “main” gNewSense Linux составляет — 1,5%, а GNU — 15%.) Итак, если бы вы собирались выбрать название системы на основании того, кто написал программы в этой системе, наиболее подходящим выбором одного компонента было бы “GNU”.

Но на вопрос можно взглянуть глубже. Проект GNU не был и не является проектом по разработке определенных пакетов программ. Это не был проект по разработке компилятора C, хотя мы сделали это. Это не был проект по разработке текстового редактора, хотя мы разработали его. Проект GNU постановил разработать полную свободную операционную систему типа Unix: GNU.

Многие сделали серьезный вклад в свободные программы этой системы, и все они заслуживают признательности за свои программы. Но причина, по которой это является целостной системой — а не только набором полезных программ — то, что проект GNU постановил сделать это такой системой. Мы составили список программ, необходимых, чтобы свободная система была полной, и систематически отыскивали, писали или отыскивали людей для написания всего, что стояло в списке. Мы написали существенные, но не впечатляющие[1] компоненты, потому что без них нельзя получить систему. Некоторые из компонентов нашей системы (средства программирования) стали популярны сами по себе среди программистов, но мы написали много компонентов, не являющихся средствами разработки(2). Мы даже разработали программу для игры в шахматы, GNU Chess, потому что в полной системе игры тоже должны быть.

К началу девяностых мы сложили всю систему, кроме ядра. Мы приступили и к ядру, GNU Hurd, которое работает на Mach. Разработка этого ядра шла гораздо труднее, чем мы ожидали; ядро GNU Hurd стало надежно работать в 2001 году, но оно далеко не готово для общего пользования.

К счастью, благодаря Linux нам не пришлось ждать Hurd. Когда Торвальдс освободил Linux в 1992 году, это заполнило последний серьезный пробел в системе GNU. Тогда люди смогли сочетать Linux с системой GNU [1], чтобы составить полную свободную систему: версию GNU, которая содержала также Linux; другими словами, систему GNU/Linux.

Заставить их как следует работать вместе не было простой задачей. Некоторые компоненты GNU[3] требовали существенных изменений, чтобы они работать с Linux. Объединение в полную систему в едином дистрибутиве, который работал бы “без подгонки”, было тоже большой работой. Это требовало решения вопросов, связанных с установкой и загрузкой системы — проблема, за которую мы тогда еще не ухватились, потому что у нас дело до этого пока не дошло. Таким образом, люди, разработавшие различные дистрибутивы системы, проделали большую и важную работу. Но это было работой, которую, по самой природе вещей, обязательно кто-нибудь выполнил бы.

Проект GNU поддерживает системы GNU/Linux так же хорошо, как саму систему GNU. ФСПО финансировал доработку расширений библиотеки C GNU, связанных с Linux, так что теперь они хорошо пригнаны друг к другу, и самые новые системы GNU/Linux используют текущий выпуск библиотеки без изменений. ФСПО финансировал также на ранней стадии разработку Debian GNU/Linux.

Сегодня есть много разных вариантов системы GNU/Linux (часто называемых “дистрибутивами”). Большинство из них включает несвободные программы — их разработчики следуют философии “открытого исходного текста”, ассоциирующегося с Linux, а не философии “свободных программ” GNU. Но есть и полностью свободные дистрибутивы GNU/Linux. ФСПО предоставляет технические ресурсы для нескольких из них.

Чтобы создать свободный дистрибутив GNU/Linux, недостаточно просто исключить различные несвободные программы. В настоящее время обычная версия Linux тоже содержит несвободные программы. Эти программы предназначены для записи в устройства ввода-вывода, когда загружается система, и они включаются в виде длинных последовательностей чисел в “исходный текст” Linux. Таким образом, поддержка свободных дистрибутивов GNU/Linux сейчас включает также и поддержку свободной версии Linux.

Пользуетесь вы GNU/Linux или нет, пожалуйста, не вводите общественность в заблуждение двусмысленным употреблением названия “Linux”. Linux — это ядро, одна из необходимых составляющих системы. Система в целом — это в основном система GNU с добавлением Linux. Когда вы говорите об этом сочетании, пожалуйста, называйте его “GNU/Linux”.

Если вы хотите сослаться для справок на “GNU/Linux”, эта страница и https://www.gnu.org/gnu/the-gnu-project.html — хорошие примеры. Если вы упоминаете Linux (ядро) и хотите добавить ссылку для справок, http://foldoc.org/foldoc/linux — хороший адрес для этого.

Дополнения

Кроме GNU был еще один проект, который независимо произвел свободную операционную систему типа Unix. Эта система известна как BSD, она была разработана в Калифорнийском университете в Беркли. Она была несвободной в восьмидесятые, но стала свободной в начале девяностых. Любая из свободных операционных систем, существующих сегодня,[4] почти наверное является либо вариантом системы GNU, либо разновидностью системы BSD.

Иногда спрашивают, является ли BSD тоже версией GNU, подобно GNU/Linux. Разработчики BSD сделали свои программы свободными, следуя примеру проекта GNU, и открытые призывы активистов GNU помогли убедить их, но в исходных текстах программ мало общих мест с текстами GNU. Сегодня системы BSD используют некоторые программы GNU, точно так же, как система GNU и ее варианты пользуются некоторыми программами BSD; однако в целом это две различных системы, которые развивались отдельно. Разработчики BSD не добавили ядро в систему GNU, разработав его, так что название типа “GNU/BSD” не подошло бы к ситуации[5].

Примечания

  1. Эти не впечатляющие, но существенные компоненты включают ассемблер (GAS) и редактор связей (GLD), которые сейчас оба входят в пакет GNU Binutils, GNU tar, и другие.
  2. Например, Bourne Again SHell (BASH), интерпретатор языка PostScript Ghostscript и библиотека C GNU не являются средствами программирования. Так же, как и GNUCash, GNOME и GNU Chess.
  3. Например, библиотека C GNU.
  4. С тех пор, как были написаны эти строки, была разработана почти полностью свободная операционная система, подобная Windows, но с технической точки зрения она совсем не сходна с GNU или Unix, так что на самом деле это к делу не относится. Ядро Solaris по большей части сделали свободным, но если бы вы захотели сделать из этого свободную систему, кроме замены недостающих частей ядра, вам потребовалось бы также обратить ее в GNU или BSD.
  5. С другой стороны, за годы, прошедшие со времени написания этой статьи, библиотека C GNU была перенесена на несколько версий ядра BSD, что позволило прямо соединять систему GNU с этим ядром. Точно так же, как в случае с GNU/Linux, это действительно варианты GNU и потому называются GNU/kFreeBSD и GNU/kNetBSD, в зависимости от ядра системы. Обычные пользователи типичных настольных компьютеров с трудом могут отличить GNU/Linux от GNU/*BSD.

Примечания переводчиков

  1. В комментарии к выпуску Linux 0.01 сказано: “Большинство из инструментов, применяемых с linux, являются программами GNU и распространяются по авторскому леву GNU. Эти инструменты не входят в дистрибутив — подробности запрашивайте у меня (или в GNU)”. (Most of the tools used with linux are GNU software and are under the GNU copyleft. These tools aren't in the distribution - ask me (or GNU) for more info).