Gnu linux что это
Перейти к содержимому

Gnu linux что это

  • автор:

Gnu linux что это

Операционная система GNU
При поддержке Фонда свободного программного обеспечения

Linux и система GNU

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

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

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

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

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

Анатомия GNU/Linux

Какое-то время назад на Хабре была небольшая волна постов на тему «Почему я [не] выбрал Linux». Как порядочный фанатик я стриггерился, однако решил, что продуктивнее что-нибудь рассказать о своей любимой системе, чем ломать копии в комментариях.

У меня сложилось впечатление, что многие пользователи GNU/Linux слабо представляют, из чего сделана эта операционная система, поэтому утверждают, что она сляпана из попавшихся под руку кусков. В то же время, архитектура большинства дистрибутивов является устоявшейся и регламентируется рядом стандартов, включая стандарт графического окружения freedesktop.org и Linux Standard Base, расширяющий стандарты Unix. Мне при знакомстве с GNU/Linux несколько лет назад для погружения не хватало простой анатомической карты типичного дистрибутива, поэтому я попробую рассказать об этом сам.

Загрузчик

Сеанс операционной системы начинается с загрузчика, как театр с вешалки. Дефолтным загрузчиком сегодня является GNU GRUB, известный так же как GRUB 2. По-прежнему доступна первая ветка, называемая теперь «GRUB Legacy». Другой загрузчик с давней историей — Syslinux.

Задача загрузчика — инициализировать ядро Linux. Для этого, в общем случае, нужно знать, где ядро лежит, и уметь прочитать это место (раздел Ext4, скажем). Ядру в помощь загрузчик обычно так же подтягивает начальный образ загрузки, о котором скажем позже. GRUB умеет много прочего, типа построения весьма сложных меню и чейнлоадинга других загрузчиков (Windows Boot Manager например). GRUB имеет конфигурационный синтаксис, отдалённо напоминающий шелл, и расширяется модулями.

GRUB велик и могуч, порой даже слишком, и встраиваемые системы часто используют компактный Das U-Boot.

Ядро

Могучий Linux («не оставляй нас, монолит!»). Ядро операционной системы, созданное, чтобы работать с POSIX-совместимыми окружениями. Обычно лежит в /boot/ и содержит в названии слово vmlinuz , где «vm» напоминает нам о поддержке виртуальной памяти, а «z» указывает, что файл сжат.

В рамках одного дистрибутива может поддерживаться несколько вариантов ядра, например:

  • mainline («основное»);
  • LTS (с расширенной поддержкой);
  • rt (патченное для поддержки исполнения в режиме реального времени);
  • с различными патчами для повышения производительности или защищённости (zen, hardened etc);
  • libre (почищенное от проприетарных блобов ядро, ожидаемо поддерживающее мало оборудования).
  • совсем экзотичные варианты с не-Linux ядром типа Debian GNU/Hurd (с ядром GNU Hurd) и Debian GNU/kFreeBSD (с ядром FreeBSD соответственно). Это уже, конечно, не GNU/Linux.

Начальный образ загрузки

Начальный образ загрузки известен так же как initrd и initramfs. Представляет собой архив с образом файловой системы, развёртываемой в оперативную память в начале процесса загрузки. Несёт в себе различные драйверы и скрипты, позволяющие инициализировать оборудование и смонтировать файловые системы.

Содержимое начального образа загрузки зависит от версии ядра и потребностей пользователя (кто-то использует ZFS, а у кого-то корень зашифрован LUKS). Поэтому образ не поставляется в дистрибутивах. В дистрибутивах поставляются фреймворки для создания начальных образов по мере необходимости. Так, обычно создание свежего образа инициируется при обновлении ядра. Вот несколько популярных фреймворков:

  • initramfs-tools — детище Debian.
  • Dracut (произносится созвучно с сушёной кошкой) — в RHEL и производных (CentOS, Scientific Linux etc.). Наиболее гибкий и современный инструмент из перечисленных, если спросите меня.
  • mkinitcpio поставляется в Archlinux, хотя мейнтейнеры подумывают о Dracut, который уже включён в репозиторий и установочные образы.
  • make-initrd — свой путь у замечательного отечественного дистрибутива Alt Linux.

Тут же упомянем Plymouth, размещаемый в начальном образе. Это заставка (сплэш-скрин), позволяющая заменить вывод ядра при загрузке на произвольную анимированную картинку, например логотип дистрибутива, что принято в «дружелюбных к пользователю»™ дистрибутивах типа Ubuntu и Fedora.

Init

Система инициализации — это пастырь процессов. Она стартует раньше всех и имеет PID 1. Она определяет уровень запуска системы и жизненный цикл большинства служб. Независмо от того, что за система инициализации представлена, она предлагает исполняемые файлы /sbin/init (или /usr/bin/init , или в том же духе, ну вы поняли).

