Совместима ли Linux с POSIX?

Is Linux Posix Compliant



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

Короче говоря, POSIX [1] делает именно это для UNIX и UNIX-подобных систем (более подробную историю по этой теме см. В статье Зака ​​Х. [4]). Он определяет интерфейсы обмена, механизмы вызова и передаваемые данные для программного обеспечения, но оставляет внутреннюю реализацию разработчику или обслуживающему персоналу программного обеспечения. Цель состоит в том, чтобы объединить все различные вилки UNIX и UNIX-подобные системы таким образом, чтобы различные реализации программного обеспечения могли взаимодействовать друг с другом. Основным преимуществом POSIX является наличие обязательной документации для этих компонентов - интерфейсов, механизмов и данных - в письменной форме.







Операционная система, которая полностью соответствует стандарту POSIX, классифицируется как совместимая с POSIX. В этой статье мы объясняем, что означает POSIX, определяем, принадлежит ли Linux к этой категории, и перечисляем, какие компоненты Linux должны быть исключены из этой классификации.



Что означает термин POSIX?

POSIX - это аббревиатура от Portable Operating System Interface. Как кратко объяснено выше, POSIX - это название набора стандартов, необходимых для обеспечения совместимости между операционными системами. Как указано в [1], [it] определяет интерфейс прикладного программирования (API), наряду с оболочками командной строки и интерфейсами служебных программ, для совместимости программного обеспечения с вариантами Unix и другими операционными системами. Первая версия POSIX была опубликована в 1988 году. С тех пор POSIX постоянно расширялся и обновлялся Остинской группой по пересмотру общих стандартов (также известной как Austin Group) [7].



По состоянию на 2021 год стандарт POSIX состоит из следующих частей:





  1. Основные услуги (Включает стандарт ANSI C) (IEEE std 1003.1-1988) - Создание и управление процессами, сигналы, операции с файлами и каталогами, конвейеры, библиотека C, интерфейс и управление портами ввода-вывода, триггеры процессов
  1. Расширения (Символические ссылки)
  2. Расширения реального времени и ввода / вывода (IEEE Std 1003.1b-1993) - Планирование приоритетов, сигналы в реальном времени, часы и таймеры, семафоры, передача сообщений, общая память, асинхронный и синхронный ввод-вывод, интерфейс блокировки памяти
  3. Расширения потоков (IEEE Std 1003.1c-1995) - Создание, управление и очистка потоков, планирование потоков, синхронизация потоков, обработка сигналов
  4. Больше расширений в реальном времени
  5. Расширения безопасности (Списки контроля доступа)
  1. Шелл и Утилиты (IEEE Std 1003.2-1992) - Интерпретатор команд, служебные программы

Стандарт регулярно пересматривается, чтобы отразить технические изменения и улучшения. Иногда может пройти несколько лет, прежде чем будет опубликована новая версия и внесены изменения. Это может быть невыгодно, но это понятно, учитывая объем стандарта.

В последние годы были добавлены расширения обработки в реальном времени. Текущая версия была выпущена в начале 2018 года [3]. Авторы SibylFS [5] также опубликовали множество аннотаций к стандарту POSIX для определения логики и взаимодействий более высокого порядка.



Что означает соответствие стандарту POSIX?

Термин «POSIX-совместимая» означает, что операционная система соответствует всем критериям POSIX. Операционная система может запускать программы UNIX изначально, или приложение может быть перенесено из системы UNIX в другую систему. Перенести приложение из UNIX в целевую операционную систему просто или, по крайней мере, проще, чем если бы оно не поддерживает POSIX. На всякий случай операционная система должна успешно пройти сертификацию POSIX [2]. Этот этап достигается (за деньги) путем прохождения автоматизированного сертификационного теста. Соответствующий набор тестов можно найти здесь [11].

