Cosa rende un sistema operativo "Unix-Like"?


20

Mi capita spesso di trovare il termine "unix-like" su molti siti web.

Non esiste uno standard; è solo nel modo in cui si comporta.

Ma se dovessi sviluppare un kernel da zero, cosa lo renderebbe considerato "unix-like"?

Fondamentalmente, quali sono le cose che rendono il codice scritto come Unix?


Risposte:


15

Non esiste uno standard; è solo nel modo in cui si comporta.

Credo che la maggior parte dei sistemi operativi "unix-like" faccia uno sforzo molto serio per aderire allo standard POSIX , che è supervisionato da Open Group, che controlla anche le specifiche Single UNIX che definiscono un "vero UNIX". Il primo è il nucleo del successivo.

Quindi esiste, in effetti, uno standard che definisce le funzionalità dei sistemi operativi unix-like . Dai un'occhiata all'elenco dei sistemi operativi "pienamente" e "per lo più" conformi alla fine dell'articolo di Wikipedia su POSIX.

Ci sono alcuni ovvi motivi per cui Linux, in particolare, potrebbe non essere considerato pienamente conforme o certificabile dalla Single Unix Specification (SUS), ma questi non sono perché un dato sistema Linux è necessariamente incompatibile con esso. L'articolo di Wikipedia riassume le specifiche in questo modo:

SUSv3 ammonta a circa 3700 pagine, che sono divise tematicamente in quattro parti principali:

Definizioni di base (XBD) : un elenco di definizioni e convenzioni utilizzate nelle specifiche e un elenco di file di intestazione C che devono essere forniti da sistemi conformi. Sono forniti 84 file di intestazione in totale.

Shell and Utilities (XCU) - un elenco di utility e una descrizione della shell, sh. Sono state specificate 160 utility.

System Interfaces (XSH) : contiene le specifiche di varie funzioni implementate come chiamate di sistema o funzioni di libreria. 1123 interfacce di sistema in totale sono specificate.

Razionale (XRAT) - la spiegazione dietro lo standard.

La riga di comando utente standard e l'interfaccia di scripting è la shell POSIX, un'estensione di Bourne Shell basata su una versione precedente di Korn Shell.

Altri programmi, servizi e utilità a livello di utente includono awk, echo, ed, vi e centinaia di altri. I servizi richiesti a livello di programma includono servizi di I / O di base (file, terminale e rete).

Una suite di test accompagna lo standard. Si chiama PCTS o POSIX Certification Test Suite.

Inoltre, SUS include la specifica CURSES (XCURSES), che specifica 372 funzioni e 3 file di intestazione. Tutto sommato, SUSv3 specifica 1742 interfacce.

Questo ovviamente si riferisce specificamente a molti componenti di userland (come la shell) che semplicemente non fanno parte del kernel di Linux. Quindi non c'è modo che linux.org et. al. può avere il solo kernel certificato - in questo senso, non è affatto un sistema operativo. Potrebbero, ovviamente, provare a certificare un determinato sistema usando il kernel, ma ciò non avrebbe senso alla luce dello schema generale di distribuzione: il kernel e le persone che lo mantengono sono indipendenti da quelli che mantengono il core userland (GNU) che sono indipendenti dalle persone che mantengono effettive distribuzioni di sistemi operativi assemblati (Debian, Fedora, ecc.).