Холиварный элемент. Много лет с нами была Sysvinit, пришедшая из варианта ОС Unix System V. Sysvinit полагалась в огромной степени на скрипты инициализации. Служил этот инит, в общем, исправно, но постепенно некоторым инженерам стало мозолить глаза последовательное исполнение скриптов и собственно скрипты, известные в жарких спорах за свою распростёртость как «баш-портянки». В конце 00-ых-начале 10-ых как грибы после дождя расплодились альтернативные системы инициализации: OpenRC от Gentoo, Upstart от Canonical, Systemd от Red Hat за авторством Леннарта Поттеринга. В конце концов по причинам техническим и политическим всех сожрала Systemd. Её восхваляют и ненавидят. Восхваляют в основном за простой и лаконичный синтаксис служб. Так, скрипт запуска веб-сервера Apache для классического инита занимает 153 строки включая комментарии, а файл службы из пакета apache в Arch Linux — 15 строк. Недолюбливают в основном за то, что эта система инициализации подрабатывает ещё и резолвером, планировщиком, менеджером сети, менеджером монтирования и Бог весть ещё чем, попирая дзен Unix.

Командная оболочка

Командная оболочка, она же командный интерпретатор или просто шелл. Неискушённый пользователь скажет — «в гробу я этот шелл видал, можно в графическом режиме жить», и будет неправ, поскольку шелл прописан в стандарте POSIX и необходим для работоспособности системы. Есть понятие «оболочка входа» (login shell) — это первый процесс, запускамый при входе пользователя. Он подтягивает опции и переменные окружения из конфигурационных файлов, все последующие процессы запускаются в контексте этого шелла. Что будет запущено в качестве оболочки входа, определяется в /etc/passwd .

Наиболее распространены сегодня следующие оболочки:

  • Bourne shell (sh) — «тот самый шелл», сложно найти дистрибутив без него.
  • Bourne again shell (bash) — принят по умолчанию в качестве пользователькой оболочки в большинстве GNU/Linux дистрибутивов и предлагает ряд удобств по сравнению с sh.
  • Debian Almquist shell (dash) — компактная облочка, совместимая с sh. Традиционно используется в Debian, где /usr/bin/sh на неё ссылается.
  • Z shell (zsh) — похож на bash, но предлагает оригинальные фишечки для интерактивного ввода. Редко идёт из коробки, но обычно поставляется в репозитории.
  • BusyBox — утилита для встраиваемых систем, которая предоставляет целое пользовательское окружение, в том числе — POSIX-совместимый шелл (вызывается так: $ busybox sh ).

Графический сервер

Демон, отвечающий за отрисовку окошек. Золотой стандарт графического сервера — X Window System с нами аж с 1984 года. Это именно стандарт, архитектура и набор протоколов. Реализаций за прошедшие годы была уйма, в каждой собственнической Unix-системе была своя. В GNU/Linux (и BSD) долгое время применялся Xfree86. Теперь с нами X.Org Server, или просто Xorg, он отпочковался от XFree86.

X Window System — мощная и богатая система, так, одна из возможностей — сетевая прозрачность. Вы можете запустить на своём хосте графическое приложение с другой машины, даже когда на той машине графический сервер не запущен. При помощи SSH это можно сделать, например, так (может потребоваться небольшая донастройка sshd):

$ ssh -X hostname firefox

Надо сказать, терминология X Window System контринтуитивна: клиентом называется графическое приложение, а сервером — отрисовывающее. На этот счёт прошлись в классической монографии «The UNIX-HATERS Handbook».

Другая возможность X, отрисовка графических примитивов и текстовых глифов, использовалась в старые времена, когда мужчины были мужчинами и рисовали окошки сами, без тулкитов.

В окружениях рабочих столов активно используется X keyboard extension, расширение, отображающее нажатие клавиш на различные раскладки.

«Иксам» пророчат скорую кончину. Именно обширность и сложность стандарта побудила разработчиков СПО начать работу над новым стандартом — протоколом Wayland. Wayland достиг определённой стадии зрелости и с переменным успехом внедряется дистрибутивами как графический сервер по умолчанию. Тем не менее, проект Wayland начат в 2008 году, а стандарт X ещё не спешит уходить с голубых экранов.

Оконный менеджер Weston

На скриншоте Weston — эталонная реализация композитного менеджера Wayland. Умеет крутить окошки. А ещё его можно запустить внутри другого рабочего стола, просто выполнив в терминале weston .

После старта графический сервер обслуживает иерархию окон. Существует понятие «корневое окно» (root window), оно, в свою очередь, «владеет» окнами панелей, приложений. Окна приложений «владеют» своими модальными окнами. Обычно обои рабочего стола отрисовываются в корневом окне.

