Tutti i comandi Unix sono stati riscritti in Linux?


Risposte:


93

Sembra che stai confondendo due parti molto diverse del sistema operativo. È comprensibile, perché sono spesso indicati come intercambiabili, ma tecnicamente errato, quindi la tua domanda si basa su una premessa errata. Per esplorare a fondo e, si spera, rispondere alla domanda che probabilmente vorresti porre, è necessaria una breve lezione di storia.

Innanzitutto, c'era UNIX. Fondamentalmente, a quei tempi, UNIX intendeva il sistema UNIX AT&T , che arrivò per primo. Ma AT&T UNIX divenne non libero, quindi Richard Stallman iniziò il progetto GNU per scrivere un sistema Unix che era gratuito . Da qui il nome Gnu non è Unix , abbreviato GNU. I piani per GNU furono resi pubblici nel 1983 e lo sviluppo iniziò nel 1984 .

All'inizio degli anni '90, GNU aveva reimplementato la maggior parte delle utility UNIX da zero. Wikipedia elenca alcuni componenti dell'intero sistema che non sono stati riscritti (TeX, il sistema X Window e il microkernel Mach sono citati come esempi di componenti che non sono stati riscritti) ma soprattutto, gli strumenti per l'utente sono stati riscritti da zero per soddisfare l'obiettivo di evitare il riutilizzo di qualsiasi codice AT&T (o meglio, non libero), nonché di espandere le loro capacità aggiungendo opzioni da riga di comando. Di conseguenza, le utility GNU erano regolarmente più potenti degli strumenti da cui trassero la loro ispirazione originale.

A quel punto, GNU mancava ancora di un componente vitale: un kernel del sistema operativo , che avrebbe permesso a tutto di funzionare insieme su un vero computer senza eseguire altri sistemi operativi. Nel 1991, Linus Torvalds iniziò a lavorare su un progetto giocattolo che alla fine divenne noto come Linux. Fondamentalmente si trattava di un progetto scolastico per conoscere la nuova CPU Intel 80386 a 32 bit , che iniziò in modo estremamente semplice, ma alla fine iniziò a trasformarsi in un kernel del sistema operativo effettivamente utilizzabile. Ma non aveva alcun software userland; Linux da solo non fornisce alcuna shell, nessuna funzionalità di avvio del sistema oltre all'inizializzazione del kernel, nessun editor di testo, nessuna interfaccia grafica, niente. Il kernel è come un motore di automobile; essenziale per rendere un'auto utile, ma inutile da sola (per un'auto utile, hai bisogno di cose come ruote, trasmissione, sterzo, un posto dove il guidatore può sedersi, un serbatoio di carburante o un altro deposito di energia, ecc.). Il kernel Linux fu infine distribuito sotto GNU General Public License, lo stesso del software GNU .

Quindi le persone hanno iniziato ad accoppiare i due. Otterresti una zona utente simile a Unix, insieme a un kernel basato su idee di Unix (inclusa una stretta somiglianza con POSIX ), completo di codice sorgente che potresti hackerare per quanto volevi, e non costava nulla . Soprattutto prima che le distribuzioni Linux diventassero comuni, ci voleva un po 'di armeggiare per far funzionare le cose, ma era abbastanza finito per essere in qualche modo utilizzabile da coloro che erano disposti a passarci un po' di tempo.

In questi giorni, GNU fornisce un proprio kernel. Probabilmente non ne hai sentito parlare, ma si chiama GNU Hurd . Ma Hurd non esisteva nei primi anni '90, quando Linux iniziò a guadagnare terreno tra hobbisti e armeggiatori, quindi fu la combinazione del kernel Linux e una zona utente prevalentemente GNU che attirò più attenzione tra gli sviluppatori.

Inoltre, oggigiorno, molti sistemi Unix installano o consentono all'amministratore di installarlo facilmente, parti della terra dell'utente GNU. Potresti vedere cose come GNU bash, la GNU Compiler Collection, la libreria GNU C (vanilla o patchata) e così via, su un sistema altrimenti non GNU.

A peggiorare le cose, alcuni sistemi usano il kernel Linux ma nessuna area utente GNU. Per un esempio ampiamente usato di ciò, prendi in considerazione il sistema operativo Android , che è fondamentalmente il kernel Linux accoppiato con un'area utente personalizzata.

Questo è importante perché confonde in modo significativo la linea tra GNU, Linux e i vari Unix ( c'è solo un UNIX , ma ci sono molti Unix e ancora più sistemi operativi simili a Unix ). Quando chiedi di Linux, molto spesso chiedi del sistema GNU / Linux. Ma considera Debian GNU / kFreeBSD , che esegue un'area utente GNU sopra il kernel di FreeBSD, non usando affatto Linux. O ad esempio Solaris, su cui è possibile installare facilmente vari pacchetti GNU tra cui ad esempio coreutils . Penso che Mac OS X sia fornito anche con parti della terra dell'utente GNU. Oppure considera il summenzionato Android.

Alla fine, un sistema GNU utilizzabile potrebbe eseguire codice non GNU e un sistema non GNU potrebbe eseguire codice GNU, ma le utility GNU non contengono codice non GNU.


1
L'ultima volta che ho usato FreeBSD (anni fa) non ha usato molti strumenti GNU, ma un suo set - ad es. BSD make invece di GNU make.
reinierpost,

5
@reinierpost OSX è molto simile: un'installazione semplice contiene principalmente versioni BSD di cose, ma i coreutils GNU e simili sono facilmente disponibili tramite MacPorts e altri. XCode utilizza LLVM, ma anche gcc. È complicato :)
MattDMo

1
@reinierpost make non è poi così male da sostituire. Il compilatore C è un po 'più coinvolto. Almeno FreeBSD 8.0 usa GCC come compilatore predefinito ; in particolare la versione 4.2.1. I "problemi di licenza" riferiti alla prevenzione dell'integrazione delle versioni più recenti nel sistema di base riguardano probabilmente il passaggio da GPL2 + a GPL3 +, ma non ne sono sicuro.
un CVn

3
@ hunter2 Sembra che non fosse necessario, in base ai conteggi dei voti finora. ;) Non ho deciso nemmeno di scrivere una storia completa. Minix ha svolto un ruolo importante come sistema di sviluppo e bootstrap di Linux prima che Linux diventasse self-hosting, ma ha avuto poca influenza, ad esempio, sulla relazione tra Linux, GNU e l'UNIX originale, che è più in linea con ciò di cui si tratta.
un CVn il

3
@ hunter2 Se dovessimo percorrere quella strada, allora è assolutamente vero che UNIX non è certo arrivato prima. Ma ai fini della risposta alla domanda, questa sembrava un'approssimazione abbastanza buona. La risposta a frase singola sarebbe stata qualcosa del tipo "praticamente tutto UNIX tranne TeX e X che trovi su un sistema Linux è stato riscritto come parte di GNU" ma penso che il contesto aggiuntivo aggiunga valore, anche se ha reso la risposta significativamente più lunga di assolutamente necessario - e la risposta è ancora molto lontana dalla copertura di ogni dettaglio.
un CVn il
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.