Czy wszystkie polecenia Uniksa zostały przepisane w Linuksie?

Odpowiedzi:

93

Wygląda na to, że mylisz dwie bardzo różne części systemu operacyjnego. Jest to zrozumiałe, ponieważ często są wymieniane zamiennie, ale jest to technicznie niepoprawne, więc twoje pytanie opiera się na błędnym założeniu. Aby w pełni zbadać i, mam nadzieję, odpowiedzieć na pytanie, które prawdopodobnie chcesz zadać, potrzebna jest krótka lekcja historii.

Po pierwsze był UNIX. Zasadniczo w tamtych czasach UNIX oznaczał system AT&T UNIX , który był pierwszy. Ale AT&T UNIX stał się niewolny, więc Richard Stallman rozpoczął projekt GNU, aby napisać system uniksowy, który był darmowy . Stąd nazwa Gnu to Not Unix , w skrócie GNU. Plany dotyczące GNU zostały upublicznione w 1983 r., A ich rozwój rozpoczął się w 1984 r .

Na początku lat 90. GNU ponownie wdrożyło większość narzędzi systemu UNIX od zera. Wikipedia wymienia kilka składników całego systemu, które nie zostały przepisane (TeX, X Window System i mikrojądro Mach są wymienione jako przykłady składników, które nie zostały przepisane), ale przede wszystkim narzędzia użytkownika zostały przepisane od nowa, aby spełnić celem jest uniknięcie ponownego użycia dowolnego kodu AT&T (a raczej niewolnego), a także rozszerzenie ich możliwości poprzez dodanie opcji wiersza poleceń. W rezultacie narzędzia GNU były regularnie silniejsze niż narzędzia, z których czerpali swoją oryginalną inspirację.

W tym momencie, GNU wciąż brakuje jednego istotną składową: to jądro systemu operacyjnego , który pozwoliłby wszystko, aby pracować razem na rzeczywisty komputer nie działa inny system operacyjny. W 1991 roku Linus Torvalds rozpoczął pracę nad projektem zabawek, który ostatecznie stał się znany jako Linux. Zasadniczo był to projekt szkolny, aby dowiedzieć się o nowym wówczas 32-bitowym procesorze Intel 80386 , i zaczął się niezwykle prosty, ale w końcu zaczął przekształcać się w faktycznie użyteczne jądro systemu operacyjnego. Ale nie miało oprogramowania użytkownika; Linux sam w sobie nie zapewnia powłoki, nie ma możliwości uruchomienia systemu poza inicjacją jądra, edytora tekstu, interfejsu graficznego, niczego. Jądro jest jak silnik samochodu; niezbędne do stworzenia użytecznego samochodu, ale samo w sobie bezużyteczne (do użytecznego samochodu potrzebujesz takich rzeczy, jak koła, skrzynia biegów, układ kierowniczy, gdzieś, gdzie kierowca może usiąść, zbiornik paliwa lub inny zapas energii itp.). Jądro Linux zostało ostatecznie rozpowszechnione na Powszechnej Licencji Publicznej GNU, tak samo jak oprogramowanie GNU .

Więc ludzie zaczęli parować te dwa. Otrzymasz unikalną przestrzeń użytkownika wraz z jądrem opartym na pomysłach z Uniksa (w tym bliskie podobieństwo do POSIX ), wraz z kodem źródłowym, który możesz zhakować, ile chcesz, i nic nie kosztowało . Zwłaszcza zanim dystrybucje Linuksa stały się powszechne, zajęło trochę majsterkowania, aby wszystko zaczęło działać, ale zostało ukończone na tyle, aby w jakiś sposób nadawało się do użytku przez tych, którzy byli gotowi poświęcić na to trochę czasu.

Obecnie GNU zapewnia własne jądro. Prawdopodobnie o tym nie słyszałeś, ale nazywa się to GNU Hurd . Ale Hurda nie było na początku lat 90., kiedy Linux zaczął zyskiwać popularność wśród hobbystów i majsterkowiczów, więc to właśnie połączenie jądra Linuksa z obszarem użytkownika opartym głównie na GNU zwróciło największą uwagę twórców.