Дисплейный менеджер

Не вполне интуитивно названные, дисплейные менеджеры (DM) рисуют для нас приветливое окошко входа в систему. Обычно, помимо ввода логина и пароля, они позволяют выбрать сессию (при наличии выбора в вашей системе) и задать язык сеанса. Дисплейные менеджеры делают плюс-минус одну и ту же нехитрую работу, их многообразие оправдано консистентностью с различными средами рабочего стола (что зависит, по большей части, от графического тулкита и утилит настройки). Можно жить без дисплейного сервера, как в старые добрые времена. Для этого потребуется настроить ваш ~/.xinitrc на запуск необходимого сеанса рабочего стола. Это позволит входить через ядерную консоль и запускать рабочий стол командой startx .

Жизнь без DMЖизнь c SDDM

Типичные представители дисплейных менеджеров:

  • GDM из набора GNOME;
  • SDDM из комплекта KDE;
  • LightDM — универсальный вариант;
  • FlyDM — из поставки Astra Linux.

Окружение рабочего стола

Окружения рабочего стола (DE) состоит из ряда стандартных компонентов, таких, как:

  • диспетчер окон;
  • файловый менеджер;
  • панель с треем и меню запуска приложений;
  • эмулятор терминала;
  • хранитель экрана, он же блокировщик экрана;
  • менеджер питания;
  • браузер, которым никто не пользуется;
  • почтовый клиент (у зажиточных окружений);
  • и проч., и проч.

Два могучих окружения, GNOME и KDE, сражаются за сердца простых пользователей, а остальные массовые десктопы им завидуют нередко пользуются их наработками. Некоторые хардкорные пользователи предпочитают собирать окружение рабочего стола самостоятельно на базе оконных менеджеров типа Awesome и i3.

Оконный менеджер Window Maker

На скриншоте оконный менеджер Window Maker из состава GNUstep. GNUstep воспроизводит окружение NeXTSTEP. Поставляется в репозиториях большинства дистрибутивов.

Графические тулкиты

Графический тулкит — библиотека или фреймворк, упрощающая рисование формочек и кнопочек, причём в едином стиле. То, чем занимается Windows Forms на ОС другого производителя, а так же занимался некогда полулярный Motif на старых юниксах (Open Motif доступен поныне).

Флагманами в этой категории долгое время были и остаются GTK и Qt. GTK родился как тулкит для свободного графического редактора GIMP и позже переполз под крыло GNOME. Написан на чистом C с классами, имеет официальные байндинги к Python и C++, а ещё породил целый язык общего назначения Vala. Qt — изначально коммерческий проприетарный тулкит, сейчас является свободным ПО (но по-прежнему коммерческим). Написан на C++ с размахом, заменяя стандартную библиотеку и кучу других библиотек и предлагая метаобъектный компилятор (кодогенератор). Имеет байндинги к куче языков. KDE гордо зиждется на этом великолепии.

Графическое API

Mesa — это каркас для видеовывода. Меза предоставляет API OpenGL и, с не столь давних пор, Vulkan (и несколько других API типа VDPAU и VAAPI). Можно сказать, что Mesa берёт на себя вопросы графики, которыми обычно занимается DirectX в ОС другого производителя.

Безопасность

Обширная часть системы, и я недостаточно компетентен, чтобы в неё углубляться, тем не менее, обзорно рассмотрим.

PAM — Pluggable Authentication Modules — модульная система авторизации. Отвечает, как понятно из названия, за авторизацию пользователей в системе, причём разными способами. Через PAM авторизуются в том числе доменные пользователи, в таком случае PAM действует в связке с имплементацией Kerberos (обычно MIT’овский krb5), поскольку сам по себе PAM не работает с удалёнными клиентами. Модули представляют собой разделяемые библиотеки (исполняемые файлы с суффиксом so ) и позволяют делать интересные штуки при входе пользователя. Например, можно создавать домашнюю директорию при первом входе ( pam_mkhomedir.so ) или монтировать файловые системы ( pam_mount.so ).

Классическая утилита su и более молодая sudo предназначены для исполнения комманд от имени другого пользователя (по умолчанию root ). Наиболее значимая разница — su требует пароль пользователя, из-под которого вы хотите работать, а sudo — ваш пароль. sudo гибко настраивается, позволяя запускать только определённые команды определённым пользователям из-под других определённых пользователей, как-то так.

Менеджер авторизации Polkit позволяет непривилегированным процессам взаимодействовать с привилегированными. По сути он похож на sudo, но обладает превосходящей гибкостью и предназначен в первую очередь для приложений, в то время как sudo — утилита для пользователя. Правила пишутся, внезапно, на JavaScript’е.

