Что именно POSIX?

139

Я вижу, что POSIX упоминается часто и повсеместно, и я предполагал, что он является базовым стандартом UNIX ... пока не заметил следующую выдержку на странице Википедии: Открытая группа

Open Group наиболее известна как орган по сертификации товарного знака UNIX и публикации технического стандарта Single UNIX Specification , который расширяет стандарты POSIX и является официальным определением системы UNIX .

Если официальное определение системы UNIX является расширением POSIX, то что такое POSIX? Это, безусловно, является пробным камнем в мире UNIX, но я не знаю, как это вписывается в общую картину.

Peter.O
источник
2
SUS является официальным определением UNIX, поскольку Open Group, а не IEEE, владеет торговой маркой UNIX. Смотри мой ответ ниже.
penguin359
stackoverflow.com/questions/1780599/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

125

POSIX впервые был стандартом в 1988 году задолго до спецификации Single UNIX. Это была одна из попыток объединения всех различных вилок UNIX и UNIX-подобных систем. POSIX является стандартом IEEE, но поскольку IEEE не владеет торговой маркой UNIX®, стандартом не является UNIX®, хотя он основан на существующем API-интерфейсе UNIX в то время. Первый стандарт POSIX.1 формально известен как IEEE std 1003.1-1988. [ 1 ] IEEE взимает значительную плату за получение копии стандарта.

Open Group выпустила единую спецификацию UNIX (SUSv2) в 1997 году на основе работы IEEE по стандарту POSIX. SUSv3 был выпущен в 2001 году от совместной рабочей группы между IEEE и The Open Group, известной как Austin Group. SUSv3 также известен как POSIX: 2001 [ 2 ]. Теперь есть также POSIX: 2004 и POSIX: 2008, которые являются ядром SUSv4. Что касается UNIX®, UNIX® - это то, что говорит нынешний зарегистрированный владелец товарного знака. С 1994 года это открытая группа.

Novell приобрела бизнес систем UNIX® у AT & T / USL, где и родился UNIX®. В 1994 году они продали право на товарный знак UNIX® компании X / Open [ 3 ], теперь известной как The Open Group. Затем они продали исходный код UNIX® в SCO как UNIXWARE®. [ 3 ] Сам UNIX® много раз поддавался [ 4 ] [ 5 ] отчасти из-за модели лицензирования AT & T. Закупка UNIX® предоставила вам полный исходный код операционной системы и полную цепочку инструментов для ее создания. Изменения в источнике могут распространяться и использоваться всеми, кто владел лицензией на UNIX® от AT & T. Лицензионный сбор был в тысячах.

BSD был проектом в Беркли, который добавил ряд улучшений в операционную систему UNIX®. Код BSD был выпущен под гораздо более либеральной лицензией, чем исходный код AT & T, и не требовал лицензионной платы или даже требования распространяться вместе с исходным кодом, в отличие от GPL, которые используют GNU Project и Linux. Это привело к тому, что значительная часть кода BSD была включена в различные коммерческие вилки UNIX. Приблизительно в 4.3BSD они практически заменили любую потребность в оригинальном исходном коде AT & T UNIX®. FreeBSD / NetBSD / OpenBSD - это все форки 4.3BSD, которые являются полноценной операционной системой и не имеют исходного кода AT & T. Они также не имеют права на товарный знак UNIX®, но большая часть их кода используется коммерческими операционными системами UNIX.

Linux был разработан в 1991 году, но был разработан с нуля в отличие от BSD и использует существующий проект GNU, который представляет собой реализацию чистой комнаты большей части пространства пользователя UNIX. Он реализует большую часть POSIX для совместимости и имеет UNIX-подобный дизайн, но у него нет тесной связи с AT & T или UNIX®, которую имеют BSD.

penguin359
источник
1
Отличный ответ ... все (3) ответы были хорошими, но этот был чрезвычайно информативным (особенно после того, как он был подготовлен другими 2); только то, что мне было нужно ... и спасибо за комментарий (под телом вопроса) о SUS, теперь я понимаю это достаточно хорошо, спасибо ... (и я не заметил, что это был только один абзац ... Это было слишком интересно :)
Peter.O
2
@Mikel, надеюсь, мое редактирование немного поможет
penguin359
1
Это фантастический ответ там @ penguin359!
Boehj
У кого-нибудь есть хорошее представление о том, что означает X? Если это просто суффикс, указывающий на связь с Unix, не должен ли он быть в нижнем регистре?
Алекс W
Отлично. Спасибо. Большую часть этой истории я занимался вычислительной техникой, но подробности «сплетен» о том, как все происходило, были не тем, на чем я сосредоточился. Приятно видеть след.
Кен Ингрэм
55

