Споры о том, как правильно именовать операционную систему, Linux или GNU Linux, не утихают с момента появления ядра и длятся вот уже три десятилетия. На стороне тех и других звучат весомые доводы, мы же попытаемся взглянуть на это со стороны.
В самом названии GNU Linux лежит немало противоречий, во многом связанных с самой идеей операционной системы GNU, заложенной Ричардом Столлманом. Ещё одно противоречие заключается в том, что именно считать операционной системой Linux. Давайте же разбираться Linux или GNU Linux.
Предыстория
Стоит начать с того, что предшествовало утилитам GNU и ядру Linux – c операционной системы UNIX. Она берёт своё начало в 1971 году и первые несколько лет разработка шла открыто, но к концу десятилетия произошёл раскол, появляются новые операционные системы на основе UNIX, а их код, равно как и код сопутствующих утилит становится объектом патентного права.
К счастью, в 80-х годах разработчики спохватились и представили общественности набор спецификаций (single UNIX specification), которым должны соответствовать UNIX-подобные системы. Позднее он получил название POSIX (к слову, название для него предложил сам Столлман). При условии соблюдения всех требований стандарта, можно было писать одну программу для нескольких операционных систем.
Тогда же, в 80-х, Ричард Столлман создаёт проект GNU, призванный предоставить свободную альтернативу не только программам, но и операционной системе UNIX в целом, в соответствии с требованиями POSIX. Под это дело он даже создаёт лицензионное соглашение GNU GPL, которое обязывало при использовании открытого кода оставлять открытыми и его производные (так называемый копилефт).
GNU GPL заслуживает отдельного внимания, так как сама идея того, что вы должны открыть код своей программы, основанной на открытом коде, может понравиться далеко не всем. Ведь заимствованного кода может быть меньшая часть. Строгие правила ослабили только в 1991 году с выходом лицензии Lesser GPL, позволяющей подключать свободные библиотеки к проприетарному ПО.
Столлман активно работал над созданием утилит GNU, а с 1990 года начал разработку Hurd – ядра свободной операционной системы. Но к 1991 году ядро так и не было закончено, зато финский студент Линус Торвальдс сделал прототип ядра, вдохновляясь микроядром Minix. К тому времени уже существовала сеть интернет и энтузиасты со всего мира стали развивать ядро совместными усилиями.
Торвальдс представил монолитное ядро, которое работало, но практически ничего не умело. У Столлмана было микроядро на основе Mach, также требующее доработок. Но всё же главное отличие было в идеологии. Не многие соглашались с тем, что программное обеспечение должно быть полностью свободным. К тому же без этого поддержка устройств была бы сильно ограничена.
Что входит в GNU
Список утилит и приложений обширен. Мы перечислим лишь малую часть, достаточную для понимания масштабов GNU Project.
- Bash – оболочка терминала, отвечающая за обработку команд.
- Базовые утилиты – работа с файлами (копирование, перемещение, создание папок и т.д.), работа с текстом (форматирование, разделение и объединение, вывод определённых строк и т.д.), работа с командной оболочкой (переход к каталогу, вывод даты и т.д.).
- GCC, GDB – компилятор и отладчик языка C.
- Glibc – библиотеки языков C и C++, необходимые для работы большого количества приложений Linux.
- GRUB – первичный загрузчик системы.
- Tar, Gzip – архиваторы.
- GIMP – графический редактор.
- GTK+, GNOME – библиотеки элементов интерфейса и оболочка рабочего стола.
Как видите, многие утилиты необходимы для работы системы, а некоторые приложения можно встретить практически в любом дистрибутиве, вроде того же GIMP.
Как правильно: Linux или GNU Linux
Если брать в расчёт то, что утилиты GNU используются в каждом настольном дистрибутиве, то было бы уместно упомянуть об этом. С другой же стороны, мы привыкли называть Linux не только ядро, а операционную систему в целом. Она же в свою очередь за редким исключением не соответствует требованиям GNU. И даже в самом ядре можно найти закрытый код – драйверы некоторых устройств. Например, мы можем без зазрения совести назвать дистрибутив PureOS как GNU Linux. В его состав входит только свободное программное обеспечение.
А вот Android, основанный на ядре Linux, практически не использует утилиты GNU, поэтому в привычном понимании он едва ли может считаться операционной системой Linux. Аналогичная ситуация с многочисленными прошивками сетевых устройств и интернета вещей, где урезанное ядро Linux соседствует всего с несколькими утилитами.
Вот мы и получили два противоречия. С одной стороны под операционной системой Linux подразумевается ядро Linux и утилиты GNU, а с другой – строгие требования не позволяют назвать Linux в целом операционной системой GNU.
Выводы
Утилиты GNU составляют приличную часть дистрибутива и по количеству кода превосходят ядро Linux. Но сама идея GNU, даже в том случае, если бы выбрали ядро Hurd, оказалась бы нежизнеспособной. Нельзя заставить разработчиков открыть код, ради того, чтобы их программа попала в состав операционной системы GNU.
Использовать определение GNU Linux можно когда идёт речь о свободной операционной системе или же надо подчеркнуть то, что имеется ввиду именно настольная/серверная операционная система, а не только ядро Linux.