Вопрос или проблема
Я думал, что GNU является единственным поставщиком основных инструментов, чей исходный код с открытым исходным кодом поддерживает дистрибутивы Linux. Однако, просматривая unix.se, я увидел несколько вопросов, которые прямо указывают на то, что они имеют дело с GNU, такие как вопрос о безопасности парсинга GNU ls
. Это должно подразумевать, что есть версии ls
, которые не предоставляются GNU, так ведь? Какие это версии, кто их создает и где я могу их найти?
Более прямой подход: вот основные варианты, кроме утилит GNU:
- Утилиты пользовательского пространства BSD: возникли с ранними версиями Berkely Unix, в которых они были просто обычными Unix-инструментами с некоторыми дополнительными функциями, к времени SVR4 они значительно разошлись. В настоящее время используются в различных формах FreeBSD, OpenBSD, NetBSD, DragonflyBSD, MINIX 3 (использует пользовательское пространство NetBSD) и macOS (использует пользовательское пространство FreeBSD с некоторыми модификациями), а также управляющим программным обеспечением на PS3 (сложный производный от FreeBSD и NetBSD), PS4 (производный от FreeBSD), и, возможно, PS5 и PS Vita, а также довольно интересный Chimera Linux.
- Busybox: разработан так, чтобы быть минималистичным и в основном соответствовать POSIX. Busybox заметно не хватает многих часто используемых функций и ведет себя иначе, чем пользовательские пространства GNU и BSD, в основном в небольших, но довольно значительных аспектах. Используется по умолчанию в Alpine Linux (и, следовательно, в огромном количестве образов Docker, поскольку Alpine является популярной основой для них) и в качестве эксклюзивного пользовательского пространства многими встроенными системами, работающими на Linux, включая подавляющее большинство сетевых устройств, использующих Linux в качестве своей ОС. По количеству установок это один из ведущих пользовательских пространств на UNIX-подобных системах, в основном благодаря встроенному использованию.
- Toybox: аналогичная концепция Busybox, но еще более минималистичная (и более соответствующая POSIX в нескольких местах). Возникла в результате разногласий по лицензированию, связанных с busybox. Это то, что использует Android (который в основном является Linux под капотом), но я не знаю ни одной другой Linux-платформы, которая использует это по умолчанию. Это одно из других ведущих пользовательских пространств на UNIX-подобных системах, поскольку Android везде.
- Проект Heirloom: минимально модернизированные копии оригинального UNIX-пользовательского пространства, в основном основанные на исходном коде, выпущенном Caldera и Sun. В основном производные от SVR4, и интересны тем, что многие команды предоставляют как «классическую» версию, так и версию POSIX. Не используется ни одной крупной платформой, о которой я знаю.
- 9base: минимально портированная копия утилит пользовательского пространства, предоставляемых Plan 9 от Bell Labs. Не используется ни одной крупной платформой, о которой я знаю.
- sbase и ubase: еще более маленькая, и в некоторых случаях более минималистичная, но часто более соответствующая POSIX альтернатива busybox. Не используется ни одной крупной платформой, о которой я знаю.
Я думал, что GNU является единственным поставщиком основных инструментов, чей исходный код с открытым исходным кодом поддерживает дистрибутивы Linux.
Нет. Вовсе нет. Столлман и компания любят изображать эту картину так, как будто это «GNU/Linux плюс немного не-GNU дополнительного программного обеспечения», но на самом деле это не так.
Это должно подразумевать, что есть версии ls, которые не предоставляются GNU, так ведь?
Хм, математического вывода здесь нет, в строгом смысле, но да, вы правы.
Во-первых: все не-Linux системы тоже имеют переносимые пользовательские пространства, верно? FreeBSD, OpenBSD, DragonflyBSD, Minix, MacOS… они все не поставляют инструменты GNU. Так что должны быть какие-то другие династии инструментов, как минимум одна.
Так что, да, есть инструменты BSD (которые, конечно, имеют различные форки). Некоторые из них лучше своих аналогов GNU, некоторые хуже, некоторые просто разные. Я не знаю дистрибутива Linux, который полностью полагается на libbsd/инструменты BSD, в то время как другие используют gnulib/GNU coreutils, но, по крайней мере, я предпочитаю bsdtar, предпочитаю другой шелл, чем GNU Bash… вы поняли идею.
Затем, по far, большинство физических устройств, которые работают на Linux, не будут иметь пользовательские пространства GNU:
- Существует более 3,6 миллиарда активных устройств Android. Android — это дистрибутив Linux, который использует
toybox
(лицензия 0-BSD) как сборник стандартных инструментов и измененную оболочку Korn. - Существует несколько миллиардов “маршрутизаторов/точек доступа” DSL/кабельного/оптического волокна, которые работают на дистрибутиве Linux. Подавляющее большинство из них работает с Busybox (GPL) и использует
sh
, который с ним поставляется.
По сравнению с тем, что я бы предположил, что существует около 6 миллиардов устройств Linux с набором базовых инструментов, отличным от GNU, я бы сказал, что несколько миллионов настольных/ноутбучных Linux не так уж распространены.
Но, безусловно, большинство экземпляров выполненных ядер Linux, вероятно, работают в центрах обработки данных облачных провайдеров Hyperscaler (Amazon, Alibaba, Microsoft, Oracle…). Трудно уточнить число, но это будет миллиарды. На чем они работают — трудно угадать. Но особенно для облачных вычислений такие дистрибутивы, как Alpine Linux, популярны, и они не поставляют GNU Coreutils, а Busybox. Но здесь мы считаем виртуальные машины, а не физические машины. Я бы сказал, что в дата-центре Google “устройство” — это серверный шкаф, а не одна материнская плата, так что количество физических устройств относительно небольшое.
(Личное мнение по этому поводу: не очень хорошо, что процент сильных copyleft пользовательских пространств снижается, особенно потому, что поставщики действительно не прекращают нарушать требования сильного copyleft ядра, и отсутствие кода, контролируемого FSF, не способствует его обнаружению. Однако принуждение GPL FSF не сработало, не было направленным и не сработало так, как мне бы хотелось.)
GNU Coreutils в общем не являются оригинальной версией большинства из этих инструментов. Обычно они поставляются операционной системой, и поскольку большинство версий Linux являются GNU/Linux, вы чаще всего знакомы с GNU Coreutils. Однако до появления Linux даже существовали инструменты BSD и различные версии UNIX-утилит, которые в основном все еще существуют сегодня в различных версиях unix. Также некоторые версии Linux не являются GNU и могут использовать что-то вроде Busybox (например, Alpine Linux).
Несмотря на то, кто их создает, важно, чтобы они соответствовали стандарту POSIX, что не всегда так, особенно в отношении утилит GNU.
Вы можете найти версии практически любой команды в OpenBSD, FreeBSD, UNIX, GNU, Busybox и т.д.
Многие из используемых UNIX произошли хотя бы от UNIX версии 6, так что они могут иметь некоторые идентичные утилиты, или они могли модифицировать эти утилиты уникальным образом на своем пути.
Это должно подразумевать, что есть версии ls, которые не предоставляются GNU, так ведь? Какие это версии, кто их создает и где я могу их найти?
Да. Оригинальная реализация ls
по старой лицензии AT&T Unix.
Что касается современных реализаций ls
, то все версии, распространяемые различными BSD (которые, в отличие от Linux, действительно произошли от оригинального AT&T Unix).
Вы можете подумать, что BSD — это очень маргинальная ОС с очень немногими пользователями, но они есть. А также существует дистрибутив BSD, который имеет очень большое количество пользователей: Mac OS от Apple.
Стоит помнить, что такое проект GNU. GNU — это GNU не Unix. Это проект по созданию чистых копий Unix-утилит (таких как ls
), но определенно не Unix. Таким образом, вы можете рассматривать GNU ls
как клона/копию оригинального ls
Unix. На самом деле функции инструментов GNU вдохновили других разработчиков обновить свои инструменты с функциями GNU. За эти годы произошло много взаимовлияния между GNU и остальным миром Unix.
Ответ или решение
Не-GNU версии команд терминала: Понимание множества пользовательских оболочек
Введение
Многие пользователи Linux считают, что инструменты управления системами исходно поставляются исключительно проектом GNU. Хотя GNU и играет важную роль в экосистеме Linux, существует множество альтернативных Werkzeug, которые предоставляют аналогичные, но зачастую отличающиеся функции. В этой статье мы рассмотрим различные не-GNU версии команд терминала, их происхождение, а также соответствующие операционные системы, которые эти версии поддерживают.
BSD Пользовательские утилиты
BSD — это не только система управления, но и набор утилит, который берет свое начало от первых версий Berkeley Unix. В отличие от GNU, который часто ориентируется на функциональное расширение, BSD-утилиты сохраняют историческую преданность оригинальным Unix-инструментам. BSD системы, такие как FreeBSD, OpenBSD, NetBSD и DragonflyBSD, используют эти утилиты как свои стандартные инструменты.
- ls: Утилита
ls
в BSD отличается как в функциональности, так и в поведении от GNUls
. BSD-версии иногда могут быть более лаконичными и менее разделяемыми в использовании, чем их GNU-собрат.
Busybox
Busybox — это уникальный проект, предлагающий набор команд, первая задача которого — минимизация общего объема используемых ресурсов. Busybox является популярным среди встраиваемых систем, таких как маршрутизаторы или другое сетевое оборудование.
- Совместимость: Busybox ориентирован на соответствие стандартам POSIX, но иногда может отступать от них. Этот подход делает Busybox идеальным выбором для систем, где критичны ресурсы, например, в контейнерах Docker и на устройствах с ограниченными вычислительными возможностями.
Toybox
Toybox — это еще одна минималистская альтернатива Busybox, которая стремится стать более совместимой с POSIX стандартами. Этот инструмент в частности используется в операционной системе Android, что делает его по существу важной частью экосистемы Android.
- Применение: Android обеспечивает Toybox своей средой командной строки, что делает его одной из наиболее распространенных не-GNU библиотек команд.
Проект Heirloom
Heirloom Project представляет собой набор утилит, который стремится сохранить оригинальные версии команд UNIX, при этом обладая некоторыми современными модификациями. Эти утилиты пытаются создать баланс между классической универсальностью и современными потребностями пользователей.
Plan 9 и sbase
Plan 9 из Bell Labs также представил несколько альтернативных возможностей для управления системой. Проведя минимальную портировку команд UNIX, проект 9base предлагает утилиты, основанные на концепциях Plan 9.
sbase и ubase — это небольшие, возможно, более минималистичные, альтернативы Busybox, которые часто используют большее соответствие стандартам POSIX.
Заключение
Существуют множество не-GNU версий команд терминала, каждая из которых имеет свои особенности и цели. Для тех, кто ищет альтернативы стандартным утилитам GNU, возможность изучить BSD, Busybox, Toybox и другие подходы предоставляет богатый выбор инструментов, которые могут лучше соответствовать специфическим потребностям. Важно отметить, что все эти утилиты должны стремиться следовать стандартам POSIX, хотя реализация и функционал могут варьироваться.
Бонус: Где найти утилиты
Утилиты и их версии можно найти в открытых репозиториях различных дистрибутивов UNIX и Linux, а также на специализированных сайтах разработчиков. Многие из этих инструментов доступны для скачивания напрямую с их сайтов или через систему управления пакетами вашей ОС.
При создании среды рабочей среды сконцентрируйтесь на совместимости с Вашими необходимо проектами и особыми требованиями, чтобы выбрать наиболее подходящие инструменты для вашего рабочего процесса.