POSIX

Rodzina standardów IEEE definiujących przenośny interfejs systemu operacyjnego. Dzięki niej programy łatwiej przenosić między systemami uniksowymi.

POSIX (Portable Operating System Interface) to rodzina standardów IEEE, które opisują, jak ma się zachowywać system operacyjny widziany od strony programisty: jakie ma udostępniać funkcje API, narzędzia wiersza poleceń, zmienne środowiskowe i sposób obsługi procesów czy plików. Sama nazwa, z charakterystyczną końcówką „-IX”, została zaproponowana przez Richarda Stallmana i miała podkreślać uniksowy rodowód. Najważniejszy dokument to IEEE Std 1003.1 — aktualna edycja to POSIX.1-2024, tożsama z The Open Group Base Specifications Issue 8.

Sens POSIX-a jest prosty: jeśli piszesz program zgodnie ze standardem, ma on działać na każdym systemie, który ten standard spełnia — bez przepisywania pod każdy Unix z osobna. Zamiast uczyć się osobnego API dla Linuksa, macOS, FreeBSD czy Solarisa, opierasz się na jednym wspólnym mianowniku. To dotyczy zarówno wywołań systemowych w C (np. open(), read(), fork(), pthread_create()), jak i zachowania powłoki oraz klasycznych narzędzi (grep, awk, sed, find).

Jak to wygląda w praktyce

Najczęściej spotkasz POSIX w skryptach powłoki. Gdy w pierwszej linii piszesz #!/bin/sh zamiast #!/bin/bash, deklarujesz, że trzymasz się POSIX shell — bez bashizmów typu tablic asocjacyjnych czy [[ ... ]]. Taki skrypt odpali się tak samo na serwerze z dash, w kontenerze Alpine (gdzie /bin/sh to BusyBox) i na macOS. Chcesz to sprawdzić? Uruchom shellcheck -s sh skrypt.sh — narzędzie wytknie Ci każdą niezgodność ze standardem.

Drugi typowy przykład to programowanie w C. Włączając makro #define _POSIX_C_SOURCE 200809L przed #include, mówisz kompilatorowi, że chcesz mieć dostęp do funkcji POSIX-owych w deklaracjach nagłówków.

Częste pułapki i mity

  • „POSIX = Linux”. Nie. Linux (a właściwie kernel + glibc) jest w dużej mierze zgodny, ale formalnie certyfikowany POSIX-em bywał raczej macOS. Wiele popularnych funkcji (epoll, /proc) to rozszerzenia spoza standardu.
  • Mylenie z Single UNIX Specification. SUS i POSIX są dziś w praktyce zsynchronizowane przez The Open Group, ale to nie to samo — SUS jest nadzbiorem.
  • Bashizmy w skrypcie „sh”. Najczęstszy strzał w stopę: piszesz w bashu, deklarujesz sh, a potem dziwisz się, czemu na produkcji wybucha.

Pojęcia powiązane: POSIX threads (pthreads), signals, file descriptors, Single UNIX Specification, The Open Group, IEEE 1003.1, powłoka (shell), system uniksowy.