Linux Security Modules (LSM) — фреймворк внутри ядра Linux, позволяющий накладывать на систему дополнительные моде́ли безопасности. Это достигается при помощи мо́дулей безопасности, не путать с модулями ядра. Наиболее популярные модули безопасности — SELinux и AppArmor. Первый явлен миру АНБ и развивается Red Hat, второй рождён в рамках ОС Immunix и сегодня развивается Canonical Ltd. Соответственно, SELinux поставляется в RHEL и производных, а AppArmor — в Ubuntu. Оба модуля имеют сходное назначение и привносят в систему мандатное управление доступом. Оба модуля повышают безопасность системы, не позволяя приложениям делать то, что от них не ожидается. Так, сконфигурированные модули безопасности не дадут веб-серверу шариться по диску вне нескольких ожидаемых директорий. Обратной стороной является необходимость конфигурировать систему безопасности для каждого мало-мальски нестандартно настроенного приложения. Не у многих на это хватает энтузиазма, так что обычно модуль безопасности просто переключается в разрешающий режим.

Антивирусные программы для GNU/Linux существуют, но мне не встречались дистрибутивы, где бы они шли из коробки, кроме специализированных решений для сканирования системы.

Подсистема печати

CUPS — «общая система печати UNIX», рождённая компанией Apple. Система модульная, поддерживает огромное количество устройств и, насколько мне известно, на сегодня не имеет альтернатив. А ещё CUPS имеет веб-интерфейс (по умолчанию на localhost:631).

Морда CUPS

CUPS работает только с печатающими устройствами, сканеры поддерживаются фреймворком SANE. К сожалению, спектр поддерживаемых устройств у SANE не очень широк. Некоторые вендорские драйверы для МФУ обеспечивают одновременно работоспособность сканера и работоспособность принтера через CUPS. Так, например, делает HPLIP от HP Inc. Благдаря HPLIP GNU/Linux может похвастаться отличной поддержкой печатающих устройств от HP. В то же время, HPLIP прикручен к CUPS немного сбоку, и часто проблематично настроить устройства HP только утилитами CUPS, как многие другие принтеры. Приходится использовать hp-setup .

Звуковая подсистема

Продолжительное время основной звуковой подсистемой ядра является ALSA. Некоторые пользователи ошибочно считают, что PulseAudio заменил ALSA. Это не так, PulseAudio — это звуковой сервер, являющийся лишь слоем абстракции, упрощающим управление аудиопотоками. Другим аудиосервером является JACK, который предназначен для профессиональной работы с аудио. Он не столь удобен для пользователя, но обеспечивает низкие задержки и предоставляет гибкую маршрутизацию MIDI-потоков.

Red Hat готовит нам PipeWire на замену PulseAudio и JACK. Следим за событиями.

Межпроцессное взаимодействие

Здесь речь не про низкоуровневые POSIX-штуки типа разделяемой памяти и сокеты. За свой век GNU/Linux повидал несколько подсистем, призванных упростить межпроцессное взаимодействие (IPC) десктоп-приложений. Сейчас правит бал шина сообщений D-Bus, а об остальных позабыли. Для чего это нужно? Например, некая служба посылает в шину сообщение об изменении своего состояния, а апплет панели слушает его и изменяет свой индикатор. Так обычно работают апплеты громкости и клавиатурной раскладки.

Сеть

Традиционно в различных дистрибутивах GNU/Linux сеть настраивалась скриптами (причём различными). NetworkManager — детище Red Hat, созданное, чтобы править всеми интерфейсами. В годы юности NM вызывал приступы фрустрации у пользователей, но потом всё стало неплохо. NetworkManager позволяет управлять проводными и беспроводными интерфейсами, всевозможными тунелями, виртуальными мостами, VLAN’ами и аггрегированными каналами, причём как при помощи графических фронтендов, так и псевдографического nmtui и текстового nmcli . Вещь удобная и универсальная, в дистрибутивах Red Hat, ожидаемо идёт по умолчанию, в Debian и производных идёт только с рабочим столом, а в «безголовом исполнении» NM опционален. Есть альтернативы попроще, например — Wicd.

Работоспособность WiFi-устройств, как правило, обеспечивает демон WPA supplicant, у которого есть конкурент iwd, написанный ни много ни мало, компанией Intel.

Тут же хочется упомянуть демон Bluez, обеспечивающий работу с Bluetooth-устройствами.

Межсетевой экран

Слава iptables гремит далеко за узким кругом бородатых админов. Это не фильтр сам по себе, а лишь набор утилит в пространстве пользователя, работающий с подсистемой Linux Netfilter. Недавно (в историческом масштабе) добавилась подсистема ядра nftables и соответствующая пользовательская утилита nft. Это было сделано, в первую очередь, для унификации интерфейсов таблиц маршрутизации IPv4, IPv6, ARP и софтовых L2-коммутаторов. В современных дистрибутивах команды iptables являются лишь обёрткой для nftables и не рекомендуются к использованию. В целом, конфиг nft выглядит опрятнее дампа iptables.

