Che cos'è esattamente POSIX?


139

Vedo POSIX menzionato spesso e ovunque, e avevo ipotizzato che fosse lo standard UNIX di base ... finché non ho notato il seguente estratto su una pagina di Wikipedia: The Open Group

Open Group è famoso soprattutto come ente di certificazione per il marchio UNIX e per la sua pubblicazione dello standard tecnico delle specifiche UNIX , che estende gli standard POSIX ed è la definizione ufficiale di un sistema UNIX .

Se la definizione ufficiale di un sistema UNIX è un'estensione di POSIX, che cos'è esattamente POSIX? ,,, Sicuramente sembra essere una pietra miliare del mondo UNIX, ma non so come si adatta al quadro generale.


2
SUS è la definizione ufficiale di UNIX poiché The Open Group, non l'IEEE, possiede il marchio UNIX. Vedi la mia risposta qui sotto.
penguin359


Risposte:


125

POSIX era uno standard per la prima volta nel 1988 molto prima della specifica UNIX singola. È stato uno dei tentativi di unificare tutte le varie forcelle UNIX e sistemi simili a UNIX. POSIX è uno standard IEEE, ma poiché IEEE non possiede il marchio UNIX®, lo standard non è UNIX® sebbene sia basato sull'API UNIX esistente in quel momento. Il primo standard POSIX.1 è formalmente noto come IEEE std 1003.1-1988. [ 1 ] IEEE ha addebitato una commissione sostanziale per ottenere una copia dello standard.

L'Open Group ha rilasciato la specifica UNIX singola (SUSv2) nel 1997 sulla base del lavoro dell'IEEE sullo standard POSIX. SUSv3 è stato rilasciato nel 2001 da un gruppo di lavoro congiunto tra IEEE e The Open Group noto come Austin Group. SUSv3 è anche noto come POSIX: 2001 [ 2 ]. Ora c'è anche POSIX: 2004 e POSIX: 2008 che è il nucleo di SUSv4. Per quanto riguarda ciò che UNIX® è, UNIX® è qualunque sia l'attuale detentore del marchio registrato . Dal 1994, questo è The Open Group.

Novell ha acquisito il business dei sistemi UNIX da AT & T / USL, dove è nato UNIX®. Nel 1994, hanno venduto il diritto al marchio UNIX® a X / Open [ 3 ] ora noto come The Open Group. Hanno quindi venduto il codice sorgente UNIX® a SCO come UNIXWARE®. [ 3 ] UNIX® stesso ha biforcuto molte volte [ 4 ] [ 5 ] in parte a causa del modello di licenza di AT&T. L'acquisto di UNIX® ti ha fornito la fonte completa del sistema operativo e l'intera catena di strumenti per costruirlo. Le modifiche alla fonte possono essere distribuite e utilizzate da chiunque possieda una licenza per UNIX® di AT&T. Il canone era in migliaia.

BSD era un progetto a Berkeley che ha aggiunto una serie di miglioramenti al sistema operativo UNIX®. Il codice BSD è stato rilasciato con una licenza molto più liberale rispetto alla fonte di AT&T e non ha richiesto una tassa di licenza o addirittura un requisito da distribuire con la fonte, a differenza della GPL che il Progetto GNU e Linux usano. Ciò ha causato l'inclusione di buona parte del codice BSD con varie forcelle UNIX commerciali. Di circa 4.3BSD, avevano quasi sostituito qualsiasi necessità del codice sorgente ATIX UNIX® originale. FreeBSD / NetBSD / OpenBSD sono tutti fork di 4.3BSD che sono un sistema operativo completo e non hanno nessuno del codice sorgente AT&T originale. Né hanno diritto al marchio UNIX®, ma gran parte del loro codice viene utilizzato dai sistemi operativi UNIX commerciali.

Linux è stato sviluppato nel 1991, ma è stato sviluppato da zero a differenza di BSD e utilizza il progetto GNU esistente, che è un'implementazione in camera bianca di gran parte dello spazio utente UNIX. Implementa gran parte di POSIX per la compatibilità ed è simile a UNIX nella progettazione, ma non ha la stretta connessione con AT&T o UNIX® dei BSD.


1
Un'ottima risposta .. tutte le (3) risposte sono state buone, ma questa è stata estremamente istruttiva (specialmente dopo essere stata preparata dall'altra 2); proprio quello di cui avevo bisogno ... e grazie per il commento (sotto il corpo della domanda) su SUS, ora lo capisco abbastanza bene, grazie ... (e non ho notato che era solo un paragrafo ... Era troppo interessante :)
Peter.O

2
@Mikel si spera che la mia modifica sia di aiuto
penguin359,

1
Questa è una risposta fantastica lì @ penguin359!
Boehj,

Qualcuno ha una buona idea di cosa rappresenta la X? Se è solo un suffisso per indicare una relazione con Unix, non dovrebbe essere in minuscolo?
Alex W,

Eccellente. Grazie. Sono stato in informatica per gran parte di quella storia, ma i dettagli "gossip" di come sono andate le cose non erano qualcosa su cui mi sono concentrato. Bello vedere la pista.
Ken Ingram,

55

Le cose più importanti che POSIX 7 definisce

  1. API C.

    Estende notevolmente ANSI C con cose come:

    • altre operazioni sui file: mkdir, dirname, symlink, readlink, link(collegamenti fisici), poll(), stat, sync,nftw()
    • processo, filati: fork, execl, wait, pipe, semaphors sem_*, memoria condivisa ( shm_*) kill, parametri di pianificazione ( nice, sched_*), sleep, mkfifo,setpgid()
    • networking: socket()
    • gestione della memoria: mmap, mlock, mprotect, madvise,brk()
    • utilità: espressioni regolari ( reg*)

    Tali API determinano anche i concetti di sistema sottostanti da cui dipendono, ad esempio forkrichiedono un concetto di processo.

    Molte chiamate di sistema Linux esistono per implementare una funzione specifica API POSIX C e rendere conforme Linux, ad esempio sys_write, sys_read... Molti di questi hanno anche syscalls estensioni specifiche per Linux tuttavia.

    Importante implementazione desktop Linux: glibc, che in molti casi fornisce solo un wrapper superficiale alle chiamate di sistema.

  2. Utilità CLI

    Ad esempio: cd, ls, echo, ...

    Molte utility sono front-end diretti della shell per una funzione API C corrispondente, ad es mkdir.

    Implementazione Maggiore Linux desktop: GNU Coreutils per i piccoli, progetti GNU separate per i grandi: sed, grep, awk, ... Alcune utility CLI sono implementate da Bash come built-in .

  3. Linguaggio shell

    Per esempio, a=b; echo "$a"

    Importante implementazione desktop Linux: GNU Bash .

  4. Variabili ambientali

    Ad esempio: HOME, PATH.

    PATH vengono specificate le semantiche di ricerca , incluso il modo inPATH cui le barre impediscono la ricerca .

  5. Stato di uscita del programma

    ANSI C dice 0o EXIT_SUCCESSper il successo, EXIT_FAILUREper il fallimento e lascia definita l'implementazione del resto.

    POSIX aggiunge:

  6. Espressione regolare

    Esistono due tipi: BRE (base) ed ERE (estesa). Basic è obsoleto e mantenuto solo per non interrompere le API.

    Questi sono implementati dalle funzioni dell'API C e utilizzati in tutti i programmi di utilità CLI, ad esempio grepaccetta BRE per impostazione predefinita ed ERE con -E.

    Per esempio: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Importante implementazione di Linux: glibc implementa le funzioni sotto regex.h che programmi simili greppossono usare come backend.

  7. Struture di directory

    Ad esempio: /dev/null,/tmp

    Linux FHS estende notevolmente POSIX.

  8. I nomi dei file

    • / è il separatore di percorso
    • NUL non può essere usato
    • .è cwd, ..genitore
    • nomi di file portatili
      • utilizzare al massimo 14 caratteri e 256 per l'intero percorso
      • può contenere solo: a-zA-Z0-9._-

    Vedi anche: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Convenzioni API dell'utilità della riga di comando

    Non obbligatorio, utilizzato da POSIX, ma quasi da nessun'altra parte, in particolare non in GNU. Ma è vero, è troppo restrittivo, ad esempio solo bandiere a lettera singola (ad es. -a), Nessuna versione lunga con doppio trattino (ad es --all.).

    Alcune convenzioni ampiamente utilizzate:

    • - significa stdin in cui è previsto un file
    • --termina i flag, ad es. ls -- -lper elencare una directory denominata-l

    Vedi anche: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "POSIX ACLs" (Elenchi di controllo degli accessi), ad esempio utilizzati come backend per setfacl.

    Questo è stato ritirato ma è stato implementato in diversi sistemi operativi, incluso in Linux consetxattr .

Chi è conforme a POSIX?

Molti sistemi seguono POSIX da vicino, ma pochi sono in realtà certificati da Open Group che mantiene lo standard. Notevoli quelli certificati includono:

La maggior parte delle distribuzioni Linux sono molto conformi, ma non certificate perché non vogliono pagare il controllo di conformità. K-UX di Inspur e EulerOS di Huawei sono due esempi certificati.

L'elenco ufficiale dei sistemi certificati è disponibile all'indirizzo: https://www.opengroup.org/openbrand/register/ e anche nella pagina wiki .

finestre

Windows ha implementato POSIX su alcune delle sue distribuzioni professionali.

Poiché era una funzionalità opzionale, i programmatori non potevano farne affidamento per la maggior parte delle applicazioni per l'utente finale.

Il supporto è stato deprecato in Windows 8:

Nel 2016 è stata annunciata una nuova API ufficiale simile a Linux chiamata "Sottosistema Windows per Linux". Include chiamate di sistema Linux, ELF in esecuzione, parti del /procfilesystem, Bash, GCC, (TODO probabilmente glibc?) apt-getE altro: https://channel9.msdn.com/Events/Build/2016/P488 quindi credo che sia consentirà a Windows di eseguire molto, se non tutto, POSIX. Tuttavia, si concentra sugli sviluppatori / sulla distribuzione anziché sugli utenti finali. In particolare, non c'erano piani per consentire l'accesso alla GUI di Windows.

Panoramica storica della compatibilità ufficiale con Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin è un noto progetto GPL di terze parti per quello "fornisce sostanziali funzionalità API POSIX" per Windows, ma richiede che "ricostruisca l'applicazione dal sorgente se si desidera che funzioni su Windows". MSYS2 è un progetto correlato che sembra aggiungere più funzionalità su Cygwin.

androide

Android ha una propria libreria C (Bionic) che non supporta completamente POSIX da Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

Livello bonus

Il Linux Standard Base estende ulteriormente POSIX.

Utilizza gli indici non frame, sono molto più leggibili e ricercabili: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Ottieni una versione zippata completa delle pagine HTML per il grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939


La domanda riguardava POSIX e SUS, ma questa risposta non menziona affatto SUS ...
Kidburla,

1
@Kidburla una grande opportunità per aggiungere la tua risposta e ottenere un po 'di rappresentante :-) (o modificarlo nel mio e darmi rep hehe)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件


@phuclv grazie, l'ho aggiunto alla risposta.
Ciro Santilli 21 改造 中心 法轮功 六四 事件

16

POSIX è lo standard del sistema operativo portatile. Descrive alcune utilità, API e servizi che un sistema operativo conforme deve fornire al software (ad esempio socket, I / O dei file e threading) insieme a convenzioni su come devono essere chiamati da un programma.

L'idea è che un programma scritto per un sistema operativo compatibile POSIX sarebbe più facile da trasferire su un altro sistema operativo compatibile POSIX piuttosto che il trasferimento tra sistemi operativi non compatibili POSIX. Questo è il motivo per cui è molto più facile portare un'applicazione da, per esempio, FreeBSD su Linux piuttosto che portarla da FreeBSD a Windows (sebbene Windows supporti apparentemente un sottoinsieme di POSIX).


14

POSIX è un sottoinsieme di UNIX destinato a coprire vari ambienti simili a Unix per altri sistemi operativi; questo includeva originariamente ambienti come Eunice per VMS, la personalità POSIX di Windows NT e Apollo Domain / OS. Puoi considerarlo come un'API portabilità standard per il sottoinsieme di servizi del sistema operativo il cui comportamento è comune tra Unix e non Unix. Vedere http://standards.ieee.org/develop/wg/POSIX.html per ulteriori informazioni.


Ne ho letto di più ora, e sembra certamente che Uinx fosse il pollo e POSIX fosse l'uovo .. ma mi chiedo se UNIX governa ancora il posatoio .. cioè ... POSIX ha una vita propria ora, e UNIX devono essere conformi a POSIX? ... a proposito. sembra che il nome POSIX sia stato associato da Richard Stallman ....
Peter.O

@ fred.bear: risposta breve: UNIX (il marchio) deve essere conforme a POSIX; Unix (il prodotto) era la base principale di POSIX; i unices (la famiglia di sistemi operativi) sono per lo più conformi ma hanno più in comune. Vedi Linux è Unix? e Mac OS X, UNIX? per discussioni correlate.
Gilles,

@ fred-bear Molte persone sostengono che lo standard POSIX è attualmente guidato dalla comunità di sviluppo del kernel Linux, che (se vero) IMHO non è una buona cosa ...
sakisk,

1
@faif Non l'ho mai sentito e lo trovo improbabile, puoi pubblicare un riferimento?
penguin359,

2
@Gilles The Open Group, proprietario del marchio UNIX® è anche responsabile della certificazione e delle specifiche UNIX® che chiamano Single UNIX Specification o SUS. POSIX è sviluppato dall'IEEE che non è responsabile di UNIX®. Dal 2001, sono stati sviluppati in gran parte in sincronia, ma tecnicamente SUS, che è ora alla versione 4 che ha definito UNIX®.
penguin359,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.