По состоянию на 2021 год список операционных систем, сертифицированных POSIX, включает AIX от IBM, HP-UX от HP, IRIX от SGI, EulerOS [6] от Huawei, Mac OS X от Apple (с 10.5 Leopard), Solaris и QNX Neutrino от Oracle, K-UX от Inspur [11] и ЦЕЛОСТНОСТЬ ОС реального времени от Green Hills Software [15]. В настоящее время неясно, классифицируются ли также новые версии трех преемников Solaris, OpenSolaris, Illumos и OpenIndiana, как полностью POSIX-совместимые. Эти операционные системы были POSIX-совместимыми до POSIX 2001.

Другие операционные системы, которые считаются в основном (но не полностью) POSIX-совместимыми, включают Android, BeOS, FreeBSD, Haiku, Linux (см. Ниже) и VMWare ESXi. Для Microsoft Windows Cygwin предоставляет в основном POSIX-совместимую среду разработки и выполнения.

Совместима ли Linux с POSIX?

Термин Linux относится ко всей операционной системе Linux, независимо от ее вкуса, такой как, например, Debian GNU / Linux, RedHat Linux, Linux Mint, Ubuntu Linux, Fedora и CentOS. Если быть точным, Linux - это просто имя ядра, которое является основным компонентом этой бесплатной операционной системы.

Как описал Линус Торвальдс в книге Just For Fun [8], для разработки ядра Linux он запросил копию стандарта POSIX. Это помогло ему реализовать те же механизмы, которые используются в коммерческих системах UNIX. Более того, это позволило ему связать ядро ​​Linux с инструментами GNU, которые в основном следовали тому же подходу. Честно говоря, программное обеспечение в системе Linux предоставлено из различных источников, которые соответствуют стандарту POSIX, но также иногда реализуют свои собственные концепции. В то же время, однако, это также показывает разнообразие, которое составляет Linux как операционную систему.

Одним из примеров этого является способ записи аргументов командной строки. Аргументы с двумя тире (например, –help) являются соглашениями GNU, тогда как команды POSIX никогда не используют аргументы с двумя тире, а вместо этого используют только один (например, -help). С самого начала Linux был разработан с учетом GNU, поэтому команды содержат GNU-стиль.

аргументы. Чтобы добиться соответствия POSIX, аргументы в стиле POSIX добавлялись шаг за шагом. Тем не менее, окончательное решение принимает разработчик. На сегодняшний день большинство команд принимают как короткие, так и длинные аргументы или даже аргументы без дефисов, такие как, например, команда find. Честно говоря, между командами в одной системе нет согласованности, и это может быть проблемой, если вы собираетесь использовать одну и ту же команду в другой системе на основе UNIX, особенно при переключении между Linux, OS X и Solaris.

На данный момент Linux не сертифицирован POSIX из-за высокой стоимости, за исключением двух коммерческих дистрибутивов Linux Inspur K-UX [12] и Huawei EulerOS [6]. Вместо этого Linux считается в основном совместимым с POSIX.

Эта оценка связана с тем, что основные дистрибутивы Linux следуют стандарту Linux Standard Base (LSB) вместо POSIX [9]. LSB стремится минимизировать различия между отдельными дистрибутивами Linux [14]. Это относится к структуре программной системы, включая Стандарт иерархии файловой системы (FHS), используемый в ядре Linux. LSB основан на спецификации POSIX, единой спецификации UNIX (SUS) [10] и нескольких других открытых стандартах, но также расширяет их в определенных областях.

Дистрибутивы Linux на основе LSB включают RedHat Linux, Debian GNU / Linux (2002-2015) и Ubuntu (до 2015 года), и это лишь некоторые из них.

Разработка с учетом POSIX

Чтобы понять POSIX более подробно, мы рекомендуем получить копию стандарта POSIX и прочитать его полностью. Вы можете получить книгу на сайте Open Group. Это требует регистрационного взноса, но дает вам полный доступ к этому ценному ресурсу. Стандарты помогают, поскольку они позволяют разрабатывать программное обеспечение таким образом, чтобы оно работало одинаково на всех платформах UNIX.

Ссылки и ссылки

Спасибо

Автор благодарит Axel Beckert и Veit Schiele за их помощь и советы при подготовке этой статьи.