Существует пачка высокоуровневых фаерволлов-обёрток над nftables (в том числе графических), так в RHEL и производых из коробки идёт firewalld, а в Ubuntu — UFW.

Пакетный менеджер

Пакетный менеджер — это сердце дистрибутива. Наиболее именитые и с длинной историей — это RPM из мира Red Hat и dpkg из семества Debian. Пример более современного — pacman из Arch Linux. Старожилы RPM и dpkg работают только с локальными пакетами: они их распаковывают, устанавливают и проверяют, что все зависимости удовлетворены. Работой с репозиториями занимаются другие утилиты, являющиеся как бы фронтендом к самому пакетному менеджеру. В RHEL ранее поставлялась утилита yum, на замену которой пришла dnf, в Debian раньше были apt-get и apt-cache, затем их увязали в одну команду apt. Более молодой pacman не имеет видимого пользователю разделения на несколько утилит и предлагает очень простой формат пакетов, которые можно собирать буквально на коленке. Есть и множество других, со своими особенностями. Например nix, который позволяет иметь в системе несколько версий одного пакета.

Новое в исторических масштабах явление — кросс-дистрибутивные системы поставки приложений. Появились в попытке преодолеть ад зависимостей, облегчить труд разработчиков и мейнтейнеров (избавив их от необходимости создавать десятки пакетов под разные версии и ветки GNU/Linux). Наиболее популярные проекты: Flatpack от Gnome, Snap от Canonical и AppImage сам по себе. Они несколько отличаются подходами, но в общем случае обеспечивают установку приложений со всем рантаймом и некоторой степенью изоляции от системы. Штуки удобные, однако подход несколько напоминает традиции тащить все зависимости с устанавливаемой программой в популярной ОС другого производителя. Простоты и порядка в систему не добавляют.

Для перечисленного добра есть красивые обёртки в виде магазинов приложений, два самых ходовых — GNOME Software и KDE Discover.

KDE DiscoverGNOME Software с фирменной кнопочкой в заголовке окна

Заключение

Краткая результирующая диаграмма:

Современный GNU/Linux в представлении художника

Если присмотреться к перечисленным составляющим GNU/Linux, можно заметить, что львиная доля технологий привносится несколькими крупными организациями. К ним относятся:

  • проект GNU под эгидой Free Software Foundation;
  • Red Hat, производитель коммерческого дистрибутива, недавно вошедший в состав IBM;
  • сообщество kernel.org при поддержке Linux Foundation.

В интернете ради флейма часто вкидывают, мол, поглядите — эти ваши линуксы делают клятые корпорации, где ваше хвалёное сообщество? Я думаю, не стоит противопоставлять отдельных энтузиастов и организации: все они вращают колесо open source. В конце концов, в больших организациях трудятся обычные люди. В итоге мы имеем очень динамичную систему, в которой не без причины компоненты сменяются один за другим, всё это куда-то движется, и, в общем-то, год от года хорошеет. Я надеюсь, в этом очерке удалось дать представление об анатомии GNU/Linux, а может быть и заинтересовать кого-нибудь закопаться поглубже.

Большое спасибо @ajijiadduh, который отловил огромное количество опечаток сразу после публикации, и всем прочим пользователям, указавшим на ошибки.

Правки и предложения вы можете присылать по адресу https://gitlab.com/bergentroll/gnu-linux-anatomy.

Copyright © 2020 Антон «bergentroll» Карманов.

Gnu linux что это

GNU/Linux — это операционная система: набор программ, которые позволяют вам работать с вашим компьютером и запускать другие программы.

Операционная система (ОС) состоит из нескольких основных программ, которые нужны вашему компьютеру, чтобы он мог общаться и получать инструкции от пользователей; читать и записывать данные на жёсткие диски, ленты и принтеры; контролировать использование памяти; запускать другие программы. Самая важная часть ОС — ядро. В системе GNU/Linux ядром является Linux. Оставшаяся часть системы состоит из других программ, многие из которых написаны проектом GNU или для проекта GNU. Поскольку одно ядро Linux — это ещё не вся работающая ОС, мы предпочитаем использовать термин « GNU/Linux » для обозначения систем, которые многие люди ошибочно называют « Linux » .

GNU/Linux сделана по образцу операционной системы Unix. С самого начала GNU/Linux разрабатывалась как многозадачная, многопользовательская система. Этих факторов достаточно, чтобы сделать GNU/Linux отличной от других широко известных операционных систем. Однако, GNU/Linux отличается намного сильнее, чем вы можете себе представить. В отличие от других операционных систем, GNU/Linux никому не принадлежит. Значительная часть системы разработана добровольцами бесплатно.

