понедельник, 10 апреля 2023 г.

Три буквы

 

СПО

Ричард Столлман - основатель движения СПО, проекта GNU (GNU - рекурсивный акроним, расшифровывающимся, как «GNU is Not Unix), автор концепции «копилефта». Позже это всё с помощью юриста воплотил в лицензию GNU GPL. Программист: GNU Emacs, GCC (компилятор языка C++) и др. C 90-х евангелист СПО.

Последней каплей к созданию проекта GNU для Столмана послужил его конфликт с компанией Xerox. Работая у себя в институте у него стоял аппарат ксерокс который мял буvагу. Об этом можно было знать, только разобрав его. Однажды ксерокс вновь перестал работать и Столман расковырял аппарат. Взглянув на его устройство - понял, что нет никаких сложностей сообщить пользователю ксерокса о том, что бумага замялась. Столлман был готов доработать прошивку аппарата, чтобы тот на дисплее сообщал о замятии бумаги. Он обратился с этим предложением в компанию Хerox. Ему требовались исходники прошивки. Он собирался их доработать и отправить в компанию обратно, чтобы всем было хорошо. На что Xerox ему ответила, что исходники прошивки - это закрытое ПО и коммерческая тайна, частная собственность (т.е. проприетарное ПО - собственническое ПО, несвободное, может иметь открытый код, в основном - код закрыт). Не дадим. Столлман вспыльчив. Он взбесился и послал их и начал "строить свой Лунапарк с блэк-джеком и шлюхами" - проект GNU, а далее - разработки лицензии GNU GPL.

Цель лицензии GNU GPL — предоставить пользователю права копировать, модифицировать и распространять (в том числе на коммерческой основе) программы, а также гарантировать, что и пользователи всех производных программ получат вышеперечисленные права. Такой принцип «наследования» прав называется  «копилефт» (транслитерация c англ. copyleft) был придуман Столлманом. По контрасту с GPL, лицензии проприетарного ПО «очень редко дают пользователю такие права и обычно, наоборот, стремятся их ограничить, например, запрещая восстановление исходного кода».

Проект GNU — проект по разработке СПО, результат сотрудничества множества отдельных проектов.  Проект запущен Столлманом 27 сентября 1983 года в Массачусетском технологическом институте (MIT). Изначальной целью проекта разработать множество свободных программ, похожих по функциональности с проприетарным ПО ОС Unix (компилятор, текстовый редактор, файловый менеджер, мелкие программки выполняющие какую-то одну служебную функцию, например копирование/удаление/чтение файлов и др.) 

Проект GNU должен позволять запускать программы ОС Unix, но при этом сам не является его точной копией. Чтобы этого достичь, в 1984 году Столлман приступил к разработке операционной системы GNU. Окружение операционной системы было готово к 1991-му году, но не было ядра. Были готовы только отдельные компоненты, которые могли работать сами по себе. Цель проекта GNU была достигнута только к 1992 году, когда последний пробел в ОС GNU был заполнен со стороны. А именно — ядром Linux, которое было выпущено, как СПО (открыто студентом Линусом Торвальдсом в соответствии с лицензией GNU GPL v2). Такая система стала называться GNU\Linux (в народе просто Linux, хотя это не истинно верное название). После того, как ядро ОС, окружение ядра (в составе которого был компилятор) были закончены, система стала самодостаточной и могла быть полностью использована для разработки ПО внутри себя.

Линус Торвальдс — финно-американский программист. Создатель ядра Linux.  Родители Линуса, финские шведы Нильс и Анна Торвальдс, были в 1960-х годах студентами-радикалами, впоследствии стали журналистами. В школе Линус преуспевал в физике и математике.  Был малообщительным, скромным мальчиком. Его часто дразнили из-за левых политических взглядов его отца. В 1988 году Линус поступил в Хельсинкский университет, который окончил в 1996 году, получив степень магистра кибернетики. Линус Торвальдс живёт в городе Портленд (США) с женой и тремя дочерями. Много где работал. Сейчас работает в Linux Foundation, работает из дома.

*The Linux Foundation (https://www.linuxfoundation.org) — некоммерческий консорциум развития Linux. Основан 21 января 2007 года. Продвигает, защищает и стандартизует Linux, предоставляет ресурсы и сервисы сообществу открытого ПО. Кроме того, консорциум проводит обучение и сертификацию, а также принимает участие в проектах с открытым кодом, включая: развитие ядра Linux, Xen и многие другие. В этой организации очень много членов - коммерческих структур Microsoft, Intel, IBM, NEC, HUAWEI, Meta и т.д. В зависимости от членских взносов - члену присуждается статус платиновый, золотой и серебряный.

В 1991 году Линус увлекается книгой Таненбаума и покупает себе (или ему дарят) IBM PC 386 компьютер (i386). Тененбаум написал Minix в 1987 году для того, чтобы студенты могли практиковаться в написании операционной системы. Minix была учебная ОС и остаётся такой и по сей день. Автор оберегает её от доработок, которые могли бы её улучшить. Это учебная вещь - Minix должна быть не быстрой или гибкой, а понятной с точки зрения ее изучения. Для 1991 года i386 был достаточно мощным компом, но не было ОС, которая могла бы использовать процессор i386 на полную мощность. По тем временам ОС Юникс хоть и существовал, но не был рассчитан на архитектуру процессора архитектуры x86. Да и стоил не малые деньги. А если ставить на компьютер OC msdos от Microsoft, то вместо i386 получил бы по мощности 286-ой, т.к. msdos никогда не использовала мощность процессора на полную даже для 286 компьютера. Поэтому вариант с установкой msdos - сразу отвалился. Линус начал использовать Minix, но вскоре понял, что ее возможностей ему не хватает и начал её дорабатывать. В итоге он понял, что от Minix'а после его доработок уже ничего не осталось. По сути, он написал новое ядро для операционной системы. Тененбаум не приветствовал энтузиазм Линуса и не стал дорабатывать Minix. В итоге, Линус публикует свои исходники ядра в 1992-ом году.

У Линуса было только ядро, и не было для него окружения. В это же самое время, у Столлмана - было готово окружение, но не было ядра. Столлман конечно пытается писать свое ядро GNU hurd, но оно до сих пор находится в стадии альфа тестирования. В итоге, после объединения двух составляющих - мир и увидел Линух. 

Столлман обижается, когда линух называют линухом, правильно будет именно GNU/Linux

Современные ОС глобально делятся на 2 части - на ядро и окружение ядра операционной системы. В msdos`е каждая программа, по сути, была "операционной системой": она напрямую обращалась к оборудованию компьютера. Сейчас уже нельзя стало напрямую обращаться к оборудованию - этому препятствует как сама ОС, так и сама структура процессора. Можно обратиться к ядру, а ядро уже, в свою очередь - обратится к самому оборудованию. В современном мире программы общаются с ядром ОС. Для программистов само ядро не нужно - они работают с программным обеспечением, а программное обеспечение - уже с ядром, которое работает уже с оборудованием. Это всё сделано для облегчения написания программ, для обеспечения стабильности в работе ОС, для обеспечения защиты данных и безопасности.

Виндоус, например, стал полноценной ОС только с начала появления семейства NT: 2k, xp и новее. До этого - он являлся графической надстройкой над msdos.

Ядро собирается под конкретную архитектуру процессора x86, amd64, arm, mips и т.д. Т.к. исходники ядра открыты, то ядер может быть куча. Ядро содержит базовые драйвера к оборудованию, дополнительная поддержка оборудования расширяется добавлением т.н. "модулей" (или патчей).

Вид окружения операционной системы на экране изначально имеет вид черного экрана с командной строкой. В чём то напоминает msdos. Называется "терминалом". Это пошло от старых систем юникс, когда вычислительные мощности передавались от больших ЭВМ (суперкомпьютеры) по "розетке" (кажется) на терминалы пользователей. Терминала выводится с названием "программной эмуляции телетайпа" "tty*", где * - какой-то номер. tty означает «телетайп» (teletypewriter), получила своё название от устройства конца 1800-х годов, появилось в Unix в 1971 году и по сей день является частью Linux и Unix-подобных операционных систем. Переключатся между ними можно c клавиатуры ctrl+alt+F1...F7 (возможно и больше F*). Как правило, сеанс на tty7 соответствуют графической среде - оболочкам KDE, GNOME, XFCE и др. (работающим в граф. X-server или wayland). Можно сидеть одновременно в нескольких tty под одной учетной записью. Если какой-нибудь процесс заглючил и не закрывается, переключившись на другой tty можно попробовать его грохнуть.

При включении компьютера, обычно, потребуется ввести имя учетной записи и пароль. С таким запросом нас может встретить как и сам терминал, так и специальная граф. оболочка "приветствия" *dm (от слов display Manager, * - оболочек множество, самые популярные kdm, gdm, lightdm). В *dm обычно можно выбрать в какую из графических оболочек мы хотим войти (KDE, GNOME, XFCE и др. ) и какой язык системы включить.

Мелкие программки окружения в терминале - это и есть те самые компоненты GNU. В отличии от msdos, эти компоненты можно сочетать друг с другом собирая целые "предложения" (например, вывод из одной программы передавать в другую). Так можно писать целые сценарии использования чего либо, в зависимости от событий (скрипты *.sh). Их называют shell скриптами (виндовый аналог *.bat файлы, но там меньше возможностей в их написании). Для каждой программки в системе есть документация по ее использованию с описанием ключей и примерами. Например, нужно найти папки, на которые приходится больше всего дискового пространства. Надо вывести список и отсортировать их по размеру. Список, который выдаёт команда du (сокращенно от disk usage - дисковое использование), сортировка - команда sort. Тогда:

$ du -S /var/log/ | sort -rn

Ключ -S (заглавная S) позволяет вывести сведения о размерах корневой папки и по вложенным в неё. Ключ -n указывает команде на то, что нужна числовая сортировка, ключ -r — на обратный порядок сортировки (самое большое число окажется в начале списка), | - оператор "и".

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

В Linux (как и в других Unix подобных системах) обычному пользователю  доступно только ограниченное дисковое пространство (если ему не дано больше). По умолчанию пользователю дается право работать только с разделом /home/username, где "/" - обозначает корень системы (обратный msdos-овскому слэш), home - домашний раздел (аналог виндовой папки C:\Users), username - имя учетной записи (логин) пользователя.

Для администрирования системы есть "суперпользователь". Обычно он зовется root (рут). Он имеет свой домашний раздел  /root, но при этом имеет право на любые действия в системе. Если не требуется ковыряться в системе, то для безопасности лучше всего сидеть под обычным пользователем. Обычному пользователю всегда на некоторое время можно выдать права рута, например для установки программ или обновления системы. Всегда достаточно ввести рутовый пароль, который будет запрошен когда потребуется.

Для файлов и папок в Linux можно давать права, которые может с ним произвести пользователь/группа пользователей/остальные. Это права на x-выполнение (eXecute, запуск файлов exe в windows), r-право на чтение, w-право на запись (сохранение, удаление). Для рута доступны все права здесь и сразу.

Из-за того, что в Linux обеспечивается такая политика безопасности - случайно грохнуть систему или взломать - это очень затруднительно. Максимум, что может пострадать от неправоправных действий - это данные пользователя (те, что в /home/username).

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

Обычно, разработка программы проходит следующие стадии (состояние готовности программы) unstable, testing и stable (слишком общие названия, на самом деле их больше) unstable - это сырая, напичканная всеми фичами, кривая сборка программы; testing - тестируемая, более стабильная версия программы; stable - стабильная версия. Программы в состоянии stable - это обычно сильно морально устаревшие версии программ, т.к. на подходе уже может маячить более свежая нестабильная версия.

Итак, файловая система (ФС) в Линухе состоит из файлов (и папок). Линух поддерживает как обычные FAT, FAT32, NTFS  (из Windows), так и свои:

а) ФС для хранения данных: Ext2, Ext3, Ext4, ReiserFS, JFS, XFS, BtrFS, ZFS;

б) Специальные ФС, из них:

tmpfs - "виртуальная" ФС в оперативной памяти, которое затем можно подключить (монтировать, см. далее) к папке;

procfs - ФС отвечает за хранение информации о системных процессах и ядре;

Ядро Linux поддерживает более 100 типов ФС, причём не только современных, но и старых. Чтобы увидеть список ФС, поддерживаемых ядром, можно открыть /proc/filesystems. Для полноценной работы Линух должен устанавливаться только в свою родную ФС, где для каждого файла (и папки) соблюдаются права (r,w,x - см. выше).

ФС Линуха имеет свою особую структура каталогов для распределения файлов конфигурации, исполняемых, временных файлов и остального. В Линухе устанавливаемая программа не хранится в одной папке, как в ОС от  Microsoft. Она распределяется (размазывается) по всей файловой системе.

ФС начинается с директории «/» (которая называется корнем — от слова root, главный каталог в системе) и разрастается в следующие директории (их состав и наличие может менятся от дистрибутива к дистрибутиву):

/bin — бинарные файлы пользователя, содержит файлы исполняемого типа (имеют право "x" файла на исполнение);

/sbin — системные исполняемые файлы, выполняемые только с правами суперпользователя;

/etc - конфигурационные файлы всех программ, установленных в системе,  скрипты для запуска демонов, автозагрузки программ и т. п.;

/dev — файлы устройств: подключённые микрофоны, клавиатуры, флешки и т.д.;

/proc — информация о процессах, которые запущены в реальном времени;

/var — переменные файлы, т.е. файлы, которые часто переписываются или дополняются (базы данных, кеши, системные журналы и пр.);

/var/log — файлы логов;

/var/lib — базы данных;

/var/lock — файлы блокировок;

/var/mail — почта;

/var/spool — принтер, печать;

/var/run — pid процессов (номер запущенного процесса);

/tmp - временные файлы, которые созданы пользователями, программами или системой, после перезагрузки системы - удаляются;

/home — домашняя папка пользователя (см. выше);

/boot — файлы загрузчика системы (не трогать);

/lib — файлы системных библиотек;

/opt — дополнительные ПО: установленные проприетарные программы, драйвера, игры и др.;

/mnt — монтируемые (подключаемые) дополнительные файловые системы Linux, внешние накопители;

/media - тоже самое, что и /mnt;

/run — каталог процессов (PID-файлы) в реальном времени, однако в отличие от /var/run, они располагаются во временной памяти TMPFS, т.е. удаляятся после перезагрузки системы;

/sys — информация о системе, каталоги в этой папке формируются ядром системы.

В итоге, получается древовидная иерархическая структура, в которой абсолютный путь к любой "сущности" начинается с корня "/" . Если файл лежит в /home/user/work, то структура каталогов идет по цепочке от корня к файлу: "/"->home->user->work.

Выделяют два типа ФС: журналируемые (например Ext3, Ext4, RaiserFS и др.) и не журналируемые (Ext2). ФС первого типа ведут логи, фиксируя в отдельном файле информацию о действиях пользователя и план проверки системы. За счёт логирования система получается более устойчивой к сбоям. ФС второго типа не имеют логов, обладают хорошим быстродействием, но более уязвимы в плане потери данных.

Пользователи Windows знают, что для того, чтобы операционная система работала быстро надо время от времени дефрагментировать жесткий диск, на котором она установлена. ФС Ext3, Ext4 в Линухе почти не подвержена фрагментации: при долгом использовании при определённых условиях незначительная фрагментация может накапливаться.

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

1) "Традиционный" способ - это самый старый способ. Практикуется с  самого начала становления операционной системы. Т.к. сама ОС  является СПО, то и устанавливаемый в ней софт изначально - тоже являлся свободным с открытым исходным кодом. Не даром пошло поверие, что Линух для  "программистов". Раньше так и было. Надо  было сначала скачать исходники программы, затем ее откомпилировать (получить файлы не в виде исходного кода программы, а в бинарном (цифровом) виде). Сейчас для того, чтобы нужная программа работала на твоём железе быстрее процентов на 10-15 - можно воспользоваться  этим "традиционным способом". Например, так хардкорные линуксоиды обновляют ядра в своих системах. Кроме того, что человек должен быть подкован в плане программирования, одним из минусов такого способа установки - является осуществление деинсталляции (удаления) такого ПО из операционной системы: легко можно ошибиться и стереть что-то лишнее. Или наоборот, завалить систему ненужным мусором.

Исходные текста программ можно скачивать с сайтов разработчиков этих программ или с специальных площадок, предназначенных для публикации своих программ там (например git).

2) Установка программ в бинарном виде из программных репозиториев (склад программ). Является на данный момент основным методом установки программ в ОС Linux. Доступен для понимания каждому. Именно после появления данного способа установки программ - ОС Linux начала популяризироваться. Программы распространяются в виде бинарных архивов (пакетов определенного с определённым расширением deb, rpm и др.). Содержимое пакета уже откомпилировано и готово к установке. Устанавливаются такие программы при помощи других специальных "программ-менеджеров" по работе с пакетами (например apt, synaptic и др.) Также, через эти менеджеры происходит и удаление пакетов. Одним из минусов этого способа установки (кстати как и 1-го способа тоже) - является соблюдение "зависимостей" одних программ от  других: для обеспечения работы программы требуются нужные ей компоненты - библиотеки, другие программки, ещё что-то. Всё это заранее проверяет перед установкой программа-менеджер, если чего-то не хватает - она может автоматом доустанавливать нужные составляющие. Бывает о-о-очень редко, но иногда бывает, что зависимости не получается разрешить. Например, для работы какой-нибудь старой программы нужна библиотека с одним именем, но в наше время эта библиотека уже может называться по другому. Библиотека как бы есть, но программа - менеджер не в курсе, что библиотека раньше имела другое имя. Тогда в ручную можно попробовать назначить дополнительное имя библиотеке, можно попробовать поискать альтернативу нерабочей программе, попробовать установить более новую версию и т.д. В конце-концов, гуглить и искать нужное решение на форумах никто не отменял :)

Программы, устанавливаемые таким образом работают немного медленнее, чем устанавливаемые способом 1). Зато в ОС обеспечивается чистота, своевременное обновление ПО и его составляющих. Важно, что для поддержания ОС в актуальном виде требуется актуальный рабочий репозиторий репозиторий. Кстати, репозитории тоже могут быть с нестабильными версиями программ, с тестируемыми и со стабильными.

3) Использовать для установки  (или отдельного запуска) программ "контейнер", когда всё необходимое для работы программы лежит внутри самого контейнера в месте с этой программой. 

Контейнеры бывают разных "технологий" AppImage (*.app), flatpak, snap. Более подробно можно почитать тут: https://habr.com/ru/post/673488/

Из плюсов - обеспечивается максимальная чистота в системе, программа запускается в не зависимости от установленных в системе компонент, лёгкость в установке, распространённость. Минусы - такие программы работают медленнее, чем в 1) и  2), долго запускаются. Иногда возникают сложности с предоставлением прав доступа к системе и железу такой программе (например - на запись (сохранение) файлов).

Контейнеры можно скачивать как с сайта разработчика программ, так и с специальных сайтов - хранилищ.  

Главное понять, что при использовании способов 1) и 2) программа растворяется своими составляющими в основной системе Линуха (см. выше на иерархию ФС). При использовании способа 3) - программа будет выполнятся внутри выделенного ей "пространства", а не внутри основной ОС.

Иногда программа, которая выполняется в консоли - может называться "бэкэнд" (backend).  Если для данной программы есть другая программа, позволяющая работать с предыдущей в графическом режиме - то такая программа называет "фронтенд"  (frontend) или попросту "ГУЙ" (от слова GUI - graphical user interface - графический интерфейс пользователя)

Изначально, графические оболочки в Линухе строились на 2 графических  библиотеках. Возможно и сейчас строятся на данных графических библиотеках и их модификациях.

Первой библиотекой была была Qt от компании Trolltech. Произносится как "кьют", с англ. «cute», что в переводе обозначает "симпатичный" или "милый". Какое-то время она была закрытой, но постепенно до 2005 года код открывался. Этому поспособствовала компания Nokia, которая использовала данную библиотеку в своих SDK для смартфонах на базе ОС Symbian. Позже Qt обрастает различными компонентами и на данный момент становится одним из мощнейших инструментов для написания приложений для разных ОС. Qt является фундаментом популярной графической оболочки (рабочей среды) KDE (Cool (звучит буква K в произношении) Desktop Environment).

Вторая библиотека GTK (ранее GTK+, сокращение от GIMP ToolKit (GIMP "инструментарий", GIMP - свободный "аналог" фотошопа)) была написана сообществом (GNOME Foundation, проектом GNU и т.д.), как свободная альтернатива Qt. Первая стабильная версия появилась в 1998 году. Является основой для других популярных графических оболочки GNOME и Xfce. Оболочка GNOME с версии 3.0 кардинально поменяла внешний вид и общую концепцию того, как должен выглядеть интерфейс рабочего стола. Был сделан упор на максимальную простоту и минимализм. До этого интерфейс GNOME был более функционален и внешне сильно напоминал ОС от Майкрософт. Многие люди этого не поняли и сделали форк данной графической оболочки - т. о. появилась другая оболочка MATE. Внешний вид которой придерживается старых устоев.

Оболочки между собой различаются удобством пользования и настройки, функциональностью, кастомизируемостью, легковесностью для машинных мощностей. Помимо уже упомянутых выше графических оболочек, существуют и другие не менее популярные графические оболочки: Cinnamon (тоже форк старых GNOME, но рассчитанный на новые компьютеры), Budgie, LXDE, Pantheon, Deepin DE (оболочка для китайского Линуха в стиле Mac OS), Enlightenment (или просто E, красивая легковесная оболочка), i3 (i3wm - тайлинговый оконный менеджер (windows manager)), IceWM (легковесный менеджер), Openbox (легковесный оконный менеджер с простым минималистским интерфейсом) и т.д. Чёткой грани, какие компоненты (кроме графических элементов) должны входить в ту или иную оболочку - не существует. Те элементы, которые не представлены в оболочке - всегда могут быть заменены их "консольными аналогами". Про каждую оболочку писать не имеет смысла - их нужно попробовать самому и подобрать понравившуюся.

Из всего выше всего сказанного можно подумать, что в среде линухов царит полный хаос и беспредел. Какой из аспектов операционной системы не взять - нет никакого золотого стандарта, краеугольного камня и т.п. Вовсе не так. Благодаря политике открытого исходного кода и поддержке сообщества - система постоянно живёт, развивается и "эволюционирует": отмирают не прижившиеся и развиваются удачные программные решения. Здесь царит "упорядоченный" хаос (если слово "упорядоченный" можно применить к операционной системе).

Кроме "эволюционирования" у программ могут возникать форки. Форк (fork с англ. — «развилка, вилка») или ответвление — использование кодовой базы программного проекта в качестве старта для другого. При этом основной проект может как продолжать существование, так и прекратить его. Причины для форкинга программы могут быть различны: от реализации чего-то экспериментального; портирования на новые ниши и платформы; вплоть до спасения проекта, если основной проект по разным причинам заморожен, и его развитие под текущими условиями невозможно или представляется невозможным, а также если разработчик не хочет развивать основной проект. В случае свободного ПО юридически возможность создания форка напрямую следует из факта распространения программы по свободной лицензии. Однако форки крупных проектов сравнительно редки и негативно воспринимаются в сообществе, поскольку уменьшают количество разработчиков каждой из ветвей и замедляют их развитие. Тем не менее значение «права на форк» достаточно велико, даже несмотря на то, что на практике оно используется редко: это некоторый сдерживающий фактор в отношениях между ключевыми разработчиками (имеющими возможность вносить изменения в код первоначального проекта напрямую -  в апстрим) и сообществом.

Компоненты системы, которые чаще всего находятся в составе того или иного "дистрибутива" Линуха - с течением времени становятся "базой", стандартом.

Здесь прозвучало понятие "дистрибутива" - линуховым "дистрибутивом" называют ту или иную самодостаточную, полноценную сборку операционной системы Линух с полным набором программ, заточенную под конкретную цель:

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

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

Есть базовые, как правило самые популярные и старые (в плане возраста проекта, а не тухлости компонентов) дистрибутивы для общего пользования, которые разрабатываются It-компаниями или отдельным сообществом. На их основе появляются дистрибутивы уже заточенные под конкретные цели. Такими базовыми дистрибутивами являются, например: 

  • Ubuntu (от зулу ubuntu — «человечность») - дистрибутив основанный на более старом дистрибутиве Debian. Основным разработчиком и спонсором является компания Canonical. В настоящее время проект активно развивается и поддерживается свободным сообществом. Компания Canonical была основана южноафриканский предпринимателем и вторым космическим туристом Марком Шаттлвортом. Цель создания дистрибутива - создать Линух с "человеческим лицом" (https://blog.skillfactory.ru/glossary/ubuntu/);
  • Fedora — дистрибутив Linux, разрабатываемый Проектом Fedora, спонсируемый компаниями Red Hat и IBM и содержащий возможности, которые в будущем предполагаются к использованию в дистрибутиве Red Hat Enterprise Linux. Используется в качестве тестового полгона для обкатки и тестирования новых технологий;
  • Debian — операционная система, состоящая только из свободного ПО с открытым исходным кодом. В настоящее время Debian GNU/Linux — один из самых популярных и важных дистрибутивов GNU/Linux, в первичной форме оказавший значительное влияние на развитие этого типа ОС в целом. Считается самым стабильным дистрибутивом, хотя имеет версии testing и unstable. Проект Debian назван по имени самого Иана и его бывшей жены (в то время ещё подруги) Дебры (Debra);
  • Arch Linux — независимый дистрибутив GNU/Linux для опытных пользователей, оптимизированный для архитектуры x86-64, который стремится предоставить последние «новейшие» версии программ, следуя модели rolling release (постоянные обновления).  По умолчанию пользователю предоставляется минималистичная базовая система, в которую пользователь может добавить то, что ему потребуется;
  • И др.

Популярность того или иного дистрибутива Линуха можно посмотреть в топе на сайте https://distrowatch.com. Всегда можно собрать свой Линух и распространять его - лицензия GNU это позволяет. Вот почему дистрибутивов Линуха так много.

В России популярен один случай https://neolurk.org/wiki/Попов


ЗЫ: Есть мнение, что советская выч. техника сама себя погубила из-за государственной тайны. Повышенный уровень секретности, доходил до абсурда: возникали ситуации, когда один НИИ, разрабатывающий железо, не имел права делится информацией с другим НИИ, который разрабатывает софт под это железо. В результате, время на создание какого-либо аппаратного комплекса могло занимать в разы больше времени, чем могло быть потрачено, если бы оба НИИ свободно обменивались информацией друг с другом. Пример - это наши процессоры Эльбрус. Для доведения софта до "ума" (оптимизация СПО для архитектуры процессора) нужны энтузиасты. Чтобы энтузиаст мог начать работать - он должен запросить информацию по архитектуре Эльбруса, но при этом должен подписать договор о нераскрытии исходного кода, который он будет переделывать из СПО. А это нарушает саму философию СПО - СПО Шрёдингера.