Suppongo che Debian o Fedora stessi potrebbero impegnarsi nel processo di certificazione (quindi, ad esempio, RedHat Enterprise potrebbe diventare un "unix certificato"), ma questo fa sorgere la domanda che tale sia effettivamente desiderabile. Suppongo che il motivo principale dei sistemi SUS sia l'esecuzione di software (su scala commerciale, non di consumo) scritto per tale, che non è semplicemente la nicchia di Linux - le persone che lo fanno pagheranno migliaia di dollari per licenza per il sistema operativo, inclusi i lotti di supporto, ecc. perché pagano anche decine o centinaia di migliaia di dollari per licenza per qualsiasi software aggiuntivo che vogliono eseguire sul sistema. Linux e gli altri valori anomali, d'altra parte, hanno perseguito obiettivi di progettazione al di là della semplice conformità a scopi commerciali, e ci sono vari esempi di ciò, ad esempio (dahttp://en.wikipedia.org/wiki/STREAMS ):

STREAMS è stato richiesto per la conformità con le specifiche Single UNIX versioni 1 (UNIX 95) e 2 (UNIX 98), ma a seguito del rifiuto degli sviluppatori BSD e Linux di fornire STREAMS, [citazione necessaria] è stato contrassegnato come facoltativo per POSIX conformità da parte del gruppo Austin nella versione 3 (UNIX 03).

Una sistemazione interessante che evidenzia il punto in cui SUS e The Open Group! = Linux,! = BSD, ecc.


2
Si noti che la certificazione è diversa dalla conformità. Ad esempio, per la Linux Foundation non è pratico ottenere la certificazione di ogni versione del kernel, a causa dei costi e del tasso di sviluppo. Ma ciò non significa che (il kernel) non sia completamente o principalmente conforme.
strugee,

2
@strugee Lo standard POSIX non si applica o si preoccupa per il kernel. Ciò che è standardizzato sono i comandi (shell, ls, cat, ...) e le API (cosa fornisce la libc, thread). Ciò che rende Unix una distribuzione basata su Linux sono principalmente i componenti GNU (comandi e glibc). Il kernel non rientra nell'ambito della certificazione / conformità.
jlliagre,

1
Non confutare ma chiarire (lo ripeto dal mio commento sulla risposta di illuminÉ): gli standard sono "cosa", il kernel è "come". Ho letto solo frammenti di standard, ma non credo che si riferiscano affatto a un "kernel" (è solo il "sistema"). Quindi certificazione e conformità WRT: è "cosa" fa un kernel / OS, non "come" lo fa.
Riccioli d'oro

3
@strugee Le specifiche Unix singole si applicano alle interfacce utente. Il kernel alla fine è ovviamente coinvolto, ma il mio commento riguardava la tua affermazione sulla certificazione della kernel Linux. Un kernel non può essere certificato, mancano tutti i componenti con cui interagisce il processo di certificazione. Ciò che può essere certificato (o almeno tentato di essere reso il più conforme possibile) è un sistema operativo, ovvero quella che viene comunemente definita una distribuzione nella comunità Linux.
jlliagre,

2
@strugee Questa sarebbe la ragione possibile, tuttavia, non è tanto il rapido rollover che conta, ma il fatto che non vi sia alcun impegno a garantire che non vengano aggiunte modifiche incompatibili. Ad esempio Solaris 10 è conforme, garantisce questa compatibilità e ci sono stati una dozzina di aggiornamenti da quando è stata certificata Unix03. Inoltre, la combinazione Gnu / Linux cerca di essere il più possibile compatibile / non possibile. Non ha quasi mai tentato di essere certificato perché è sia un processo costoso che non sarebbe comunque conforme perché alcuni requisiti mancano (deliberatamente) e alcune estensioni sono incompatibili
jlliagre

12

Per espandere la prima risposta su POSIX, per capire cosa significa "unix-like", prima di tutto si dovrebbe cercare di capire cosa sia esattamente UNIX. Guardando la documentazione dalla Open Group , proprietaria del marchio Unix, troverete i dettagli sulla specifica Single UNIX 's evoluzione - ecco UNIX03 :

Lo standard di prodotto UNIX 03 è il marchio per i sistemi conformi alla versione 3 della specifica UNIX singola. È una versione notevolmente migliorata dello standard di prodotto UNIX 98. I miglioramenti obbligatori includono l'allineamento con il linguaggio di programmazione ISO / IEC 9989: 1999 C, IEEE Std 1003.1-2001 e ISO / IEC 9945: 2002. Questo standard di prodotto include i seguenti standard di prodotto obbligatori: Chiamate e librerie di sistema internazionalizzate Extended V3, Comandi e utility V4, C Language V2 e interfacce terminal internazionalizzate.

UNIX98 :

Lo standard di prodotto UNIX 98 è una versione notevolmente migliorata dello standard di prodotto UNIX 95. I miglioramenti obbligatori includono (1) interfacce di thread, (2) Multibyte Support Extension (MSE), (3) Supporto di file di grandi dimensioni, (4) Dynamic Linking, (5) modifiche per rimuovere dipendenze o restrizioni relative alla lunghezza dei dati hardware e (6) ) L'anno 2000 cambia. Inoltre, sono inclusi i seguenti miglioramenti opzionali: Funzionalità di amministrazione del software e un set di API per il supporto in tempo reale. Questo standard di prodotto include i seguenti standard di prodotto obbligatori: Chiamate e librerie di sistema internazionalizzate V2 esteso, comandi e utilità V3, linguaggio C, servizio di trasporto (XTI) V2, socket V2 e interfacce di terminale internazionalizzate. Inoltre, può anche essere conforme allo standard del prodotto di amministrazione del software.