Самые важные вещи, которые определяет POSIX 7

  1. C API

    Значительно расширяет ANSI C такими вещами, как:

    • больше файловых операций: mkdir, dirname, symlink, readlink, link() жесткие ссылки, poll(), stat, sync,nftw()
    • процессов и нитей: fork, execl, wait, pipe, semaphors sem_*, совместно используемой памяти ( shm_*), killпараметры планирования ( nice, sched_*), sleep, mkfifo,setpgid()
    • сети: socket()
    • управление памятью: mmap, mlock, mprotect, madvise,brk()
    • утилиты: регулярные выражения ( reg*)

    Эти API также определяют основные концепции системы, от которых они зависят, например, forkтребуют концепцию процесса.

    Многие системные вызовы Linux существуют для реализации конкретной функции API POSIX C и сделать Linux совместимыми, например sys_write, sys_read... Многие из этих системных вызовов также Linux-специфических расширения , однако.

    Основная реализация Linux для настольных компьютеров: glibc, которая во многих случаях просто обеспечивает поверхностную оболочку для системных вызовов.

  2. Утилиты CLI

    Например: cd, ls, echo...

    Многие утилиты являются прямыми оболочками для соответствующей функции C API, например mkdir.

    Реализация Major Linux Desktop: GNU Coreutils для маленьких, отдельные проекты GNU для больших из них: sed, grep, awk, ... Некоторые утилиты CLI реализованы с помощью Bash , как встроенные модули .

  3. Язык оболочки

    Например, a=b; echo "$a"

    Основная реализация рабочего стола Linux: GNU Bash .

  4. Переменные среды

    Например: HOME, PATH.

    PATH указана семантика поиска , включая то, как косые черты препятствуют PATHпоиску .

  5. Статус выхода из программы

    ANSI C говорит 0или EXIT_SUCCESSдля успеха, EXIT_FAILUREдля неудачи и оставляет определение остальной реализации определенным.

    POSIX добавляет:

  6. Регулярное выражение

    Существует два типа: BRE (базовый) и ERE (расширенный). Basic устарел и поддерживается только для того, чтобы не нарушать API.

    Они реализуются функциями API C и используются в утилитах CLI, например, grepпринимают BRE по умолчанию и ERE с -E.

    Например: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Основная реализация Linux: glibc реализует функции в regex.h, которые подобные программы grepмогут использовать в качестве бэкэнда.

  7. Справочник struture

    Например: /dev/null,/tmp

    Linux FHS значительно расширяет POSIX.

  8. Имена файлов

    • / является разделителем пути
    • NUL не может быть использован
    • .это cwd, ..родитель
    • переносимые имена файлов
      • используйте максимум 14 символов и 256 для полного пути
      • может содержать только: a-zA-Z0-9._-

    Смотрите также: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Соглашения API утилиты командной строки

    Не обязательно, используется POSIX, но почти нигде, особенно в GNU. Но правда, это слишком ограничительно, например, только однобуквенные флаги (например -a), нет длинных версий с двойным дефисом (например --all).

    Несколько широко используемых соглашений:

    • - означает STDIN, где файл ожидается
    • --завершает флаги, например, ls -- -lдля отображения каталога с именем-l

    Смотрите также: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. «POSIX ACL» (списки контроля доступа), например, используемые в качестве бэкэнда для setfacl.

    Это было отменено, но было реализовано в нескольких ОС, в том числе в Linux сsetxattr .

Кто соответствует POSIX?

Многие системы строго следуют POSIX, но немногие фактически сертифицированы Open Group, которая поддерживает стандарт. Известные сертифицированные включают в себя:

Большинство дистрибутивов Linux очень совместимы, но не сертифицированы, поскольку не хотят оплачивать проверку соответствия. Inspur K-UX и Huawei EulerOS являются двумя сертифицированными примерами.

Официальный список сертифицированных систем можно найти по адресу: https://www.opengroup.org/openbrand/register/, а также на вики-странице .

