POSIX è un insieme di standard che definisce il comportamento fondamentale dei sistemi operativi.

Cosa si intende per POSIX?
POSIX (Portable Operating System Interface) è una famiglia di standard IEEE (Institute of Electrical and Electronics Engineers) che specifica un'interfaccia comune sistema operativo interfaccia in modo che il software possa essere scritto una volta ed eseguito su più sistemi compatibili con modifiche minime.
Definisce il comportamento e le firme della chiave API utilizzato da applicazioni, specialmente il C libreria e chiamate di sistema sottostanti, che coprono aree fondamentali come processi e segnali, operazioni su file e directory, permessi, primitive di comunicazione interprocesso, funzioni temporali e threading di base. POSIX standardizza anche un insieme di Da riga di comando utilità e un ambiente shell, motivo per cui molti script presupporre un /bin/sh di tipo POSIX e un insieme prevedibile di comportamenti degli strumenti.
In pratica, POSIX agisce come un contratto di compatibilità tra le applicazioni e il sistema operativo: se un sistema operativo e le sue librerie standard seguono le specifiche POSIX, gli sviluppatori possono fare affidamento su una semantica coerente per elementi come descrittori di file, pipe, stati di uscita e codici di errore, migliorando la portabilità tra UNIX e piattaforme simili a Unix (e su diversi fornitori e distribuzioni).
Qual è la storia di POSIX?
POSIX nacque dai problemi di portabilità dei primi tempi di UNIX, quando diversi fornitori distribuivano varianti di Unix che si comportavano in modo simile ma non identico. A metà degli anni '1980, l'IEEE avviò un'iniziativa di standardizzazione formale (il progetto 1003 "P1003") per definire un'interfaccia coerente e indipendente dal fornitore per un "sistema operativo portatile" basato in gran parte sulle pratiche comuni di UNIX. Il nome "POSIX" fu proposto da Richard Stallman, fondatore di GNU progetto, come etichetta breve e pronunciabile per l'interfaccia del sistema operativo portatile.
Il primo standard fondamentale fu pubblicato come IEEE Std 1003.1-1988, focalizzandosi sui servizi fondamentali del sistema operativo e sulle interfacce di sistema C/POSIX (processi, file/directory, segnali, pipe e nozioni di base correlate). Successivamente fu allineato a ISO/IEC come serie 9945 (ad esempio, ISO/IEC 9945-1:1990).
Da allora, POSIX si è espanso ed evoluto attraverso revisioni e specifiche correlate. Una svolta importante si è verificata nel 1998 con la creazione dell'Austin Group, uno sforzo congiunto tra IEEE, The Open Group e ISO/IEC per produrre un unico insieme armonizzato di "Specifiche di Base". Questo lavoro ha portato alla versione POSIX.1-2001 (tecnicamente allineata alla Single UNIX Specification, Versione 3), pubblicata all'inizio del 2002, con successive revisioni importanti come POSIX.1-2008 che hanno continuato ad aggiornare e chiarire lo standard.
Esempi POSIX
POSIX si manifesta più chiaramente nei comuni “elementi costitutivi” che i sistemi simili a UNIX condividono, motivo per cui spesso vengono eseguiti lo stesso codice e gli stessi script di shell Linux, BSD e macOS con poche o nessuna modifica.
Esempi comuni di POSIX includono:
- Interfacce di file e processi, come open(), read(), write() e close() per l'accesso ai file e fork() / execve() per avviare nuovi programmi.
- Descrittori di file e pipe, che consentono ai programmi di passare dati tra loro utilizzando chiamate come pipe() e dup2().
- Segnali, come SIGINT e SIGTERM, che i programmi gestiscono in modo standard utilizzando sigaction().
- Discussioni, fornito tramite le API dei thread POSIX (pthread), incluse funzioni come pthread_create() e pthread_mutex_lock().
- Script shell conformi a POSIX, scritto per /bin/sh e utilizzando utilità portatili come sh, grep, sed, awk, find e tar, che si comportano in modo coerente su tutti i sistemi.
Questa standardizzazione è ciò che rende il software basato su POSIX portabile su diverse piattaforme di tipo UNIX.
A cosa serve POSIX?
POSIX viene utilizzato per rendere il software portabile e prevedibile su sistemi operativi UNIX e simili a UNIX standardizzando le interfacce su cui si basano i programmi. Gli sviluppatori lo utilizzano come contratto di base per il comportamento di base del sistema operativo, tra cui il modo in cui vengono creati e gestiti i processi, come si accede a file e directory, come funzionano i permessi, come si comportano i segnali e le funzioni temporali e come operano le primitive di comunicazione interprocesso come le pipe.
In questo modo, lo stesso codice applicativo può essere compilato ed eseguito su sistemi diversi con modifiche minime. Viene anche utilizzato come target di portabilità per lo scripting di shell e gli strumenti da riga di comando, poiché POSIX definisce un ambiente di shell comune e un comportamento standardizzato delle utilità, riducendo le differenze di "funziona sulla mia macchina" tra distribuzioni e fornitori.
Quali sistemi operativi supportano POSIX?
La maggior parte dei moderni sistemi operativi UNIX e simili a UNIX supportano POSIX in una certa misura, sia completamente sia con estensioni e lacune ben documentate.
I sistemi UNIX nativi come Linux, FreeBSD, OpenBSD, NetBSD e macOS sono tutti costruiti attorno ai concetti POSIX e forniscono un'ampia conformità POSIX nel loro kernel, librerie C, shell e utilità di base. Questi sistemi sono la ragione principale per cui POSIX rimane rilevante, poiché consentono alle stesse applicazioni e script di funzionare su diversi fornitori e distribuzioni con modifiche minime.
Alcuni sistemi non UNIX supportano POSIX parzialmente o tramite livelli di compatibilità. Ad esempio, IBM AIX, HP-UX e Solaris erano storicamente certificati per POSIX e la Single UNIX Specification.
Windows non è nativo di POSIX, ma offre un supporto POSIX limitato tramite ambienti come Windows Subsystem for Linux (WSL) o livelli di compatibilità come Cygwin, che forniscono API POSIX sul kernel di Windows.
Livelli di conformità POSIX