Разработка того, что позже станет GNU/Linux, началась в 1984 году, когда Фонд Свободного Программного обеспечения начал разработку свободной Unix-подобной операционной системы, названной GNU.

Проект GNU разработал всеобъемлющий набор свободного программного обеспечения для использования в Unix™ и Unix-подобных операционных системах, таких как GNU/Linux. Эти программы позволяют пользователям выполнять задачи широкого спектра, от простых (копирование или удаление файлов из системы) до сложных (написание и компилирование программ или выполнение сложного редактирования в различных форматах документов).

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

Ядро Linux впервые появилось в 1991 году, когда финский студент-компьютерщик по имени Линус Торвальдс (Linus Torvalds) анонсировал первую версию замены ядра Minix в группе новостей comp.os.minix . Подробнее смотрите на сайте Linux Internationals страничку истории Linux.

Линус Торвальдс продолжает координировать работу нескольких сотен разработчиков с помощью нескольких сопровождающих подсистем. Есть официальный сайт для ядра Linux. Информацию о списке рассылки linux-kernel можно найти в FAQ списка рассылки linux-kernel.

GNU/Linux users have immense freedom of choice in their software. For example, they can choose from a dozen different command line shells and several graphical desktops. This selection is often bewildering to users of other operating systems, who are not used to thinking of the command line or desktop as something that they can change.

GNU/Linux также менее подвержен сбоям, лучше приспособлен для одновременного выполнения более чем одной программы и более защищён, чем многие другие системы. Благодаря этим преимуществам, Linux быстро завоёвывает рынок серверных операционных систем. С недавних пор, Linux начал становиться популярным среди домашних пользователей и в корпоративной среде.

Пред. Наверх След.
1.1. Что такое Debian? Начало 1.3. Что такое Debian GNU/Linux?

Операционные системы на базе GNU/Linux

Аббревиатура GNU расшифровывается как «GNU — это не Unix» (GNU is Not Unix). Работа над GNU стала основой для разработки лицензии GNU General Public License, которая повернула весь компьютерный мир. В 1991-м году, Линус Торвальдс решил написать совместимое с Unix ядро операционной системы на базе Minix для своего ПК. Так вскоре появился первый Linux, который не включал элементов кода minix и имел мультизадачную файловую систему.

Операционные системы на основе GNU и Linux называют «Linux» или «GNU/Linux», произносится «гну слэш линукс». Первый вариант гораздо более популярен, и чаще используется сторонниками термина «open source», второй — сторонниками «free software».

Хотя в английском второй вариант пишется и звучит, как «GNU/Linux» («гну слэш линукс»), это не всегда удобно в других языках. Поэтому, если можно показать равноправность GNU и Linux лучшим способом — например, GNU+Linux (гну плюс линукс), GNU-Linux (во французском), или GNU con Linux (в испанском), лучше использовать его, чем «GNU Linux» («гну линукс»), подразумевающее, что ядро «Linux» было разработано или принадлежит проекту GNU. Аналогичным образом построены названия «TCP/IP» и «Ogg/Vorbis».

История Линукс начинается с конца 70х годов. Началом победной походки Linux можно считать появление операционной системы Unix, созданной в 1969 году в США фирмой Bell Laboratories, дочки компании AT&T. Unix стала прародителем огромного семейства операционных систем.

  • GNU
  • UnixWare (Univel/SCO)
  • BSD (Berkeley Software Distribution)
  • SunOS ? Solaris (SUN)
  • NextStep
  • Mac OS X
  • FreeBSD
  • NetBSD
  • OpenBSD
  • BSD (Berkeley Software Distribution)
  • SunOS ? Solaris (SUN)
  • NextStep
  • Linux
  • Minix
  • Unix Time-Sharing System (Bell Labs)
  • HP-UX
  • AIX (IBM)
  • Xenix OS
  • IRIX (SGI)

История GNU началась в сентябре 1983 года. Основатель данного проекта, Ричард Столлман (Richard M. Stallman) зарабатывал на жизнь в лабораториях искусственного интеллекта Массачусетского технологического университета в Кембридже (Massachusetts Institute of Technology, MIT, Cambridge, Massachusetts). Столлман был и остаётся одним из УБЕР-программистов нашего времени.

Там, где работал и учился Столлман, было принято свободно обмениваться своими наработками (программы, исходники). Лицензии же Unix всегда были платными и, не соврать, стоили более 40 000 (сорок тыщ долларов, это вам не Windows за 200 баксов) долларов. Купить такую могли только крупные фирмы или дети местных олигархов, промышлявших кокаином (шутка). А без покупки лицензии «наступала уголовная ответственность» (опять шутка) — программист не имел права использовать исходные коды системы в своих разработках, что очень тормозило прогресс (представьте себе, сидят 2 разные конторы и пишут одну и ту же программу), что равносильно изобретению велосипеда.