UNIX95 (la mia enfasi):

La presente norma di prodotto definisce una piattaforma consolidata per il supporto di una vasta gamma di applicazioni originariamente sviluppate per uno dei sistemi operativi della classe derivati ​​dal codice del sistema operativo UNIX e / o dalle interfacce originariamente sviluppate da AT&T , oltre alle strutture fornite dallo standard del prodotto di base. Ha una portata più ampia rispetto a Base. Questo standard di prodotto include i seguenti standard di prodotto: Chiamate e librerie di sistema internazionalizzate estese, comandi e utilità V2, linguaggio C, servizio di trasporto (XTI), socket e interfacce di terminale internazionalizzate.

Le versioni server dello standard aggiungono Internet Server e IPv6 in alcuni casi.

Quindi, naturalmente, vediamo il riferimento ad AT&T Bell Laboratories e il linguaggio C è al centro di ciò che è UNIX: il linguaggio C, gli strumenti di base modulari e la shell e il modo in cui il kernel, il filesystem e altri componenti chiave del sistema operativo sono stati progettati e implementati .

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

È qui che il libro The Design of the UNIX Operating System di Maurice J. Bach diventa una lettura preziosa perché a questo punto è una questione storica. Naturalmente è da notare come questo sia collegato ad altre invenzioni come il linguaggio C. C è stato sviluppato da AT&T Bell per implementare Unix con un linguaggio che potrebbe essere veloce come assembly ma portatile su hardware diverso, e molti POSIX sono un'estensione dello standard C.

Per quanto riguarda il kernel stesso, troverai spesso un diagramma concettuale come questo per illustrare ciò che tradizionalmente riguardava un kernel UNIX:

inserisci qui la descrizione dell'immagine

Ecco alcuni estratti del libro classico di Mr Bach (1986) che discutono le basi del kernel UNIX System V:

Tuttavia, [sottosistemi e programmi applicativi] utilizzano tutti i servizi di livello inferiore forniti dal kernel e si avvalgono di tali servizi tramite l'insieme delle chiamate di sistema. Esistono circa 64 chiamate di sistema in System V, di cui meno di 32 vengono utilizzate di frequente. Hanno opzioni semplici che li rendono facili da usare ma forniscono all'utente molta potenza. L'insieme delle chiamate di sistema e gli algoritmi interni che le implementano formano il corpo del kernel [...]

[...] i suoi due componenti principali sono il sottosistema di file e il sottosistema di processo.

I file sono organizzati in file system, che sono trattati come dispositivi logici; un dispositivo fisico come un disco può contenere diversi dispositivi logici (file system). Ogni file system ha un superblocco che descrive la struttura e il contenuto del file system e ogni file in un file system è descritto da un inode che fornisce gli attributi del file. Le chiamate di sistema che manipolano i file lo fanno tramite gli inode. [e il pool di buffer]

[...] Esistono due versioni dell'inode: la copia del disco che memorizza le informazioni sull'inode quando il file non è in uso e la copia nel core che registra le informazioni sui file attivi.

L'esecuzione dei processi utente su sistemi UNIX è divisa in due livelli: utente e kernel. Quando un processo esegue una chiamata di sistema, la modalità di esecuzione del processo passa dalla modalità utente alla modalità kernel : il sistema operativo viene eseguito e tenta di soddisfare la richiesta dell'utente [...]

[...] la filosofia del sistema UNIX è quella di fornire primitive del sistema operativo che consentano agli utenti di scrivere piccoli programmi modulari che possono essere usati come blocchi per costruire programmi più complessi. Un tale primitiva visibile a guscio utenti è la possibilità di reindirizzare I / O .