Windows

Windows внедрила POSIX в некоторых своих профессиональных дистрибутивах.

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

Поддержка устарела в Windows 8:

В 2016 году был объявлен новый официальный Linux-подобный API под названием «Windows Subsystem for Linux». Он включает системные вызовы Linux, запуск ELF, части /procфайловой системы, Bash, GCC, (вероятно, TODO glibc?) apt-getИ многое другое: https://channel9.msdn.com/Events/Build/2016/P488, поэтому я считаю, что это позволит Windows запускать много, если не все, POSIX. Тем не менее, он ориентирован на разработчиков / развертывание, а не на конечных пользователей. В частности, не было планов разрешить доступ к графическому интерфейсу Windows.

Исторический обзор официальной совместимости Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin - это хорошо известный сторонний проект GPL, который «обеспечивает существенную функциональность POSIX API» для Windows, но требует, чтобы вы «перестраивали свое приложение из исходного кода, если хотите, чтобы оно работало в Windows». MSYS2 - это связанный проект, который, кажется, добавляет больше функциональности поверх Cygwin.

Android

У Android есть собственная библиотека C (Bionic), которая не полностью поддерживает POSIX с Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

Бонусный уровень

Standard Base Linux расширяет POSIX.

Используйте некадровые индексы, они гораздо более читабельны и доступны для поиска: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Получить полную упакованную версию HTML-страниц для ознакомления: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
Вопрос был о POSIX и SUS, но в этом ответе SUS вообще не упоминается ...
Кидбурла
1
@Kidburla прекрасная возможность добавить свой собственный ответ и получить несколько повторений :-) (или отредактировать его в моем и дать мне репутацию хе-хе)
Сиро Сантилли 改造 改造 中心 法轮功 六四 '
@phuclv спасибо, я добавил это к ответу.
Сиро Сантилли 新疆 18 中 at 法轮功 六四 事件
16

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

Идея состоит в том, что программу, написанную для одной POSIX-совместимой ОС, было бы проще перенести на другую POSIX-совместимую ОС, чем перенос между не POSIX-совместимыми ОС. Вот почему гораздо проще портировать приложение, скажем, с FreeBSD на Linux, чем портировать его с FreeBSD на Windows (хотя Windows якобы поддерживает подмножество POSIX.)

Эндрю Ламберт
источник
14

POSIX - это подмножество UNIX, которое предназначено для охвата различных Unix-подобных сред для других операционных систем; это изначально включало такие среды, как Eunice для VMS, POSIX-личность Windows NT и Apollo Domain / OS. Вы можете думать об этом как о стандартном API переносимости для подмножества сервисов операционной системы, поведение которых является общим для Unix и не-Unix. См. Http://standards.ieee.org/develop/wg/POSIX.html для получения дополнительной информации.

geekosaur
источник
Я читал больше об этом сейчас, и, конечно, кажется, что Uinx был курицей, а POSIX был яйцом ... но я действительно задаюсь вопросом, по-прежнему ли UNIX по-прежнему правит на курорте ... то есть .. У POSIX теперь есть собственная жизнь, а UNIX должен соответствовать POSIX? ... кстати. похоже, что имя POSIX было помечено Ричардом Столлманом ...
Peter.O
@ fred.bear: Краткий ответ: UNIX (торговая марка) должна соответствовать POSIX; Unix (продукт) был основной основой для POSIX; уни (семейство ОС) в основном соответствуют, но имеют больше общего. Видите ли Linux Unix? и Mac OS X, UNIX? для связанных обсуждений.
Жиль
@ fred-bear Многие люди утверждают, что стандарт POSIX в настоящее время руководствуется сообществом разработчиков ядра Linux, что (если это правда) ИМХО не очень хорошая вещь ...
sakisk
1
@faif Я никогда не слышал об этом и считаю это маловероятным. Можете ли вы опубликовать ссылку?
penguin359
2
@Gilles Open Group, владелец товарного знака UNIX®, также отвечает за сертификацию и спецификацию UNIX®, которые они называют Single UNIX Specification или SUS. POSIX разработан IEEE, который не отвечает за UNIX®. С 2001 года они разрабатывались в основном синхронно, но технически это SUS, которая сейчас находится в версии 4, которая определяет UNIX®.
penguin359