GNU — это замысловатая рекурсивная аббревиатура(так захотелось Столлману, помните времена FidoNet? — где у каждого самого простого поинта в подписи висел так называемый ориджин), и таким образом он решил показать своё остроумие.

Аббревиатура GNU расшифровывается как «GNU — это не Unix» (GNU is Not Unix). Unix всегда лишал пользователя полного контроля над своим компьютером, одному богу было известно, что на нем происходит (Вам ничего это не напоминает? Подсказка — «синий экран смерти».) Чуть позже Столлман написал свой знаменитый Манифест GNU, который стал основой для лицензии GPL (GNU General Public License). Эта лицензия повернула весь компьютерный мир.

Основные положения GPL:

  • Правом запускать программу для любых целей;
  • Правом изучать устройство программы и приспосабливать её к своим потребностям, что предполагает доступ к исходному коду программы;
  • Правом распространять программу, имея возможность помочь другим;
  • Правом улучшать программу и публиковать улучшения, в пользу всего сообщества, что тоже предполагает доступ к исходному коду программы.

Код программы распространяемый по лицензии GPL можно использовать каким угодно способом, а именно: копировать, дорабатывать, модифицировать, передавать или продавать модифицированные (или даже не модифицированные) версии другим лицам при условии, что результат такой переработки тоже будет распространяться под лицензией GPL.

Последнее условие — самое важное и определяющее в этой лицензии. Оно гарантирует, что результаты усилий разработчиков свободного ПО останутся открытыми и не станут частью какого-либо лицензированного обычным способом продукта. Оно также отличает свободное ПО от ПО, распространяемого бесплатно. Одно из требований этой лицензии состоит в том, что продавая ПО под лицензией GPL, вы должны предоставить исходные коды этого ПО каждому, кто захочет получить к ним доступ. Лицензия GPL «делает ПО свободным и гарантирует, что оно останется свободным».

К 90му годы были созданы основные инструменты, необходимые для функционирования ОС, такие как: текстовый редактор EMacs, компилятор GCC и отладчик кода gdb. Как мы уже упомянали в статье — Столлман был отличным программистом, и смог создать компилятор, превосходивший по качествам своих коммерческих собратьев, создаваемые целыми группами программистов. Сегодня существуют версии практически для всех операционных систем и языков написания программ(языков программирования), что является залогом переносимости программ. В данный момент аббревиатура GCC расшифровывается как GNU Compiler Collection (вместо изначального GNU C++ Compiler). Не хватало самого главного — ядрышка, над которым уже трудилсь команда разработчиков во главе с Линусом Торвальдсом.

В конце 90х годов компы процессорами от Интел и Микрософтовской Виндой на борту заполонили заполонили практически весь рынок домашних компьютеров, а так же значительную часть рынка серверов — где изначально использовались UNIX-системы. Компы на базе Intel и Intel-compatible процессоров достигли огромных на тот момент вычислительных мощностей, сравнимой с мощностью рабочих станций с Unix. Но большинство коммерческих Unix-систем не имели версий, способных работать на оборудовании Intel. Производители Unix обычно тесно сотрудничали с производителями конкретных процессоров или даже имели долю собственности в компаниях, производивших эти процессоры, а поэтому были заинтересованы в использовании своих собственных разработок.

Т.к. аппаратные мощности компьютеров возрастали, то появление Unix для компов с процессорами Intel было только делом времени. Один из таких вариантов Unix, который сыграл особую роль в истории, был разработан в январе 1987-го года Эндрю Таненбаумом (Andrew S. Tanenbaum), профессором Университета Врие, Амстердам, Нидерланды. Таненбаум был одним из ведущих специалистов в области разработки операционных систем. Свою операционную систему Minix (Миникс) он разработал как учебное пособие, на примере которого показывал студентам внутреннее устройство реальной операционной системы.

Конечно, Minix не был верхом совершенства. Он был ориентирован на процессор Intel 80286(Двушка), который в то время господствовал на рынке. Но у Миникса был один очень важный момент — Open Source. Каждый, кто имел книгу Таненбаума «Операционные системы», мог изучить и проанализировать 12 000 строк кода, написанного на языке Си и на ассемблере (Помните фильм Хакеры? — Огромная Красная книга, которая никогда не помещалась на полке.). Первый случай, когда исходники были доступны, а не заперты в сейфах разработчика. Великолепный автор, Таненбаум сумел вовлечь самые выдающиеся умы компьютерной науки в обсуждение искусства создания операционных систем. Minix можно было приобрести и отдельно от книги, она могла быть реально установлена на персональный компьютер. Студенты компьютерных факультетов по всему миру корпели над книгой Таненбаума, вчитываясь в коды с целью понять, как работает та самая система, которая управляет их компьютером. И одним из таких студентов был Линус Торвальдс.