Ponadto w dzisiejszych czasach wiele systemów uniksowych instaluje lub pozwala administratorowi łatwo instalować części obszaru użytkownika GNU. Możesz zobaczyć takie rzeczy jak GNU bash, kolekcja kompilatorów GNU, biblioteka GNU C (waniliowa lub łatana) i tak dalej, w systemie innym niż GNU.

Co gorsza, niektóre systemy używają jądra Linuksa, ale w ogóle nie korzystają z GNU. Jako powszechnie używany przykład, rozważ system operacyjny Android , który jest w zasadzie jądrem Linux połączonym z niestandardowym obszarem użytkownika.

Jest to ważne, ponieważ znacznie zaciera granicę między GNU, Linuksem i różnymi Uniksami ( istnieje tylko jeden UNIX , ale istnieje wiele Uniksów i jeszcze więcej uniksowych systemów operacyjnych ). Kiedy pytasz o Linuksa, naprawdę bardzo często pytasz o system GNU / Linux. Ale rozważ Debian GNU / kFreeBSD , który uruchamia przestrzeń użytkownika GNU na jądrze FreeBSD, w ogóle nie używając Linuksa. Lub na przykład Solaris, na którym można łatwo zainstalować różne pakiety GNU, w tym np . Coreutils . Myślę, że Mac OS X jest również dostarczany z częścią obszaru użytkownika GNU. Lub rozważ wyżej wymienionego Androida.

Ostatecznie użyteczny system GNU może uruchamiać kod inny niż GNU, a system inny niż GNU może uruchamiać kod GNU, ale narzędzia GNU nie zawierają kodu innego niż GNU.

CVn
źródło
1
Ostatnim razem, gdy korzystałem z FreeBSD (lata temu), nie używał wielu narzędzi GNU, ale własny zestaw - np. Marka BSD zamiast marki GNU.
reinierpost
5
@reinierpost OSX jest bardzo podobny - zwykła instalacja zawiera głównie wersje BSD, ale jądra GNU i tym podobne są łatwo dostępne za pośrednictwem MacPorts i innych. XCode wykorzystuje LLVM, ale także gcc. To skomplikowane :)
MattDMo
1
@reinierpost make nie jest taki zły do ​​zastąpienia. Kompilator C jest trochę bardziej zaangażowany. Przynajmniej FreeBSD 8.0 używa GCC jako domyślnego kompilatora ; konkretnie wersja 4.2.1. „Problemy z licencjonowaniem” związane z zapobieganiem integracji nowszych wersji z systemem podstawowym dotyczą prawdopodobnie przejścia z GPL2 + na GPL3 +, ale nie byłem tego pewien.
CVn
3
@ hunter2 Wygląda na to, że nie było to konieczne, na podstawie dotychczasowych głosów. ;) Nie zamierzałem też pisać pełnej historii. Minix pełnił ważną rolę jako programista i system ładujący Linuksa, zanim Linux stał się samodzielnym hostem, ale miał niewielki wpływ na np. Relacje między Linuksem, GNU i oryginalnym UNIXem, co bardziej odpowiada temu, o co chodzi.
CVn
3
@ hunter2 Gdybyśmy poszli tą drogą, to absolutnie prawdą jest, że UNIX na pewno też nie był na pierwszym miejscu. Ale w celu udzielenia odpowiedzi na to pytanie wydawało się to dość dobrym przybliżeniem. Odpowiedź w jednym zdaniu byłaby mniej więcej taka: „zasadniczo wszystko w systemie UNIX oprócz TeX i X, które można znaleźć w systemie Linux, zostało przepisane jako część GNU”, ale myślę, że dodatkowy kontekst dodaje wartości, nawet jeśli spowodowałby, że odpowiedź była znacznie dłuższa niż absolutnie konieczne - a odpowiedź wciąż nie obejmuje wszystkich szczegółów.
CVn