[...] Oltre a gestire le chiamate di sistema, il kernel esegue la contabilità generale per la comunità degli utenti, controllando la pianificazione dei processi, gestendo l'archiviazione e la protezione dei processi nella memoria principale, mettendo in campo interruzioni, gestendo file e dispositivi e occupandosi dell'errore di sistema condizioni.

Se sei interessato alle diverse implementazioni dei kernel in sistemi operativi unix-like, puoi anche dare un'occhiata all'implementazione di FreeBSD (4.4BSD) o al kernel Mach o guardare questo confronto delle loro caratteristiche.

Più conosci il design di UNIX, più capisci cosa è successo nel seguente diagramma sull'antenato di UNIX e sulla sua storia . Bach parla principalmente di System V nel suo libro, ma parla anche di BSD:

inserisci qui la descrizione dell'immagine

C'è molto di più di ciò che incontra davvero gli occhi . Ad esempio, Mac OSX è certificato UNIX03 ma lo vedi collegato a uno dei puri UNIX (principalmente in rosso)?

inserisci qui la descrizione dell'immagine

Sopra puoi vedere come BSD, GNU, Microsoft e diverse persone hanno contribuito a questo universo. Anche se GNU e in definitiva Linux non hanno un lignaggio diretto con UNIX, vedi che GNU è uno sforzo per riprogettare nel mondo open source gli strumenti e il software di UNIX commerciale che erano diventati chiusi. Quindi, guardando il software gestito da GNU si può dare un'idea, ad esempio, delle app e delle librerie prototipo iniziali.

Le guerre di licenza hanno avuto un ruolo nell'evoluzione (e talvolta nella stagnazione) di UNIX. Puoi vedere immediatamente che gli UNIX sono allineati in base al tipo di licenza - chiuso vs. BSD ( BSD consente di rendere il codice sorgente chiuso ... vedi OSX) e GPL che consente a Linux e GNU di completarsi nel mondo del copyleft. Ecco la classica mappa del kernel linux inizialmente sviluppata da Linus Torvalds, che rivela anche ciò che un kernel "può" essere in un sistema operativo simile a Unix:

inserisci qui la descrizione dell'immagine

Ciò suggerisce l'idea che un tipo di progettazione " kernel " non è ciò che rende lo standard UNIX o ciò che definisce un sistema operativo simile a unix. Ciò è dimostrato dal fatto che molti sistemi operativi unix-like possono avere un kernel monolitico o un microkernel: il monolitico era il tipo di design classico per UNIX. Infatti, anche all'interno di UNIX puri, HPUX ha un kernel monolitico mentre AIX utilizza un microkernel. Questo dibattito sul design riguarda le prestazioni e non è legato all'origine o all'identità di Unix. D'altra parte, esiste un approccio concettuale tradizionale per fornire servizi al software, gestire file system ecc. Con sistemi operativi UNIX / unix-like.

Credo che tali considerazioni aggiungeranno contesto alla parte OS della tua domanda.


3
+1 Alcuni punti positivi qui: 1) Informazioni sul rapporto tra C e Unix (da aggiungere: C è stato sviluppato da AT&T Bell per implementare Unix con un linguaggio che potrebbe essere veloce come l'assemblaggio ma portatile su hardware diverso e molto POSIX è un'estensione allo standard C). 2) La progettazione del kernel è indipendente dagli standard. Gli standard sono "cosa", i kernel sono "come".
Riccioli d'oro

1
@goldilocks Grazie, ho aggiunto il tuo commento su C verbatim. Ho cercato di chiarire che le considerazioni del kernel non sono correlate allo standard. La domanda presuppone che ci sia qualcosa di specifico nel kernel simile a unix, ma non lo è. D'altro canto, storicamente i primi kernel Unix avrebbero potuto essere in tale e in quel modo. La mia comprensione è limitata, ma suppongo che i kernel siano cambiati molto perché l'hardware è cambiato molto dagli anni '70. Ciò che è chiaro è che il kernel non definisce Unix / unix-like, pensando che il kernel linux definisca chiaramente GNU / Linux o Linux.
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.