В 1991-м году, Линус Торвальдс, финский студент, чрезвычайно увлёкся идеей написать совместимое с Unix ядро операционной системы для своего персонального компьютера с процессором Intel. Прототипом для будущего ядра стала операционная система Minix: совместимая с Unix операционная система для персональных компьютеров, которая загружалась с дискет и умещалась в очень ограниченной в те времена памяти персонального компьютера.

Название «Linux» новая система получила следующим образом. Самого Торвальдса несколько смущало созвучие этого названия с его именем, поэтому он пытался назвать свою разработку Freax. Это название можно обнаружить в файле kernl/Makefile версии 0.11, и в исходных кодах других программ. Но Ари Лемке, который предоставил место для выкладывания системы на FTP сайте, назвал каталог pub/OS/Linux. И это название закрепилось за новой ОС.

Тот факт, что Линус выложил код своей ОС в интернет, был решающим в дальнейшей судьбе Linux. Хотя в 1991-м году интернет ещё не был так широко распространён, как в наши дни, зато пользовались им в основном люди, имеющие достаточную техническую подготовку. И уже с самого начала Торвальдс получил несколько заинтересованных откликов.

Примерно в феврале 1992-го года Линус высказал просьбу ко всем, кто уже пользовался или тестировал Linux, прислать ему открытку. Таких открыток было получено несколько сотен со всех концов света — из Новой Зеландии, Японии, Нидерландов, США. Это говорило о том, что Linux начала приобретать некоторую известность.

Вначале к разработке присоединились сотни, потом тысячи, потом сотни тысяч добровольных помощников. Система уже не была просто игрушкой для хакеров. Дополненная массой программ, разработанных в рамках проекта GNU, ОС Linux стала пригодна для практического использования. А то, что ядро системы распространялось под лицензией GNU General Public License, гарантировало, что исходные коды системы останутся свободными, то есть смогут копироваться, изучаться и модифицироваться без опасения нарваться на какое-либо преследование со стороны разработчика или какой-то коммерческой фирмы. Этот факт привлекал в ряды пользователей и сторонников Linux всё новых последователей, в первую очередь из числа студентов и программистов.

К этому времени сформировалась отдельная конференция в интернете, посвящённая Linux, — comp.os.linux. Энтузиасты образовали множество групп пользователей и в начале 1994-го года вышел первый номер журнала «Linux Journal». Linux привлекла внимание промышленных фирм и несколько небольших компаний начали разрабатывать и продавать собственные версии Linux.

Первоначально Линус Торвальдс не хотел продавать свою разработку. И не хотел, чтобы её продавал кто-то другой. Это было чётко прописано в уведомлении об авторских правах, помещённом в файл COPYING самой первой версии — 0.01. Причём требование Линуса налагало значительно более жёсткие ограничения на распространение Linux, чем те, которые провозглашались в лицензии GNU: не разрешалось взимать никаких денег за передачу или использование Linux. Но уже в феврале 1992-го года к нему стали обращаться за разрешением брать плату за распространение дискет с Linux, чтобы покрыть временные затраты и стоимость дискет. Кроме того, необходимо было считаться и с тем, что при создании Linux использовалось множество свободно распространяемых по интернету инструментов, самым важным из которых был компилятор GCC. Авторские права на него оговорены в общественной лицензии GPL, которую изобрёл Ричард Столлман. Торвальдсу пришлось пересмотреть свое заявление об авторских правах, и, начиная с версии 0.12, он тоже перешёл на использование лицензии GPL.

С технической точки зрения, Linux представляет собой только ядро Unix-подобной операционной системы, отвечающее за взаимодействие с аппаратной частью компьютера и выполнение таких задач, как распределение памяти, выделение процессорного времени различным программам и так далее. Кроме ядра, операционная система включает в себя множество различных утилит, которые служат для организации взаимодействия пользователя с системой. Успех Linux как операционной системы во многом обусловлен тем, что к 1991-му году в рамках проекта GNU уже было разработано множество утилит, свободно распространяемых в интернете. Проекту GNU не хватало ядра, а ядро, скорее всего, осталось бы невостребованным, если бы отсутствовали необходимые для работы утилиты. Линус Торвальдс оказался со своей разработкой в нужном месте в нужное время. И Ричард Столлман прав, когда настаивает на том, что операционную систему следует называть не Linux, а GNU/Linux. Но название Linux исторически закрепилось за этой ОС, поэтому мы тоже будем называть её просто Linux (не забывая о заслугах Столлмана и его сподвижников).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *