Що саме таке POSIX?


139

Я бачу, що POSIX згадується часто і скрізь, і я вважав, що це базовий стандарт UNIX .., поки я не помітив наступний уривок на сторінці Вікіпедії: Відкрита група

Відкрита група є найбільш відомою як орган, що сертифікує товарний знак UNIX, і її публікація Технічного стандарту Єдиної специфікації UNIX , що розширює стандарти POSIX і є офіційним визначенням системи UNIX .

Якщо офіційне визначення системи UNIX є розширенням POSIX, то що саме таке POSIX? ,,, Це, безумовно, здається наріжним каменем світу UNIX, але я не знаю, як він вписується в загальну картину.


2
SUS є офіційним визначенням UNIX, оскільки Open Group, а не IEEE, володіє торговою маркою UNIX. Ось моя відповідь нижче.
penguin359


Відповіді:


125

Перший POSIX був стандартом у 1988 році задовго до Єдиної специфікації UNIX. Це була одна з спроб об'єднання всіх різноманітних вилок UNIX та UNIX-подібних систем. POSIX є стандартом IEEE, але оскільки IEEE не володіє торговою маркою UNIX®, стандарт не є UNIX®, хоча він заснований на існуючому на той час API UNIX. Перший стандарт POSIX.1 офіційно відомий як IEEE std 1003.1-1988. [ 1 ] IEEE стягував значну плату за отримання копії стандарту.

Відкрита група випустила Єдину специфікацію 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 року це The Open Group.

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 та 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.


1
Чудова відповідь .. всі (3) відповіді були хорошими, але ця була дуже інформативною (особливо після того, як інші 2 були підготовлені); просто те, що мені було потрібно ... і дякую за коментар (під тілом запитання) про SUS, я зараз це досить добре розумію, дякую ... (і я не помітив, що це був лише один абзац ... Це було занадто цікаво :)
Peter.O

2
@Mikel, сподіваюся, моя редакція трохи допомагає
penguin359

1
Це фантастична відповідь там @ penguin359!
boehj

Хтось має гарне уявлення про те, що означає X? Якщо це лише суфікс, який вказує на відношення до Unix, чи не слід це мати малі регістри?
Alex 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...

    Багато утиліт - це прямі передні оболонки оболонки для відповідної функції API 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 (Basic) та ERE (Extended). Basic є застарілим і зберігається лише для того, щоб не порушувати API.

    Вони реалізовані за допомогою функцій API API та використовуються у всіх утилітах CLI, наприклад, grepприймає BRE за замовчуванням та ERE з -E.

    Наприклад: echo 'a.1' | grep -E 'a.[[:digit:]]'

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

  7. Структура каталогів

    Наприклад: /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 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 та EulerOS компанії Huawei два сертифікованих прикладу.

Офіційний список сертифікованих систем можна знайти за посиланням: https://www.opengroup.org/openbrand/register/, а також на сторінці wiki .

Windows

Windows впровадила POSIX у деяких своїх професійних дистрибутивах.

Оскільки це була додаткова функція, програмісти не могли розраховувати на неї для більшості програм кінцевих користувачів.

У Windows 8 підтримка застаріла:

У 2016 році було оголошено про новий офіційний Linux-подібний API під назвою "Підсистема Windows для 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


Питання
стосувалося

1
@Kidburla чудова можливість додати власну відповідь і отримати реп :-) (або відредагувати його в моєму та дати мені реп-хе-хе)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件


@phuclv дякую, я додав це до відповіді.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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 .


Я читав більше про це зараз, і, безумовно, здається, що Uinx був куркою, а POSIX - яйцем, але мені цікаво, чи UNIX все ще керує верхом .. тобто. У POSIX є своє життя зараз, а UNIX повинен відповідати POSIX? ... btw. Здається, ім'я POSIX було придумано Річардом
Сталманом

@ fred.bear: Коротка відповідь: UNIX (торгова марка) має відповідати POSIX; Unix (продукт) був основною основою для POSIX; Unices (сімейство ОС) здебільшого відповідають, але мають більше спільного. Дивіться, чи є Linux Unix? і чи Mac OS X, UNIX? для пов'язаних дискусій.
Жиль

@ fred-bear Багато людей стверджують, що стандарт POSIX в даний час керується спільнотою розвитку ядра Linux, що (якщо це правда) IMHO - це не дуже добре ...
sakisk

1
@faif Я ніколи цього не чув і вважаю малоймовірним, чи можете ви розмістити посилання?
penguin359

2
@Gilles Відкрита група, власниця торговельної марки UNIX®, також відповідає за сертифікацію UNIX® та специфікацію, яку вони називають Single UNIX Specification або SUS. POSIX розроблений IEEE, який не відповідає за UNIX®. Починаючи з 2001 року, вони були розроблені в значній мірі синхронізовано, але технічно SUS, який зараз знаходиться у версії 4, визначав UNIX®.
penguin359
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.