Анатомия 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

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

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

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

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

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

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

  • GDM из набора GNOME;

  • SDDM из комплекта KDE;

  • LightDM — универсальный вариант;

  • FlyDM — из поставки Astra Linux.

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

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

  • диспетчер окон;

  • файловый менеджер;

  • панель с треем и меню запуска приложений;

  • эмулятор терминала;

  • хранитель экрана, он же блокировщик экрана;

  • менеджер питания;

  • браузер, которым никто не пользуется;

  • почтовый клиент (у зажиточных окружений);

  • и проч., и проч.

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

Оконный менеджер Window Maker
Оконный менеджер 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

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 Discover
KDE Discover
GNOME Software с фирменной кнопочкой в заголовке окна
GNOME Software с фирменной кнопочкой в заголовке окна

Заключение

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

Современный GNU/Linux в представлении художника
Современный 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» Карманов.

Это произведение доступно по лицензии «Attribution-ShareAlike» («Атрибуция-СохранениеУсловий») 4.0 Всемирная (CC BY-SA 4.0).

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 137

    +7
    Классная статья.
    Ещё бы что-то такое же про директории. Не всегда понятно почему часть конфигов лежит в /etc/, а часть в /usr/share/local (пример). И за что отвечают другие.
      +4
      Основное, но не единственное отличие:
      /etc относится к данной конкретной машине.
      /usr может быть смонтирован по сети только для чтения, и быть общим для нескольких машин.
      Вообще все гуглится, информации по unix-подобным системам очень много.
      /usr/share/local

      Нет сейчас под рукой линукса, не могу проверить, но вроде нет такого пути. Есть /usr/share, /usr/local

      Вообще вот стандартная структура каталогов:
      en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
        0
        Спасибо! Действительно спутал с /usr/local/share
          0
          Все, что в /usr/local — это вы сами накомпилировали и установили. Если ничего нестандартного не нужно, то там просто несколько пустых каталогов. А все настройки только в /etc и домашнем каталоге. Если вам надо править что-то вне этих каталогов, то вы делаете что-то не то, скорее всего.
            0
            В BSD, если не ошибаюсь, /usr/local/etc/ предназначена для конфигов всего, что пользователь поставил сам (в т. ч. пакетным менеджером).
              0
              В данной статье речь о Линуксе. Поэтому я и отвечал в его контексте.
                0

                В вопросах файловой иерархии (и во многих других) разница крайне мала. Ничто не мешает пользователю использовать /usr/local/ именно так на GNU/Linux, кроме того, не удивлюсь, если в каком-либо дистрибутиве так и сделано.

          +2

          По изначальной задумке, есть 3 уровня иерархии, повторяющие друг друга.
          Они располагаются в директориях: /, /usr, /usr/local
          Пути для конфигурационных файлов должны быть, соответственно: /etc, /usr/etc, /usr/local/etc


          Но в современных линуксах это правило не соблюдается, и программы, установленные в /usr, лезут не в /usr/etc, а сразу в /etc.

          0
          Спасибо.
          Ещё бы что-то такое же про директории.

          Бесспорно, но это уже совсем другая история, как говорит Л. Каневский.
            +4

            Про директории советую почитать man hier (hierarchy). Кратко и информативно

            +5
            Все очень здорово расписано, хоть маленькое уточнение сделать про Графический Тулкит — на схеме может сложиться ощущение что мол пользователь при выборе дистрибутива должен думать какой использовать, и выбрать только один. По факту, это просто библиотека, или набор библиотек, поэтому ничто не мешает иметь в системе и Qt, и GTK, и WxWidgets, и что там еще потребуется приложению которое вы захотите поставить.
            Если не ограничивать себя постоянно в выборе софта, то рано или поздно в вашей установке будут как минимум Qt+GTK.
              +12
              Спасибо большое за статью.
              Я работаю с этим каждый день, так что вроде бы ничего нового не открыл…

              Но, во-первых, просто приятно почитать.
              Во-вторых, как ни странно, даже для меня оказалось полезным увидеть всю картину целиком.
              Ну и в-третьих, про Alsa и PulseAudio, вот, я тоже не до конца понимал (на серверах особо не нужно, а на десктопе как-то обычно работает Out-of-Box).

              В общем, спасибо… ну и если, будет желание написать прододжение — то прочту с удовольствием. Рассказать-то есть о чем.
                –1
                Out-of-Box

                Пока не надо подключить новые интересные блютус уши. Вот тогда приходит много нового непрошенного знания сразу.
                  +2

                  А уж сколько его приходит, когда пытаешься сделать это под виндой…
                  USB-BT-dongle 1.1 от D-Link, версии винды от XP до 10. Комплектный bt-stack протерян лет 15 назад.
                  XP — установлен стек с сайта D-Link методом распаковки и ручного подпихивания
                  7 — старый стек утерян, завелись с грехом пополам на мешанине из распакованных стеков intel и toshiba
                  8 — старый стек по прежнему утерян, сайт делает вид, что не знает о такой фиговине, финт с чужими стеками больше не помогает
                  10 — ??? не видит устройство


                  Xubuntu: apt install pulseaudio-module-bluetooth (если не был установлен уже) нагугливается за минуту, никаких странных бинарей качать не надо — оно просто работает.

                    0
                    Я вам вполне верю, так что не «в пику» это говорю, а просто для поддержания беседы. Но моей Fedore 33 блютус наушники завелись сразу, даже толком не могу сказать, что имеено для этого надо делать.
                    Блютус библиотеки уже стояли, наушники нашлись и сразу и начали работать.

                    Но вполне верю, что найдутся ситуации, когда придется курить маны и не только их, чтобы заставить их работать.
                  –14

                  Тем не менее Линукс продолжает представлять из себя шито-перелатаного монстра. Чего стоит только установка программ. Хочешь поставить маленький индикатор сетевого соединения а оборачивается это все стягиванием из сети 4 гигабайт библиотек вроде qt4 и прочего. Или просто нерешаемая проблема с held пакетами, которая решается только полным сносом системы ( по крайней мере на Лоре говорят именно так). Мне до сих пор непонятно на что рассчитывают линуксоиды призывающие рядовых пользователей пересаживаться на Линукс, с его гребанным зоопарком малосовместимых между собой дистрибутивов. Единственный дистрибутив который мне понравился — Majaro linux, но та же проблема с установкой доп программ.

                    +8
                    GNU/Linux можно сломать, как и всё в этом мире. Если вы хотите иметь в GNOME значок NetworkManager из KDE, вполне ожидаемо, что вам прилетят библиотеки KDE и Qt (и наоборот). Любую проблему с пакетами можно решить, вопрос обычно в том, что привело систему в такое состояние, и насколько вы готовы углубиться. Иногда действительно дешевле сохранить хомяк и переустановить систему.
                      0

                      FreeBSD ездит с ноута на ноут zfs send -R | zfs recv -F. [по желанию] Ядро адаптировал — и вперёд. А тут — "дешевле переустановить систему". Это уж точно [вендовый] мрачище.

                        0

                        Можно переезжать чем-то вроде такого (в точности не вспоминается, но смысл в том, чтобы добавить диск как зеркало к текущему, а потом удалить текущий из зеркала) в полном онлайне:


                        zpool attach <pool> <existing vdev drive> <new drive>
                        … wait for resilver …
                        zpool detach <old drive>
                          +1

                          нельзя detach. это хуже чем destroy. лучше zpool split. вот где рулез :)

                            0

                            Oh, boy! It's really cool, I'm sorry, I've missed it.

                          +3
                          Linux ездит с помощью rsync ничуть не хуже, и даже ядро адаптировать не нужно, в худшем случае собрать новый initrd потребуется. А от помойки из пакетов и самосбора FreeBSD еще меньше застрахована в силу того, что пользовательская база меньше и пространства для рукоприкладства больше :)
                            –1

                            rsync? setenforce 0? ага.
                            написано русским по белому: ядро по желанию. костыля initrd нет как класс — загрузка с zfs без танцев с бубном родным лоадером. одновременно можно иметь возможность грузиться в uefi и legacy. рукоприкладство — это [у вас] в /opt и /usr/local :) у нас всё для людей: pkg check -sa && pkg check -d.

                              +3
                              initrd — это костыль, а ядро «адаптировать» (теперь уже по желанию) — норм, да? гвозди бы делать из этих людей :)
                                0
                                Вот для таких, как вы, лучше и не упоминать, что ядра бывают с кастомным конфигом.
                                  +1
                                  А бывают еще и без кастомного? Правда?
                                    –1
                                    Бывают с дефолтным, очевидно. И очевидно, что я отвечал на то, что вы считаете, видимо, сарказмом. initrd не всегда костыль, но в данном случае да.
                                  +1

                                  N.B. как удобно мы фокусируемся на том, что выгодно и опускаем то, на что неудобно отвечать :)


                                  • rsync и selinux всегда польностью забэкапят, ась?
                                  • а "рукоприкладство" (Ваше, кстати, словечко-то), свойственное для линуха и разводимое в /opt и /usr/local? В том числе потому, что вместо make package самому сделать пакадж не постигнув дзен rpm/deb с наскоку фиг получится?
                                  • ещё раз: ядро пересобирать не надо. это не как в линух продираться сквозь миллион опций через надцать экранов. для желающих процедура описана в хэндбук. мне её повторить — не тяжелее юнита для системд с нуля написать.
                                    0
                                    Каюсь, сфокусировался на самом очевидном. А вы с самого начала после предложения клонировать бардак с помощью zfs ожидали конструктивного обсуждения? Ну так более терпеливые участники дискуссии ниже уже объяснили, в чем вы неправы, нет?

                                    Я вроде бы понял ваш тезис: вы, кажется, хотите сказать, что пакеты/порты FreeBSD на голову выше всех линуксовых реализаций того же самого и не позволят устроить бардак в принципе (или, как минимум, не будут провоцировать его устраивать), верно? Т.е. это не вопрос дисциплины? Ну не знаю… опыта с FreeBSD у меня нет и чисто теоретически я готов такое допустить, но вряд ли это так. Или у вас есть жизненные примеры?

                                    Насчет совместимости rsync и selinux ничего не скажу, я последний просто не использую (и поэтому setenforce 0 не делаю). А zfs позволит все корректно перенести потому что работает уровнем ниже? Т.е. dd+resize2fs тоже справятся?

                                    Насчет пересборки и адаптации ядра: ну да, в линуксе тоже можно втянуть в ядро больше модулей, чем обычно принято делать — и initrd станет не нужным (если в нем нет никакой загрузочной логики вроде корня по nfs/nbd, но допустим, что нет) — однако зачем? И расскажите уж тогда, что такое адаптация? Это что-то отличное от пересборки? Повторюсь, что про FreeBSD я мало что знаю и практического интереса у меня к ней нет, но теоретически любопытно, что там действительно сделано лучше.
                                      +1

                                      В FreeBSD загрузчик (не grub) умеет грузить модули для ядра из обычной файловой системы (ufs или zfs) без промежуточных виртуальных дисков. Впрочем что grub+linux мешает делать также я не знаю — файловую систему grub вроде тоже умеет парсить, но пользуется этим крайне ограниченно.
                                      С "адаптацией" технически всё то же самое что в линуксе: модули либо вкомпилены в ядро, либо могут быть подгружены отдельно. Разница в том, что сборка модулей по дефолту включена для вообще всего (и я даже не интересовался можно ли отключить — всё равно оно компилируется быстро), а настройка при пересборке — только списка статически слинкованного в ядро, так что нужные модули после переезда всегда можно догрузить (и без пересборки всяких initrd которых нет). Но если хотите иметь идеальное ядро под конкретное железо (т.е. всё что нужно — статически слинковано, всё что не нужно — убрано в модули и не грузится) то придётся пересобрать, да. Но настройка этого всего всё равно проще чем в линуксе.
                                      Впрочем многие (может и большинство) (как и в Linux-ах) пользуются дефолтным ядром и ничего не пересобирают — запускается оно наверно везде, а всякий тюнинг подгружают модулями.


                                      Вообще — непонятно о чём дискуссия, ветка началась с исправления испорченной системы, а не с переезда. Переезд по-моему и там и там одинаково просто делается, если необязательные пересборки не учитывать.
                                      А вот исправлять систему проще в FreeBSD (если сравнивать с популярными deb/rpm-based системами), потому что её НЕ надо переустанавливать, чтобы вайпнуть состояние пакетного менеджера. Можно просто удалить и создать пустыми /usr/local (если были кастомные конфиги — забекапить /usr/local/etc), /var/db/pkg (а ещё /usr/ports, /var/db/ports, /var/db/portsnap — если пакеты собирались из исходников) — и всё, в системе не осталось никаких следов пакетов, но она осталась в рабочем состоянии (с консолью), все данные (/home и /var) сохранены. Можно заново установить нужные пакеты по списку (заметно более короткому чем обычно в линуксах) и продолжить работу.

                                        0
                                        Ага, спасибо, теперь понятна суть претензий к initrd. Да, в простых случаях (если загрузчик в состоянии прочесть файловую систему с модулями) можно было бы обойтись без него — но тут уже встает вопрос интеграции ядра и загрузчика (и ее осмысленности — раз уж мы все равно не планируем ограничиваться простыми случаями). Скажите, а как в FreeBSD принято грузиться с nfs/nbd/luks?

                                        Что касается исправления системы — ну так нам же никто не обещал, что систему изуродовали исключительно в рамках возможностей пакетного менеджера, иначе линксовые пакетные менеджеры тоже справились бы. Можно ведь и в основной системе отлично поиграться — и разломать FreeBSD таким же точно образом. Да, отчасти явное выделение базовой системы спасает положение (и одновременно его усугубляет если сломали саму базовую систему), но раз уж на то пошло — chroot/jail & snap & flatpack & контейнеры & виртуалки решают проблему еще более радикальным образом.
                                          0
                                          вопрос интеграции ядра и загрузчика (и ее осмысленности — раз уж мы все равно не планируем ограничиваться простыми случаями).

                                          Ну, когда одно с другим разрабатывается общим проектом, почему бы не интегрировать.


                                          Скажите, а как в FreeBSD принято грузиться с nfs/nbd/luks?

                                          Не особо интересовался всякими экзотическими загрузчиками, но думается все отличия заканчиваются на том моменте, где ядро с модулями уже в памяти, а дальше оно уже по штатным конфигам работает. Чтобы ядро загрузить по сети, есть pxeboot (а потом можно смонтировать / из nfs).


                                          Вместо линуксового luks есть geli, пишут что к / оно тоже применимо, подробности лень выяснять, но ядро кажется должно лежать в незашифрованном разделе, загрузчик сам видимо расшифровывать не умеет, ссылки: 1 2

                                          +1
                                          В FreeBSD загрузчик (не grub) умеет грузить модули для ядра из обычной файловой системы (ufs или zfs) без промежуточных виртуальных дисков.

                                          Initrd дает большую гибкость — у вас может быть корнем файловая система вообще не поддерживаемая ядром. Более того, технически поддержка ФС может быть полностью вынесена из ядра.
                                          Загрузчик файловыми системами может не владеть в принципе, как systemd-boot или efistub.


                                          Можно ли заставить фряху грузиться с чужеродной ФС как efi-приложение?

                                +7
                                Там выше товарищ описал не переезд с ноута на ноут, а установку маленького индикатора, обернувшуюся стягиванием из сети гигабайт. Совершенно внезапно для пользователя, разумеется.
                                С таким подходом совершенно неясно, что он еще наворотил в системе: подключал ppa в дебиан, или # chmod -R 777 / .

                                И вопрос исключительно в том, стоит ли тратить время и силы на разгребание получившихся авгиевых конюшен.
                                  +2

                                  Поздравляю, у вас просто понимание устройства фряхи и прямые руки. Но данное утверждение вообще никоим образом не характеризует FreeBSD
                                  как "лучшую" систему. Потому что у меня лично вот линукс без сложностей уже лет восемь с лишним с ноута на ноут кочует и обновляется. А кто-то (офигеть не встать!) и винду так таскать умеет.

                                    +1
                                    Да, ещё с помощью dd отлично ездит (как *BSD, так и GNU/Linux). Только не понятно, к чему вы это, вроде не про миграцию системы ветка.
                                    –1
                                    то есть все таки зоопарк? Откуда мне как пользователю знать про эти ваши заморочки «Это же GNOME!!! а ты ламер из KDE значок ставишь!»
                                    Вот недавно только читал на хабре как все просто и замечательно в мире линукса последнее время для ОБЫЧНОГО пользователя. А тут вот опять — ты должен много знать… и тогда «любую проблему с пакетами можно решить»…
                                      +5
                                      Никакой проблемы: захотел — поставил. Пользователь поставил и нашёл себе проблему — оказывается, ещё какие-то библиотеки бессовестно ставятся. Хотя даже если вы поставите GNOME и KDE вместе, ваша система всё равно будет меньше, чем некоторые другие настольные ОС.

                                      Только что попробовал поставить plasma-nm (тот самый «индикатор сети») на чистый Debian с Xfce. Для скачивания 44,8 МБ, к установке 204 МБ (включая библиотеки KDE 5). Так что, как говорится, делите на два.

                                      Не утверждаю, что GNU/Linux — беспроблемная система. Так никогда не будет. И что простая для рядового пользователя тоже утверждать не возьмусь. Хотя, если пользователю нужен браузер, проигрыватель, офис и, скажем, проприетарный Steam, то, пожалуй, очень простая.
                                        +5

                                        Ну, возьмите этого своего ОБЫЧНОГО пользователя, и дайте ему диск с виндой и пустой комп — узнаете много нового о сексуальной жизни себя и своих предков.


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


                                        Вы же говорите о том, что имея win-бэкграунд некомфортно вдруг оказаться в положении, когда снова надо что-то изучать.
                                        Но, чтобы не называть вещи своими словами, вы притягиваете обычного пользователя, который Ох, как мативировал! И меня мативировал, и тебя, Василь Иваныч, мативировал!

                                        0

                                        Я не противник линуксов, как таковых, сам юзаю дебиан на ноуте, но все же, я бы не хотел знать про эти ваши kde и gnome, и почему вообще мне доступны для установки на мой lxde программы написанные для gnome и прочего.

                                          +3

                                          Если вы ставите части другого окружения (панель, виджеты, оконный менеджер), вы можете их использовать, но подразумевается, что вы понимаете, что вы будете с ними делать (а иначе что вас побудило ставить непонятные пакеты?). Остальное ПО (типа почтовиков, магазинов приложений) вы можете ставить, не беспокоясь о DE. Более того, попытка держать ПО только на GTK 3, или только на Qt 5, или ни за что не ставить ПО на Java, или на Electron — это натуральный невроз, не дающий ничего, кроме нескольких сотен МБ на диске и временного иллюзорного удовлетворения.


                                          Почему вам доступны куски одного DE под другим — потому что вы можете поставить сразу несколько DE — одно для себе, второе для супруги, третье для кота. Зачем усложнять пакетный менеджер, чтобы лишить пользователей этой возможности?

                                            0
                                            Это проблема не столько именно линукса, сколько вообще мироустройства. Оно позволяет действовать без понимания происходящего, но требует этого понимания для предвидения побочных эффектов ваших действий. Мироустройство без проблем позволит вам разогнать автомобиль до двухсот километров в час — но внезапно не позволит на этой скорости вписаться в резкий поворот. Вы легко можете убить человека, и в момент убийства ничто не подскажет вам, что оживить убитого окажется далеко не так легко.
                                            Наконец, вы можете написать на техническом ресурсе, что вы не хотите ни в чем разбираться — и (возможно) удивиться негативной оценке ваших комментариев.
                                            Линукс — это очень частный случай мироустройства, очень.
                                          0

                                          Manjaro — лучше не использовать. Тут подробно написано почему:
                                          https://telegra.ph/Manjaro-09-17

                                            +2

                                            В винде тоже такое — хочешь поставить маленькую программулину типа Paint.NET, сначала поставь .NET Framework.
                                            В новых виндах дотнет предустановлен, и это аналогично тому, как если после установки линукса сразу предустановить либы Qt/GTK/etc.

                                              –2

                                              Когда ты ставишь Винду, как правило ты сразу ставишь direct x и .net framework, опционально java runtime, и все. Все ставиться и все работает.

                                            0
                                            Qt — изначально коммерческий проприетарный тулкит, сейчас является свободным ПО (но по-прежнему коммерческим).

                                            И скоро снова может стать коммерческим. Они же в начале года опосредованно заявили, мол, извините, мы будем закрывать исходники. Сообщество KDE начало негодовать, и Qt Project выпустили пост, который одновременно и опровергает это, и не вносит никакой конкретики. Я думаю, что как только коронавирус пройдет, как Qt Company восстановится, нас может ожидать немало интересных сюрпризов.


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

                                            Хотелось бы прочитать про всё это подробнее, как там всё взаимодействует: DRM, блобы в ядре, opengl, weston, kms, cuda, qt/gnome. Разобраться новичку очень сложно.


                                            Соответственно, SELinux поставляется в RHEL и производных, а AppArmor — в Ubuntu. Оба модуля имеют сходное назначение и привносят в систему мандатное управление доступом. Оба модуля повышают безопасность системы, не позволяя приложениям делать то, что от них не ожидается.

                                            SELinux, по-моему, является образцом того, как не надо делать продукт. Его довольно сложно конфигурировать, он плохо написан, он использует параллельно два или три языка для написания политик безопасности, при этом у этих языков есть конфликтующие ключевые слова (одно написание, но разный смысл). При всём этом политика безопасности по умолчанию практически совсем не защищает данные пользователя обычного десктопа.


                                            Наиболее популярные проекты: Flatpack от Gnome, Snap от Canonical и AppImage сам по себе. Они несколько отличаются подходами, но в общем случае обеспечивают установку приложений со всем рантаймом и некоторой степенью изоляции от системы.

                                            Только вот работать с ними не очень удобно, конфигурировать их не очень удобно (уже есть графические утилиты, как у Android Permsission Manager?), иногда бывает так, что устанавливаешь пакет со всем рантаймом, а он говорит, что зависимости не удовлетворены.


                                            В годы юности NM вызывал приступы фрустрации у пользователей, но потом всё стало неплохо.

                                            Мне кажется, что до сих пор всё не стало "хорошо". Конфигурировать сеть через него в разы сложнее, чем через ifconfig или ip, всё это может конфликтовать, работа с VPN соединениями в NM у меня как-то совсем не сложилась. Ещё почему-то в моём дистрибутиве иногда не запоминается последняя использованная сеть.


                                            Зато радует pulseaudio. Если раньше им было очень сложно пользоваться, то сейчас он очень удобен и стабильно работает.

                                              0

                                              А можно узнать, что с NM на компе с gui не так?
                                              У меня было дофига компов, юзеров с разным уровнем владения пк и ни одного нарекания на NM.
                                              Чем сложнее в NM сеть конфигурировать?
                                              Какой тип VPN использовался?

                                                0

                                                Ну как бы GNU/Linux не только на компах.
                                                Когда есть несколько сетевых интерфейсов, несколько сетей, в некоторых из них несколько VLAN, есть объединение интерфейсов в bonding, зеркалирование трафика, двойная звезда и т.д. — хотел бы я посмотреть на того, кто все это в gui конфигурирует.

                                                  0

                                                  В этом я не спорю, только консоль с утилитами ip, ifconfig
                                                  Как для домашнего юзера — проблем с nm не видел

                                                    0
                                                    Для замороченных конфигураций самое просто и удобное — альт-специфичный www.altlinux.org/Etcnet — в отличие от net-scripts из RH это минимальная надстройка над ip l/a/r/ru с идентичной семантикой. Отсюда же и минусы по сравнению NM или systemd-networkd (и netplan поверх них) — поднятие десятка вланов реально сопровождается как минимум десятком вызовов ip l add + еще столько же на ip a add + еще какие-нибудь ip r/ru
                                                      +1

                                                      RouterOS?

                                                  +3
                                                  Спасибо, отличный обзор! Больше десяти лет назад мы (региональный LUG) пробовали делать что-то похожее для школьных учителей информатики, презентация до сих пор жива — enp.itx.ru/linux/alt/schools/linux-inside.pdf — но местами устарела (потому как в ней нет ничего про systemd, dbus и прочий freedesktop)

                                                  По тексту я бы еще чуть больше сказал про сеть (от systemd-networkd до Ubuntu-специфичного netlplan и ALT-специфичного etcnet + всякие детали резолвинга, включающие resolvconf) — но наверняка кто-то из читателей найдет другой свой любимый молоток, придерется к тому, что нет ничего про виртуализацию и контейнеры — и т.д. :)
                                                    0

                                                    А вы возьмите и расскажите :) спасибо за методичку, скачал себе

                                                    –8
                                                    По большому счёту все претензии к Linux сводятся к трём вещам: отсутствие вертикальной совместимости (даже на уровне glibc), отсутствие актуальной документации (man'ы — это хрень, а не документация. Попробуйте по ним научиться пользоваться, скажем, ffmpeg или rsync) и отсутствие полноценной поддержки аппаратуры (особенно это касается ноутов, где зачастую проблема даже добиться нормальной работы со спящим режимом).
                                                      +7
                                                      Отсутствие вертикальной совместимости — не всегда минус: здорово, когда не приходится тащить наследие предков, а если у вас есть исходники связываемого приложения, его можно пересобрать. Маны — очень простой, конечно, инструмент, но это здорово, что они есть. Аппаратура — да, полностью согласен. Но тут Linux сложно винить. Где-то в идеальном мире вендоры публикуют открытые спецификации и даже референсные драйверы.
                                                        +4
                                                        Про маны ffmpeg и rsync — я пробовал, что не так?
                                                          0

                                                          Тут, возможно, дело в уровне владения английским языком. Не у всех пользователей он достаточен для комфортного чтения манов, поэтому они предпочитают гуглить и продираться сквозь кучи мусорных статеек.

                                                            0

                                                            Раньше были проекты по переводу документации и манов. Точно помню, что были пакеты манов на русском языке. Я их никогда не устанавливал, так как всегда читал без проблем и на английском. Но они были, кажется, эту работу в основном спонсировал какой-то из разработчиков российских дистрибутивов.


                                                            Наверняка они и остались, и по большей части актуальны до сих пор. Во всяком случае, маны для coreutils, awk, sed и всего такого базового.

                                                          0
                                                          отсутствие вертикальной совместимости

                                                          Это минус, когда у вас всегда строго одна поддерживаемая архитектура и строго closed-source приложения.


                                                          Только вот линукс — это OSS.

                                                            0
                                                            Линукс — это OSS, но далеко не все приложения OSS. А для работы нужен как раз софт. Ну и даже OSS софт далеко не всегда оперативно обновляется авторами, если в операционке что-то изменилось.
                                                              0

                                                              OSS можно обновить и без авторов, если у вас достаточно денег/вы можете найти энтузиастов/разобраться сами.
                                                              В случае closed sources такой возможности вы лишены по определению.

                                                                0

                                                                Почему? Всегда можно связаться с авторами и уточнить условия. Но в любом случае основной проблемы это не отменяет — нужный мне софт может быть closed source независимо от операционки, на которой он у меня крутится.

                                                                  +1

                                                                  а автор давно ушел из корпорации у которой остались все права собственности, но не осталось желания нанимать нового программиста.

                                                                    0
                                                                    Безусловно, всё возможно. Но вы на все случаи жизни соломки не подстелите.
                                                                      0

                                                                      этот аргумент Р. Сталман приводит на своих лекциях, зачем нужно ПО с открытым кодом. Он утверждает, что это обычная ситуация, особенно если П.О было разработано давно.

                                                                        0
                                                                        Я не думаю, что на эту тему имеется хоть какая-то надёжная статистика. Безусловно, технически у открытого софта больше шансов «пережить зиму», если понадобится, но на практике мы знаем массу примеров всех возможных сочетаний этих двух категорий: живое/сдохшее, проприетарное/открытое. К тому же, опять-таки, «долговременная живучесть» — важный фактор, но лишь в ряду прочих факторов. Вполне можно решить, что конкретно моей ситуации это вообще непринципиально. Допустим, есть у меня софт, который делает бэкапы. Если он по какой-либо причине перестанет работать, я найду аналог, вряд ли это такое уж экстраординарное дело. Но бывают случаи и гораздо сложнее, конечно.
                                                                          0

                                                                          есть такая штука: https://en.wikipedia.org/wiki/Digital_dark_age
                                                                          Это когда ваши старые бэкапы перестанут читаться, потому что софт который их делал больше не работает, а обновлений нет и не будет.

                                                                            0

                                                                            Гораздо страшнее, что сейчас всё, включая Open Source, зависит от пропиетарных облаков и различных SaaS.


                                                                            Допустим, у вас есть Open Source проект, который вы хотите возродить или просто использовать. Но он возможно доступен как docker image, то есть возможно придётся принимать какую-то EULA или даже платить за возможность скачивания. Или одна из зависимостей доступна только как docker image. Или ему требуется какой-то SaaS API.


                                                                            Или, что гораздо более вероятно, у него прописаны зависимости в виде 1e9 библиотек, половина которых указывает в какие-то облака, на GitHub, или еще черт знает куда.


                                                                            [dependencies]
                                                                            frobnicate_dates = git@github.com:big_corp/amqp_broker.git

                                                                            Достаточно одной маленькой шестеренке где-то выпасть, и всё: ничего уже не заведется никогда.

                                                                              0

                                                                              Да, историю с left-pad можно вспомнить.

                                                                              0
                                                                              Не передергивайте: софт и формат данных — это совершенно разные, не связанные между собой вещи. И да, закрытый и неопубликованный формат — это больший риск, который в моём представлении выше риска проприетарщины. Но прямого отношения эти вещи друг к другу не имеют.
                                                                                +1

                                                                                на ум сразу приходит опубликованный и открытый формат .docx который производит MS Office.

                                                                                  0
                                                                                  Да много чего на ум приходит. GIF, ZIP, AVI и ещё огромная куча форматов. Более того, я бы сказал, что форматы в среднем переживают софт, поэтому в нашей повседневной практике используется масса форматов, придуманных тогда, когда об открытости и вопросах лицензий вообще мало кто задумывался. А с реализацией везде проблемы: docx открыть в OpenOffice — криво, odt открыть в MS Word — точно так же криво, чего тут удивительного. HTML страницы в разных браузерах тоже по-разному отображаются, хотя казалось бы.
                                                                                    0
                                                                                    в нашей повседневной практике используется масса форматов, придуманных тогда, когда об открытости и вопросах лицензий вообще мало кто задумывался.

                                                                                    формат .txt, что-ли? GNU существует с 1984г.

                                                                                      0
                                                                                      И что, многие задумывались об открытости и вопросах лицензий в 1984 году? Мне кажется, отдельные личности, не более того.
                                                                                        0

                                                                                        есть такая книжка "Numerical Recipes", её авторы явно задумались об закрытости своей лицензии, хотя все исходники в книжке есть. Вышла она в 86 году. Я помню как читал в советские времена ещё ксерокопию, типа настольной библии была.

                                                                                          0
                                                                                          Не, ну с этим я не спорю — конечно, отдельные эпизоды такого рода были, были и люди, которые задумывались об этих вопросах. Но мне кажется, что основной массив исходников жил в условиях «дикой природы», да и судебная практика ещё не устаканилась, даже в 90-х годах была масса прецедентных решений.
                                                                                      +1
                                                                                      А с реализацией везде проблемы: docx открыть в OpenOffice — криво

                                                                                      Оно и под самим MSO криво. MSO fo Mac вспоминали тут дюже. Накладные от кока-колы хорошо не снятся… как две мажорки сменилось — так и рассыпается.
                                                                                      Но у меня ж работает!!!111адынадын

                                                                        0
                                                                        Всегда можно связаться с авторами и уточнить условия

                                                                        И? Автор может охладеть к проекту, не владеть правами на распространение этого софта, потерять память или вообще помереть.
                                                                        В любом случае, OSS продолжит жить и развиваться за счет сообщества пока он востребован, CSS — кирдык-капут.


                                                                        нужный мне софт может быть closed source

                                                                        Может. Но, в целом, вы, в свою очередь, можете постараться не спонсировать столь паску… вольную манеру с софтом, который вам нужен.

                                                                          0
                                                                          Ну и что? А завтра меня может переехать автобус. Это всё оценки рисков, не более того.

                                                                          Может. Но, в целом, вы, в свою очередь, можете постараться не спонсировать столь паску…

                                                                          Мне кажется, вы избыточно идеологизируете проблему. Вокруг меня масса вещей, которыми я пользуюсь. Часть из них заведомо под моим контролем (мебель, положим), часть вообще никак не зависит (автобусные маршруты), часть идёт с vendor lock (конкретные мешки для пылесоса).

                                                                          Софт в этой картине — всего лишь один мелкий элемент, а «проприетарность» — всего лишь один из рисков. Я вполне себе помню нужный мне open source софт который по сути сдох из-за недостатка интереса к себе. Что мне толку с того, что он open source? Я не могу его сам поддерживать (других дел хватает), сообщество не хочет. Стало быть, переезжаем на другой — возможно, тоже open, а может, и проприетарный, если риски от потери интереса фирмы мне кажутся менее вероятными, чем риски от потери интереса сообщества.
                                                                            0
                                                                            А завтра меня может переехать автобус

                                                                            Но это же не повод перебегать на красный свет?
                                                                            Вот так и с софтом.

                                                                              +2
                                                                              Не уверен, что я удачно донёс свою мысль. Риски у вас есть всегда и везде, и «проприетарность» должна рассматриваться абсолютно в ряду прочих и занимать соответствующее место. Она абсолютно ничем не заслуживает уподобления красному свету на перекрёстке.

                                                                              Скажем, я всю жизнь пользуюсь проприетарным MS Office, и пока всё более-менее хорошо, даже обратная совместимость соблюдается. Авторы не потеряли интереса, как видите. И есть достаточное количество open source продуктов, от которых пришлось таки отказаться: Bazaar и Java PathFinder, например. Не помогла их опенсорсность ни разу.

                                                                              Когда я вижу, что продукт закрытый, то ставлю галочку: вот, тут есть риск. Но в итоговой таблице галочек много, и эта галочка будет лишь одной из общего списка.
                                                                                +1

                                                                                Звучит весьма разумно.
                                                                                Да, вы правы.

                                                                  +4

                                                                  Вам не нравятся маны? Попробуйте без них научиться пользоваться rsync! Да и всем остальным.
                                                                  Маны — это такое супер-изобретение, что я прям сколько использую линукс, столько и счастлив, что есть адекватная документация по большинству команд, очень удобно.

                                                                    +1
                                                                    Вам не нравятся маны? Попробуйте без них научиться пользоваться rsync! Да и всем остальным.

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

                                                                      +8
                                                                      Кому как. Между манами и получасовым видосом парня с мощным индусским акцентом под электронщину про то как сделать десятисекундное действие, выберу маны 11 раз из 10.
                                                                      А других туториалов поди поищи еще.
                                                                        +1

                                                                        Если я никогда не пользовался программой, то я обычно выбираю стек оверфлоу

                                                                          0
                                                                          Все зависит от ситуации. Я когда код пишу — тоже использую как официальный JavaDoc от Оракла, так и стек оверфлоу. И один не отменяет другой. У мана есть неоспоримый плюс — он есть здесь и сейчас. И еще в них обычно есть секция EXAMPLES — там часто есть готовое решение для большинства случаев.
                                                                      • UFO just landed and posted this here
                                                                          0

                                                                          В хороших манах есть раздел examples

                                                                        0
                                                                        ffmpeg или rsync

                                                                        Да они и под Windows ведут себя так же.
                                                                        0

                                                                        По описанию и по картинке создаётся впечатление, что NetworkManager работает непосредственно с Сетевым Стеком. Получается, что сеть целиком можно настроить с помощью NetworkManager?


                                                                        Как минимум устройства то предоставляются не непосредственно ядром, а udev. На картинке udev находится там, где systemd? Или новое устройство можно сделать другой программой, например openconnect, с помощью которой я настраиваю vpn. Это тоже ведь не уровень ядра.


                                                                        Не сочтите за придирки по мелочам, я не хочу сказать, что статья плохая, но так как сам в этой теме понимаю плохо, хочу уточнений.


                                                                        Например, мне нужно сконфигурировать компьютер, так, чтобы в один адаптер втыкался шнур от интернета, а в другой свитч, через который работает внутренняя сеть в доме. Мне для этого хватит нетворк менеджера? Или он таким не занимается и понадобится дополнительный софт? Или NetworkManager как раз и занимается тем, что абстрагирует этот дополнительный софт, используя его под капотом?


                                                                        И может вы в курсе, как связаны NetworkManager и networkd? Одно заменяет другое? Или NetworkManager работает поверх networkd?

                                                                          0
                                                                          en.wikipedia.org/wiki/Netlink — вот через него ip l/a/r/ru и прочие NM, networkd и openconnect (или даже github.com/svinota/pyroute2) уговаривают ядро сконфигурить сетевой стек требуемым образом
                                                                            0

                                                                            Ага. Получается network manager говорит с ядром по специальному протоколу. А для того, чтобы сделать допустим enp0s3 достаточно этого протокола? Я так понимал, что udev это делает.


                                                                            И network manager он может вообще без других программ работать? Его получается достаточно? Я думаю нет, но если он работает с ядром по этому протоколу, то получается, что да?

                                                                                0
                                                                                точнее udev (как часть systemd)
                                                                                0
                                                                                Тут — developer.gnome.org/NetworkManager/stable/NetworkManager.html — пишут, что NM таки пользуется услугами udev для обнаружения сетевых интерфейсов. Но udev — это такой же точно клиент netlink, поэтому я не вижу теоретических препятствий к тому, чтобы реагировать на появление/исчезновение сетевых интерфейсов самостоятельно — тот же networkd, насколько я понимаю, именно так и делает (а еще умеет переименовывать сетевые интерфейсы без помощи udev).

                                                                                Вообще я могу ошибаться в деталях, поэтому как эксперта могу как раз посоветовать автора вышеприведенной библиотеки для работы с netlink — лет десять назад он был довольно общительным и делал (сначала на AWK, а потом на python) свою свободную систему управления сетевыми интерфейсами (и не только) поверх netlink c JunOS-like CLI — но, видимо, опередил свое время :(
                                                                            0
                                                                            Графический тулкит — библиотека или фреймворк, упрощающая рисование формочек и кнопочек, причём в едином стиле. То, чем занимается Windows Forms на ОС другого производителя, а так же занимался некогда полулярный Motif на старых юниксах (Open Motif доступен поныне).

                                                                            Windows Forms — это ООП обертка(Delphi VCL-like) над win32 api.
                                                                              0

                                                                              20 лет назад считал своим долгом превратить Linux в такую же удобную для пользователя систему, как и Windows. Делал всякие графические улучшения и программки на QT для настройки конфигов. А потом познал дзен и стал использовать линукс таким какой он есть: быстрым, удобным, настраиваемым. И все эти богатства только для интеллектуального сообщетсва.

                                                                                0
                                                                                20 лет назад может быть и надо было что-то делать, а сейчас-то все искаропки хорошо
                                                                                  +1
                                                                                  Особенно Гном 3.
                                                                                0

                                                                                Огромное Вам спасибо за статью! Стиль вашего изложения очень приятен, читать одно удовольствие!
                                                                                Было очень интересно увидеть общую архитектуру. Все названия (masa, qt, SELinux итд) видел множество раз, но именно после прочтения вашей работы, многое в понимании стало на места! Также то что Вы провели параллели с одинаковыми по сущности продуктами и вкратце упомянули их историю, тоже для меня было ценно. Ещё раз спасибо большое за Ваш труд!

                                                                                  +1
                                                                                  Статья хорошая, но ломают всё же копья, а не копии :)
                                                                                    +1

                                                                                    Скрипя сердцем.

                                                                                    –2
                                                                                    У меня сложилось впечатление, что многие пользователи GNU/Linux слабо представляют, из чего сделана эта операционная система, поэтому утверждают, что она сляпана из попавшихся под руку кусков.

                                                                                    Наоборот, как раз хорошо представляют, потому и утверждают. И ваша статья — только подтверждает данное утверждение.


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

                                                                                    Это не значит что она не сляпана. Да, технология "сляпать из кусков", к сожалению, устоялась.


                                                                                    регламентируется рядом стандартов

                                                                                    Что-то регламентируется, что-то не регламентируется. Где регламентируется — у каждой подсистемы свой стандарт, делавшийся либо без оглядки на остальных, либо, в местах неизбежного соприкосновения, с учётом необходимых костылей для подгона одного к другому. Нет единого плана разработки, да и не может быть с таким подходом — найдём кто что сделал в опенсорсе и как-нить прикостылим к тому что уже есть.

                                                                                      +1
                                                                                      которыми обычно занимается DirectX в ОС другого производителя.


                                                                                      Ммм, мы же сейчас про ReactOS говорим?)
                                                                                      Или это то самое имя, которое нельзя называть?

                                                                                      А статья приятная, да, спасибо.
                                                                                        +4
                                                                                        Дефолтным загрузчиком сегодня является GNU GRUB
                                                                                        Только в большинстве дистрибутивов: в Gentoo и Arch Linux, например, вообще нет никаких умолчаний, поскольку нет самого процесса автоматизированной установки.
                                                                                        Другой загрузчик с давней историей — Syslinux.
                                                                                        Есть ещё LILO, тоже с давней историей (ещё более давней, если не ошибаюсь), и до сих пор худо-бедно развивается.
                                                                                          +1
                                                                                          Познавательная статья, спасибо. Ждем продолжение про директории!
                                                                                            +1
                                                                                            … Пакетный менеджер..

                                                                                            а где Portage?
                                                                                            для меня Portage самый лучший пакетный менеджер — исходники берутся напрямую из github, нативная сборка (-march=native), тонкая настройка (USE, env, выбор версии… )
                                                                                              0

                                                                                              И в итоге большую часть времени система занята компилированием всего и вся.
                                                                                              Пакетные менеджеры с бинарниками не на пустом месте возникли.

                                                                                                0
                                                                                                И поэтому есть отличный компромисс — Nix. Собирает всё из исходников, но качает готовые результаты из кеша.
                                                                                              0
                                                                                              Эх! Расскажите мне лучше как в Win сделать окно в фокусе, но не в топе. Как в свое время было хорошо в BlackBox :,(

                                                                                              ЗЫ. А по теме, что Linux, что Win всего лишь интерфейс к инструменту решения задач. И чем они меньше создают проблем в достижении цели использования компьютера тем лучше. Не надо делать ни из того ни из другого культ, т.к. и то и то костыль и должно быть отброшено.
                                                                                                +3
                                                                                                Расскажите мне лучше как в Win сделать окно в фокусе, но не в топе.

                                                                                                К сожалению, не подскажу.


                                                                                                А по теме, что Linux, что Win всего лишь интерфейс к инструменту решения задач.

                                                                                                Я не люблю эту расхожую трактовку. Это нормально — любить и холить свой инструмент. Что такое решение задачи? Это незначительный момент, когда вы прошли длинный путь, и пришли к месту назначения. Хотелось бы, чтобы путь был приятен сердцу.


                                                                                                и то и то костыль и должно быть отброшено

                                                                                                В пользу новых «более лучших» костылей, всё верно.

                                                                                                  0
                                                                                                  Ребёнок!
                                                                                                    0
                                                                                                    «Истинно говорю вам, если не обратитесь и не будете как дети, не войдёте в Царство Небесное.»
                                                                                                  +1
                                                                                                  Эх! Расскажите мне лучше как в Win сделать окно в фокусе, но не в топе.

                                                                                                  Есть куча утилит, которые могут повесить флаг «Поверх всех окон», как на диспетчере задач. Тогда можно работать с другим окном, которое будет ниже.
                                                                                                    0
                                                                                                    Слишком много манипуляций получается
                                                                                                      0
                                                                                                      И главное непонятно зачем. Я вот дома использую PowerToys для тайтловой раскладки окон, чтобы они вообще не перекрывали друг друга.
                                                                                                    +1
                                                                                                    Эх! Расскажите мне лучше как в Win сделать окно в фокусе, но не в топе
                                                                                                    <сарказм>У 1С в терминальной сессии это замечательно получается до сих пор делать. ))) </сарказм>
                                                                                                  0
                                                                                                  CUPS — изначально не был разработан Apple.

                                                                                                  Вот из Вики:
                                                                                                  Разработка CUPS началась в 1997 году, а первая публичная бета-версия появилась через два года. Изначально CUPS использовал протокол LPD, но через некоторое время LPD был заменён на Internet Printing Protocol. CUPS был быстро принят как система печати по умолчанию в нескольких дистрибутивах Linux, на текущий момент применяется в большинстве дистрибутивов. В марте 2002 года, корпорация Apple приняла CUPS как систему печати для своей операционной системы Mac OS X 10.2, а в феврале 2007 наняла главного разработчика CUPS и приобрела права на исходный код.

                                                                                                  В декабре 2019-го года, основатель проекта CUPS уволился из компании Apple
                                                                                                    0
                                                                                                    В разделе «Графические тулкиты» можно было ещё упомянуть EFL, на котором зиждется Enlightenment.
                                                                                                      +1
                                                                                                      Большое спасибо, очень здорово увидеть картину в целом. Подписался, надеюсь на дальнейшие статьи с этим же подходом к изложению.
                                                                                                        0

                                                                                                        Рад, что вам понравилось! На меня подписалось несколько хабрапользователей. К сожалению, коллеги, не думаю, что в ближайшее время ещё чем-нибудь разрожусь.

                                                                                                        +3

                                                                                                        Очень мудрая статья. Комментарии не менее мудрые к ней. Но мне как "домозозяйке" линукс за 15 лет нравиться начал только с Ubuntu12. И вообще я особо не замарачиваюсь если всё что надо работает, ну и ладно как там всё собрано. Главное не виснет и не тормозит, в деле помогает. Спасибо всем кто сделал операционную систему Линукс!

                                                                                                          0
                                                                                                          >Современный GNU/Linux в представлении художника
                                                                                                          Оно и заметно, что художника.
                                                                                                          На самом деле там больше слоев, ну или меньше:) Ситемды, удев или инит работает в юзерспейсе, как ни странно, а на картинке какой-то гибридный L4. Если картинка для юзера — то ему про кернел/юзер спейс делить не рекомендуется, делите уж на кернел, тулчейн, систему ( примерно это tasksel без целей в Деб басед), Иксы, DE и user soft — всем будет проще.
                                                                                                            +1
                                                                                                            10 лет ждат эту статью, большое спасибо автору!)
                                                                                                              +1
                                                                                                              Живу без загрузчика уже несколько лет. Устройства с UEFI (который, по сути, новый BIOS) умеют загружать ядро с образами с раздела FAT32, смонтированного на /boot (по умолчанию), и предоставляют свое меню на мультибут.
                                                                                                              Есть еще systemd-boot загрузчик, как замена Grub.
                                                                                                                0

                                                                                                                Резонное замечание, спасибо! Я не сподобился попробовать. А где параметры ядра указываются?

                                                                                                                  +1
                                                                                                                  Все параметры, включая параметры ядра, прописываются при создании загрузочной записи в NVRAM. Со встроенной EFI Shell работать не пробовал, для Linux есть удобная программа efibootmgr. Еще, в относительно свежих оболочках (что до сих пор по привычке называют «BIOS») встречаются специальные меню настроек загрузочных записей.

                                                                                                                  UEFI предоставляет опцию выборочной загрузки, если успеть нажать специальную клавишу (зависит от вендора МП). При обычной загрузке берется запись под номером 1.
                                                                                                                  0

                                                                                                                  А преимущество в чём? Меньше промежуточных уровней при загрузке? Но сейчас компьютеры очень редко перезагружаются, в основном, засыпают между использованием.

                                                                                                                    0
                                                                                                                    А преимущество в чём? Меньше промежуточных уровней при загрузке?

                                                                                                                    Типа того.


                                                                                                                    Но сейчас компьютеры очень редко перезагружаются, в основном, засыпают между использованием.

                                                                                                                    Или уходят в hibernate — именно отключаются. И в итоге приятно, что ноут включается и полностью загружается секунд за 5, а не 20-30, как это было раньше.

                                                                                                                      0
                                                                                                                      Меньше промежуточных уровней при загрузке?
                                                                                                                      Почему бы и нет. Особенно, если система одна (или, как у меня, вторая система загружается раз в месяц), а трогать параметры ядра приходиться не часто.

                                                                                                                      Выраженных преимуществ я бы не выделил. Кроме очевидных отличий, в сравнении с отдельным загрузчиком есть такой нюанс — наличие других ОС при прямой загрузке не выявляется.
                                                                                                                    0
                                                                                                                    Отличная статья, спасибо!
                                                                                                                      –2
                                                                                                                      Сейчас всем привычней Windows и даже после статьи особо не вижу необходимых функций, ради которых бы хотелось привыкать к Linux
                                                                                                                        +5
                                                                                                                        Могу написать прямо противоположное: «не вижу необходимых функций, ради которых бы хотелось привыкать к Windows».

                                                                                                                        Я уже лет 10 не пользуюсь виндой и когда приходится с ней изредка сталкиваться, то испытываю не самые приятные ощущения.
                                                                                                                          0

                                                                                                                          В заметке пользовательские функции, вроде как, и не рассматривались. Главная функция GNU/Linux для меня — предоставлять свободное ПО, с чем система отлично справляется. Microsoft Windows с этой функцией пока справляется значительно хуже, но кто знает.

                                                                                                                          0
                                                                                                                          SELinux и AppArmor. Первый явлен миру АНБ и развивается Red Hat, второй рождён в рамках ОС Immunix и сегодня развивается Canonical Ltd. Соответственно, SELinux поставляется в RHEL и производных, а AppArmor — в Ubuntu.
                                                                                                                          AppArmor не имеет отношение к Ubuntu и Canonical (ну или очень незначительное). Его в основном SUSE развивает. А позже в Ubuntu его стали также (как и в SUSE) устанавливать по-умолчанию.

                                                                                                                          CUPS — «общая система печати UNIX», рождённая компанией Apple.
                                                                                                                          Не рожденный, а взятый «под крыло Apple» в 2007году (в 2019-го года, основатель проекта CUPS уволился из компании Apple), сам проект начался в 1997году.

                                                                                                                          … отображающее нажатие клавиш на различные раскладки.
                                                                                                                          Немного кривое предложение.

                                                                                                                          Статья хорошая

                                                                                                                          Only users with full accounts can post comments. Log in, please.