GNU Hurd — GNU Hurd

GNU Hurd
Hurd-logo.svg
Zrzut ekranu debian-HURD 05.02.2019 17-41-41.png
Deweloper Projekt GNU
Thomas Bushnell
Roland McGrath
Marcus Brinkmann
Neal Walfield
Samuel Thibault
Napisane w Montaż , C
Rodzina systemów operacyjnych Uniksopodobny
Stan pracy Aktualny
Model źródłowy Darmowe oprogramowanie
Pierwsze wydanie 1990 ; 31 lat temu ( 1990 )
Najnowsze wydanie 0.9 / 7 lipca 2019 ; 2 lata temu ( 2019-07-07 )
Platformy IA-32 , i686
Typ jądra Mikrojądro wieloserwerowe
Licencja GPL-2.0-lub-później
Oficjalna strona internetowa www .gnu .org / software / Hurd /

GNU Hurd to wieloserwerowe mikrojądro napisane jako część GNU . Został on w fazie rozwoju od 1990 roku przez Projekt GNU z Free Software Foundation , zaprojektowany jako zamiennik dla Unix jądra i wydany jako wolnego oprogramowania w ramach licencji GNU General Public Licence . Kiedy jądro Linuksa okazało się opłacalnym rozwiązaniem, rozwój GNU Hurd zwolnił, czasami na przemian z zastojem i wznowioną aktywnością i zainteresowaniem.

Projekt Hurda składa się z zestawu protokołów i procesów serwerowych (lub demonów , w terminologii uniksowej ), które działają na mikrojądrze GNU Mach . Hurd ma na celu przewyższyć jądro Uniksa pod względem funkcjonalności, bezpieczeństwa i stabilności, pozostając z nim w dużej mierze zgodnym. Projekt GNU wybrał wieloserwerowe mikrojądro dla systemu operacyjnego, ze względu na dostrzegane zalety w porównaniu z tradycyjną monolityczną architekturą jądra Unixa , co było popierane przez niektórych programistów w latach 80. XX wieku.

W grudniu 1991 roku główny architekt Hurd opisał nazwę jako wzajemnie rekurencyjny akronim :

Czas wyjaśnić znaczenie słowa „Hurd”. „Hurd” oznacza „Hird of Unix-Replacing Daemons”. A następnie „Hird” oznacza „Hurd of Interfaces Representing Depth”. Mamy tutaj, według mojej wiedzy, pierwsze oprogramowanie, które ma nazwę za pomocą pary wzajemnie rekurencyjnych akronimów.

Ponieważ zarówno Hurd i Hirdhomofony angielskiego słowa stada , pełna nazwa GNU Hurd jest również grą słów stado z gnu , co odzwierciedla sposób działania jądra.

Logo nosi nazwę Hurd box i odzwierciedla również architekturę. Logo to wykres, na którym węzły reprezentują serwery jądra Hurd, a skierowane krawędzie to komunikaty IPC .

Historia rozwoju

Richard Stallman założył Projekt GNU we wrześniu 1983 roku w celu stworzenia wolnego systemu operacyjnego GNU . Początkowo zostały napisane komponenty wymagane do rozwoju jądra: edytory , powłoka , kompilator , debugger itp. W 1989 roku powstała GNU GPL i jedynym głównym brakującym komponentem było jądro.

Rozwój Hurda rozpoczął się w 1990 roku po próbie porzucenia jądra w 1986 roku, w oparciu o badania systemu operacyjnego TRIX opracowanego przez profesora Steve'a Warda i jego grupę z Laboratorium Informatyki MIT (LCS). Według Thomasa Bushnella , pierwszego architekta Hurda, ich wczesnym planem było zaadaptowanie jądra 4.4BSD- Lite i z perspektywy czasu: „Jest dla mnie teraz zupełnie oczywiste, że odniosłoby to wspaniały sukces, a świat byłby zupełnie innym miejscem. Dziś." W 1987 roku Richard Stallman zaproponował użycie mikrojądra Mach opracowanego przez Richarda Rashida z Carnegie Mellon University . Prace nad tym zostały opóźnione o trzy lata z powodu niepewności, czy CMU wyda kod Macha na odpowiedniej licencji.

Wraz z wydaniem jądra Linuksa w 1991 roku, głównym użytkownikiem komponentów przestrzeni użytkownika GNU wkrótce stały się systemy operacyjne oparte na jądrze Linuksa ( dystrybucje Linuksa ), co doprowadziło do ukucia terminu GNU/Linux .

Rozwój Hurda postępuje powoli. Pomimo optymistycznych zapowiedzi Stallmana z 2002 roku, przewidujących wydanie GNU/Hurda w tym samym roku, Hurd nadal nie jest uważany za odpowiedni dla środowisk produkcyjnych. Ogólnie rozwój nie spełnił oczekiwań i nadal istnieje znaczna liczba błędów i brakujących funkcji. Spowodowało to, że produkt był gorszy, niż wielu (w tym Stallman) oczekiwało. W 2010 roku, po dwudziestu latach rozwoju, Stallman powiedział, że „nie jest zbyt optymistyczny jeśli chodzi o GNU Hurd. Robi pewne postępy, ale aby być naprawdę lepszym, wymagałoby rozwiązania wielu głębokich problemów”, ale dodał, że „dokończenie go nie ma kluczowego znaczenia dla systemu GNU, ponieważ wolne jądro już istniało ( Linux ), a ukończenie Hurda nie rozwiązałoby głównego problemu wolnego systemu operacyjnego: obsługi urządzeń.

Projekt Debian , między innymi, pracował nad projektem Hurd, którego celem było stworzenie binarnych dystrybucji systemów operacyjnych GNU opartych na Hurdzie dla systemów kompatybilnych z IBM PC .

Po latach stagnacji rozwój ponownie przyspieszył w 2015 i 2016 roku, z czterema wydaniami w ciągu tych dwóch lat.

20 sierpnia 2015 r., podczas Google Summer of Code ogłoszono, że GNU Guix został przeniesiony na GNU Hurd.

Architektura

Ogólna struktura systemów operacyjnych opartych na jądrze monolitycznym, mikrojądrowym i hybrydowym.

W przeciwieństwie do większości jąder uniksopodobnych , Hurd wykorzystuje architekturę serwer-klient , zbudowaną na mikrojądrze, które jest odpowiedzialne za dostarczanie najbardziej podstawowych usług jądra – koordynację dostępu do sprzętu : procesor (poprzez zarządzanie procesami i planowanie ), pamięć RAM (za pośrednictwem zarządzanie pamięcią ) i inne różne urządzenia wejścia/wyjścia (poprzez planowanie I/O ) dla dźwięku, grafiki, pamięci masowej itp. Teoretycznie konstrukcja mikrojądra pozwoliłaby na zbudowanie wszystkich sterowników urządzeń jako serwerów pracujących w przestrzeni użytkownika , ale dzisiaj większość sterowników tego rodzaju nadal znajduje się w przestrzeni jądra GNU Mach .

Według twórców Hurda, główną zaletą projektowania opartego na mikrojądrze jest możliwość rozbudowy systemu: opracowanie nowego modułu nie wymagałoby dogłębnej znajomości reszty jądra, a błąd w jednym module nie spowodowałby awarii całego systemu . Hurd dostarcza koncepcji translatorów , struktury modułów używanych do rozszerzenia funkcjonalności systemu plików.

Od samego początku Hurd był rozwijany do używania GNU Mach jako mikrojądra. Była to techniczna decyzja podjęta przez Richarda Stallmana , który sądził, że przyspieszy pracę poprzez uratowanie dużej jej części. Przyznał, że się mylił. Inne systemy uniksopodobne działające na mikrojądrze Mach to OSF/1 , Lites i MkLinux . macOS i NeXTSTEP używają jąder hybrydowych opartych na Mach.

Inne mikrojądra

Od 2004 r. podjęto różne wysiłki w celu przeniesienia Hurda na bardziej nowoczesne mikrojądra. L4 mikrojądro był pierwszym wyborem w 2004 roku, ale postęp zwolnił do zatrzymania. Niemniej jednak, w 2005 roku deweloper Hurda, Neal Walfield, ukończył wstępną strukturę zarządzania pamięcią dla portu L4/Hurd, a Marcus Brinkmann przeniósł podstawowe części glibc ; mianowicie uruchomienie kodu startowego procesu, umożliwienie uruchamiania programów, a tym samym umożliwienie uruchomienia pierwszych programów użytkownika (trywialnych, takich jak program hello world ) w C.

Od 2005 roku Brinkmann i Walfield rozpoczęli badania nad Coyotos jako nowym jądrem dla HURD. W 2006 roku Brinkmann spotkał się z Jonathanem Shapiro (głównym architektem systemu operacyjnego Coyotos), aby pomóc i omówić wykorzystanie jądra Coyotos dla GNU/Hurd. W dalszej dyskusji programiści HURD zdali sobie sprawę, że Coyotos (jak również inne podobne jądra) nie są odpowiednie dla HURD.

W 2007 roku deweloperzy Hurda Neal Walfield i Marcus Brinkmann przedstawili krytykę architektury Hurda, znaną jako „krytyka”, oraz propozycję, jak można zaprojektować przyszły system, znaną jako „dokument przedstawiający stanowisko”. W 2008 roku Neal Walfield rozpoczął pracę nad mikrojądrem Viengoos jako nowoczesnym jądrem natywnym dla HURD. Od 2009 roku rozwój Viengoos został wstrzymany, ponieważ Walfieldowi brakowało czasu, aby nad nim pracować.

W międzyczasie inni kontynuowali prace nad wariantem Hurda w wersji Mach.

Rozszerzenia Unix

Wiele tradycyjnych koncepcji Uniksa zostało zastąpionych lub rozszerzonych w Hurdzie.

W systemie Unix każdy uruchomiony program ma przypisany identyfikator użytkownika , który zwykle odpowiada użytkownikowi, który rozpoczął proces . To id w dużej mierze dyktuje działania dozwolone dla programu. Żaden proces zewnętrzny nie może zmienić identyfikatora użytkownika uruchomionego programu. Z drugiej strony, proces Hurd działa z zestawem identyfikatorów użytkownika, który może zawierać wiele identyfikatorów, jeden lub żaden. Wystarczająco uprzywilejowany proces może dodawać i usuwać identyfikatory do innego procesu. Na przykład istnieje serwer haseł, który rozda identyfikatory w zamian za poprawne hasło logowania.

Jeśli chodzi o system plików , odpowiedni program może być wyznaczony jako tłumacz dla pojedynczego pliku lub całej hierarchii katalogów. Każdy dostęp do przetłumaczonego pliku lub plików poniżej hierarchii w drugim przypadku jest w rzeczywistości obsługiwany przez program. Na przykład, translator plików może po prostu przekierować operacje odczytu i zapisu do innego pliku, jak dowiązanie symboliczne Unix . Efekt montowania Uniksa uzyskuje się poprzez skonfigurowanie translatora systemu plików (przy użyciu polecenia "settrans"). Tłumacze mogą być również wykorzystywane do świadczenia usług na rzecz użytkownika. Na przykład translator ftpfs umożliwia użytkownikowi hermetyzację zdalnych witryn FTP w katalogu. Następnie do manipulowania plikami w systemie zdalnym można użyć standardowych narzędzi, takich jak ls , cp i rm . Jeszcze potężniejszymi tłumaczami są tacy jak UnionFS , który pozwala użytkownikowi ujednolicić wiele katalogów w jeden; w ten sposób lista zunifikowanego katalogu ujawnia zawartość wszystkich katalogów.

Hurd wymaga programu ładującego zgodnego z multiboot , takiego jak GRUB .

Architektura serwerów

Zgodnie z dokumentacją Debiana istnieją 24 serwery (18 serwerów podstawowych i 6 serwerów systemu plików) o nazwach:

Serwery podstawowe

  • auth ( serwer uwierzytelniania ): Odbiera żądania i hasła od programów i nadaje im identyfikator, który zmienia uprawnienia programu.
  • crash ( crash server): Obsługuje wszystkie błędy krytyczne.
  • eieio (serwer tłumaczeń): TODO (patrz Komputer kupił farmę )
  • exec (serwer wykonawczy): Tłumaczy obraz wykonywalny (obecnie obsługiwane są ELF i a.out ) na możliwy do uruchomienia obraz w pamięci.
  • fifo ( tłumacz FIFO ): implementuje nazwane potoki.
  • new-fifo (nowy serwer FIFO): alternatywny serwer dla nazwanych potoków.
  • firmlink (the firmlink tłumacz): Wbudowy firmlinks - „w połowie drogi między dowiązania symbolicznego i ciężkiej linku ”.
  • fwd (forward server): Przesyła żądania do innych serwerów, używane przez serwery fifo i symlink.
  • hostmux (serwer multipleksera hosta)
  • ifsock (serwer dla interfejsu gniazd): Pomaga w adresach gniazd domeny UNIX.
  • init ( serwer init ): Podstawowe uruchamianie i konfiguracja systemu.
  • magic ( magiczny serwer): Sygnalizuje, że wyszukiwanie nazwy musi zostać rozwiązane wewnętrznie przez proces, gdy wynik dotyczy stanu procesu.
  • null (serwer null): implementuje /dev/null i /dev/zero.
  • pfinet (serwer pfinet): implementuje rodzinę protokołów PF_INET.
  • pflocal (serwer pflocal): Implementuje gniazda domeny UNIX .
  • proc (serwer procesów): Przypisuje PID i zarządza akcjami na poziomie procesu.
  • symlink ( symbolic link translator): Implementuje dowiązania symboliczne dla systemów plików, które ich nie obsługują.
  • termin (serwer terminali): Terminal POSIX .
  • usermux (serwer multipleksera użytkownika): Wywołuje translatory specyficzne dla użytkownika.

Serwery systemu plików

ext2fs
Ext2 tłumacz plików. Otrzymuje bloki dyskowe z mikrojądra i udostępnia aplikacjom pliki i katalogi.
isofs
Tłumacz systemu plików ISO 9660 . Tłumaczy bloki dysku CD lub DVD na pliki i katalogi aplikacji.
nfs
Zobacz Sieciowy system plików .
ufs
Tłumacz systemu plików BSD o tej samej nazwie, UFS .
ftpfs
Tłumacz systemu plików protokołu przesyłania plików.
sklepio
Tłumacz pamięci.

Serwery wspólnie implementują POSIX API , przy czym każdy serwer implementuje część interfejsu. Na przykład, każdy z różnych serwerów systemu plików implementuje wywołania systemu plików. Serwer pamięci masowej będzie działał jako warstwa owijająca, podobnie jak warstwa blokowa systemu Linux. Równowartość VFS z Linuksem jest osiągnięty przez libdiskfs i bibliotek libpager.

Dystrybucje GNU z systemem Hurd

Debian GNU/Hurd z Xfce4 i przeglądarką Midori

Dystrybucje GNU oparte na Hurdzie obejmują:

Zobacz też

Bibliografia

Zewnętrzne linki