La "conformità" POSIX non si ottiene con un singolo passaggio. Piuttosto, i sistemi in genere dichiarano la conformità a una specifica edizione POSIX (ad esempio, POSIX.1) e poi, facoltativamente, dichiarano di includere gruppi di funzionalità aggiuntivi. Alcuni fornitori si spingono oltre e ottengono una certificazione formale. I livelli di conformità POSIX sono:
- Conformità di base POSIX (POSIX.1 / IEEE 1003.1)Il sistema operativo fornisce le interfacce e i comportamenti POSIX richiesti definiti nello standard di base, tra cui la semantica dei processi principali, dei file e delle chiamate di sistema, oltre al comportamento di base della shell e delle utilità legato a tale edizione della specifica.
- Conformità POSIX con gruppi di opzioniOltre alla base, POSIX definisce set di funzionalità opzionali (gruppi di opzioni). Un sistema può essere "conforme a POSIX" e dichiarare inoltre le opzioni che supporta (ad esempio, utilità extra o semantica API aggiuntiva).
- Specifica SUS/Single UNIX (base XSI + POSIX). La Single UNIX Specification è un superset che richiede interfacce e semantiche aggiuntive oltre alla base POSIX, in particolare l'opzione XSI (X/Open System Interfaces) che è facoltativa in POSIX ma richiesta per il branding UNIX in SUS.
- Certificato POSIX (programma di certificazione formale)Oltre alle “dichiarazioni”, i prodotti possono essere certificati formalmente nell’ambito del programma “POSIX™: Certified by IEEE and The Open Group”, che è un processo definito per la registrazione e la convalida delle dichiarazioni di conformità.
- Certificato UNIX® (livello di marchio)I sistemi pienamente conformi e certificati secondo la Single UNIX Specification possono utilizzare il marchio UNIX®. Si tratta di un livello di conformità più elevato, garantito dal marchio, rispetto al supporto "simile a POSIX".
Standard POSIX
POSIX non è un singolo documento. È piuttosto una famiglia di standard correlati. I lavori POSIX precedenti venivano pubblicati come parti separate (API vs. shell/tool), mentre i POSIX moderni vengono gestiti come un'unica specifica consolidata, periodicamente rivista. Gli standard includono:
- POSIX.1 (IEEE Std 1003.1)Lo standard di base che definisce le API fondamentali del sistema operativo e i comportamenti utilizzati dalle applicazioni (ad esempio, processi e file I / O semantica) come “interfaccia OS portatile” di base.
- POSIX.2 (IEEE Std 1003.2). Lo standard per il interprete dei comandi (shell) e comune utilità, in modo che gli script possano fare affidamento su un linguaggio shell e su un comportamento degli strumenti coerenti su tutti i sistemi conformi.
- POSIX.1b (IEEE Std 1003.1b). Estensioni in tempo reale che aggiungono interfacce standardizzate e semantica necessaria per i casi d'uso in tempo reale (ad esempio, segnali in tempo reale, orologi/timer, memoria condivisa, semafori).
- POSIX.1c (IEEE Std 1003.1c)Estensioni di threading che hanno standardizzato il modello di thread POSIX (pthread), in modo che i programmi multithread possano essere portabili tra i sistemi.
- Revisioni POSIX.1 unificate (era del Gruppo Austin)Le revisioni successive consolidano quelle che erano parti separate in un unico set di "Specifiche di base" (comunemente presentate come volumi come Definizioni di base, Interfacce di sistema e Shell e utilità) e lo aggiornano nel tempo, ad esempio, POSIX.1-2008, POSIX.1-2017e il più recente POSIX.1-2024 (IEEE Std 1003.1-2024).
Vantaggi e limiti di POSIX
POSIX garantisce coerenza ai sistemi UNIX-like definendo un insieme comune di interfacce di sistema operativo e comportamenti degli strumenti. Comprenderne i vantaggi e i limiti aiuta a capire quando adottare POSIX migliora la portabilità e la manutenibilità e quando potrebbero essere necessarie funzionalità o estensioni specifiche per la piattaforma per soddisfare i propri requisiti.
Vantaggi POSIX
POSIX è prezioso principalmente perché standardizza il comportamento atteso del sistema operativo da cui dipendono molte applicazioni e script, riducendo così le riscritture specifiche per piattaforma e le sorprese. I suoi vantaggi includono:
- Portabilità su sistemi simili a UNIXIl codice scritto per le API POSIX (file, processi, segnali, ecc.) ha maggiori probabilità di essere compilato ed eseguito su sistemi operativi diversi con modifiche minime.
- Comportamento prevedibile del sistemaLa semantica standardizzata per elementi quali descrittori di file, stati di uscita, permessi e gestione degli errori fa sì che i programmi si comportino in modo più coerente nei vari ambienti.
- Script e strumento interoperabilità. Una shell POSIX e utilità standard consentono script shell portatili e pipeline di comandi affidabili su diverse distribuzioni e fornitori.
- Manutenzione e onboarding più semplici. Una baseline comune riduce i percorsi di codice condizionali e i "casi speciali", rendendo i progetti più semplici da gestire e più facili da comprendere per i nuovi collaboratori.
- Maggiore compatibilità con gli ecosistemi. Molti runtime, sistemi di compilazione e open-source Gli strumenti assumono un comportamento simile a POSIX, quindi il supporto POSIX migliora la compatibilità con il software esistente.
- Neutralità del venditorePOSIX fornisce un target stabile che evita di vincolare il software alle interfacce proprietarie di un singolo fornitore di sistema operativo.
Limitazioni POSIX
POSIX è una base utile, ma non copre tutto ciò che i sistemi moderni offrono e la conformità nel mondo reale può variare. Le limitazioni includono:
- Non è un set completo di funzionalità del sistema operativo. POSIX si concentra sulle API e sugli strumenti principali, quindi molte esigenze pratiche (funzionalità di rete avanzate, framework di sicurezza moderni, primitive di container, ecc.) spesso richiedono estensioni non POSIX.
- Variazione nella conformità nel mondo realeI sistemi possono differire nelle funzionalità opzionali implementate e nel comportamento nei casi limite, quindi "simile a POSIX" non significa sempre risultati identici ovunque.
- Vincoli del minimo comune denominatoreScrivere rigorosamente in POSIX può significare evitare funzionalità specifiche della piattaforma che potrebbero migliorare le prestazioni, l'osservabilità o la funzionalità.
- Differenze di utensili fuori dallo standardAnche quando le utilità sono presenti ovunque, le implementazioni possono aggiungere flag o modificare i valori predefiniti, quindi gli script potrebbero comunque non funzionare se si basano su opzioni non POSIX (comuni con sed, awk, tar, ecc.).
- La certificazione non è universaleMolti sistemi supportano ampiamente POSIX senza una certificazione formale, quindi potrebbe essere necessario effettuare test e controlli di compatibilità anziché affidarsi a un'etichetta di conformità.
- Aspettative in evoluzione vs. ritmo standard. Gli aggiornamenti standard, ma le piattaforme e gli ecosistemi più diffusi possono evolversi più velocemente, quindi gli sviluppatori spesso puntano, nella pratica, a "estensioni POSIX + de facto".
POSIX è obsoleto?
POSIX non è obsoleto come linea di base, anche se non descrive tutte le funzionalità dei sistemi operativi moderni. È comunque importante perché standardizza i processi principali, l'I/O dei file e i comportamenti di shell/utilità su cui si basa un'enorme quantità di software e strumenti di sistema, e rimane attivamente mantenuto e revisionato dall'Austin Group anziché essere congelato nel tempo.
Ciò che può sembrare "vecchio" è che molte funzionalità importanti, come le API avanzate solo per Linux, i framework specifici per macOS, i modelli di sicurezza moderni, i container e alcune nuove funzionalità di rete, risiedono al di fuori di POSIX, quindi i progetti reali spesso puntano a "POSIX più estensioni della piattaforma" e convalidano il comportamento con i test invece di aspettarsi che lo standard da solo copra tutto.