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.