Dlaczego systemd Linuksa po tylu latach wciąż dzieli podział

systemd ma 10 lat, ale uczucia na ten temat w społeczności Linuksa nie złagodniały – teraz dzieli się tak bardzo, jak zawsze. Chociaż jest używany przez wiele głównych dystrybucji Linuksa, hardkorowy sprzeciw nie ustąpił.

Sekwencja rozruchowa Linuksa

Po włączeniu komputera sprzęt uruchamia się, a następnie (zgodnie z typem sektor rozruchowy Twój komputer używa) główny rekord rozruchowy (MBR) wykonuje lub Zunifikowany rozszerzalny interfejs oprogramowania układowego (UEFI) działa. Ostatnią czynnością obu tych operacji jest uruchomienie Jądro Linux.

Jądro jest ładowane do pamięci, dekompresuje się i inicjalizuje. ZA tymczasowy system plików jest tworzony w pamięci RAM, zwykle przez narzędzie o nazwie initramfs lub initrd. Umożliwia to określenie i załadowanie wymaganych sterowników. To z kolei umożliwia systemowi plików przestrzeni użytkownika załadowanie i przygotowanie do ustanowienia środowiska przestrzeni użytkownika.

Tworzenie środowiska przestrzeni użytkownika jest obsługiwane przez proces init, który jest pierwszym procesem uruchamianym przez jądro w przestrzeni użytkownika. To ma identyfikator procesu (PID) z 1. Wszystkie inne procesy są bezpośrednimi lub pośrednimi elementami potomnymi procesu inicjującego.

Przed wprowadzeniem systemd głównym domyślnym elementem procesu init było przerobienie pliku Init Unix System V.. Były dostępne inne opcje, ale inicjalizacja Systemu V była standardową opcją w większościDystrybucja oprogramowania Berkeley (BSD) dystrybucje pochodne. Ponieważ pochodzi on bezpośrednio od Uniksa System V – duchowego przodka Linuksa – wielu ludzi uważa go za „oficjalny sposób” wykonania init.

Proces init uruchamia wszystkie pliki demony oraz usługi wymagane do tego, aby system operacyjny działał w znaczący, interaktywny sposób. Te demony obsługują takie rzeczy, jak stos sieciowy, włączają inny sprzęt wewnątrz komputera i zapewniają ekran startowy.

Wiele z tych procesów w tle nadal działa po ich uruchomieniu. Robią takie rzeczy, jak rejestrowanie informacji o zdarzeniach, obserwowanie zmian sprzętu podczas wkładania lub wyjmowania urządzeń oraz zarządzanie logowaniami użytkowników. Nic dziwnego, że system init zawiera również funkcje do zarządzania usługami.

Możemy użyć ps aby zobaczyć proces, który ma PID 1. Użyjemy opcji f (pełny format) i p (PID):

ps -fp 1

ps -fp 1 w oknie terminala.

Widzimy, że proces z PID 1 to systemd. Uruchomienie tego samego polecenia w systemie Manjaro Linux dało inny wynik. Proces z PID 1 został zidentyfikowany jako / sbin / init. Szybkie spojrzenie na ten plik pokazuje, że jest to dowiązanie symboliczne do systemd:

ps -fp 1
ls -hl /sbin/init

ps -fp 1 w oknie terminala.

Używając opcji ppid (identyfikator procesu nadrzędnego) w ps, możemy zobaczyć, które procesy zostały uruchomione bezpośrednio przez systemd:

ps -f --ppid 1

ps -f --ppid 1 w oknie terminala.

To dość długa lista, jak widać na poniższym obrazku.

ps -f --ppid 1 w oknie terminala.

Alternatywy

W kilku projektach próbowano stworzyć alternatywę dla tradycyjnego init Systemu V. Jednym z głównych problemów jest to, że przy inicjalizacji Systemu V wszystkie procesy są uruchamiane szeregowo, jeden po drugim. Aby poprawić wydajność sekwencji rozruchowej, wiele alternatywnych projektów używa równoległości do jednoczesnego i asynchronicznego uruchamiania procesów.

Oto kilka informacji na temat niektórych z nich:

Dorobkiewicz: Opracowany przez Kanoniczny, był używany w Ubuntu 9.10, czerwony kapelusz, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 i Fedora 9.
Uruchom: Działa dalej FreeBSD i inne pochodne BSD, macOS i Solaris, a także systemy Linux. Jest to również domyślny system startowy Unieważnić Linux.
s6-linux-init: Ten zamiennik init Systemu V został zaprojektowany tak, aby ściśle przestrzegać Filozofia Unix, co często sprowadza się do ukąszenia dźwięku „zrób jedną rzecz i zrób to dobrze”.

Istnieje wiele innych, różniących się funkcjonalnością i wyglądem. Jednak żaden z nich stworzył furię systemd zrobił.

Systemowy sposób

systemd został wydany w 2010 roku i był używany w Fedorze w 2011 roku. Od tego czasu został przyjęty przez wiele dystrybucji. Został opracowany przez Lennart Poettering i Kay Sievers, dwóch inżynierów oprogramowania w RedHat.

systemd to znacznie więcej niż zamiana inicjalizacji. Jest to raczej zestaw około 70 plików binarnych, które obsługują inicjalizację systemu, demony i usługi, logowanie i kronikowanie oraz wiele innych funkcji, które były już obsługiwane przez dedykowane moduły w Linuksie. Większość z nich nie ma nic wspólnego z inicjalizacją systemu.

Niektóre z demonów udostępnianych przez systemd to:

systemd-udevd: zarządza urządzeniami fizycznymi.
systemd-logind: zarządza logowaniami użytkowników.
systemd-resolved: Zapewnia rozpoznawanie nazw sieciowych dla aplikacji lokalnych.
systemd-networkd: Zarządza i wykrywa urządzenia sieciowe oraz zarządza konfiguracjami sieci.
systemd-tmpfiles: Tworzy, usuwa i czyści ulotne i tymczasowe pliki i katalogi.
systemd-localed: zarządza ustawieniami regionalnymi systemu.
systemd-machined: wykrywa i monitoruje maszyny wirtualne i kontenery.
systemd-nspawn: Może uruchomić polecenie lub inny proces w lekkim kontenerze przestrzeni nazw, zapewniając funkcjonalność podobną do chroot.

A to tylko wierzchołek góry lodowej, który jest również sednem sprawy. systemd już dawno przewyższył to, czego wymaga system init, co według jego przeciwników jest samą definicją pełzania zakresu.

„Jest za wielkie. To za dużo ”.

Przeciwnicy systemd zwracają uwagę na dużą, osobliwą mieszankę funkcjonalności, które obejmuje. Wszystkie te funkcje istniały już w Linuksie i być może niektóre z nich wymagały odświeżenia lub nowego podejścia. Jednak połączenie całej tej funkcjonalności w tym, co ma być systemem inicjującym, jest zagadkowe architektonicznie.

systemd został nazwany pojedynczym punktem awarii dla zbyt wielu krytycznych funkcji, ale nie wydaje się to być uzasadnione. Trzeba przyznać, że wyrzuca Filozofia Unix tworzenia małych narzędzi, które współpracują, zamiast dużych programów, które robią wszystko przez okno. Chociaż systemd nie jest ściśle monolityczny (składa się z wielu plików binarnych, a nie jednego dużego), zawiera wiele różnych narzędzi i poleceń do zarządzania pod jednym parasolem.

Chociaż może nie być monolityczny, jest duży. Aby zorientować się w skali, policzyliśmy wiersze tekstu w bazie kodu jądra 5.6.15 i gałęzi głównej systemd repozytorium GitHub.

To był względnie surowy miernik. Liczył wiersze tekstu, a nie tylko wiersze kodu. Obejmuje to komentarze, dokumentację i wszystko inne. Było to jednak porównanie podobne do podobnych i dało nam prostą miarę:

( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l

Jądro zawierało prawie 28 milionów (dokładnie 27 784 340) linii tekstu. Z kolei systemd miał 1 349 969, czyli prawie 1,4 miliona. Z naszą miarą szczęśliwego szczęścia systemd zajmuje około 5 procent rozmiaru jądra, co jest szalone!

Jako inne porównanie, liczba linii dla nowoczesnej implementacji init Systemu V dla dystrybucji Arch Linux wyniosła 1721 linii.

Poetting najwyraźniej nie ma szacunku dla Instytut Inżynierii Elektrycznej i Elektroniki (IEEE) Computer Society ani Interfejs przenośnego systemu operacyjnego (POSIX) standard. W rzeczywistości on zachęcał programistów do ignorowania POSIX:

„Więc zdobądź kopię Linux Programming Interface, zignoruj ​​wszystko, co mówi o zgodności z POSIX i zhakuj swoje niesamowite oprogramowanie Linux. To przynosi ulgę! ”

Pojawiły się zarzuty, że systemd jest projektem Red Hata, który przynosi korzyści tylko Red Hat, a mimo to jest zasilany siłą szerszemu światu Linuksa. Tak, narodził się w Red Hat i jest przez niego zarządzany i sterowany. Jednak z 1321 współpracowników tylko ułamek pracuje dla firmy Red Hat.

Więc jakie są korzyści dla Red Hat?

Jim Whitehurst, prezes IBM, który był kiedyś prezes firmy Red Hat powiedział:

„Red Hat rozważył wiele dostępnych opcji, a nawet użył Upstart firmy Canonical dla Red Hat Enterprise Linux 6. Ostatecznie wybraliśmy systemd, ponieważ jest to najlepsza architektura zapewniająca rozszerzalność, prostotę, skalowalność i dobrze zdefiniowane interfejsy umożliwiające rozwiązanie problemów, które widzimy dziś i przewidzieć przyszłość ”.

Whitehurst powiedział również, że dostrzegają korzyści także w systemach wbudowanych. Firma Red Hat współpracuje z „największymi na świecie dostawcami rozwiązań wbudowanych, szczególnie w branży telekomunikacyjnej i motoryzacyjnej, gdzie stabilność i niezawodność są najważniejsze”.

Wydaje się, że są to uzasadnione technicznie powody. Rozumiesz potrzebę firmy w zakresie niezawodności i nie jest nierozsądne, aby Red Hat dbał o własne interesy, ale czy wszyscy inni powinni podążać za tym przykładem?

Picie systemu Kool-Aid?

Niektórzy przeciwnicy systemd mówią, że dystrybucje i ludzie po prostu ślepo podążają za przykładem Red Hata i go przyjmują.

Jednak, podobnie jak wyrażenie „picie Kool-Aid”, nie jest to całkiem poprawne. Ukuty później w 1978 roku przywódca kultu, Jim Jones, zmusił swoich ponad 900 zwolenników do popełnienia samobójstwa poprzez wypicie płynu o smaku winogronowym z dodatkiem cyjanku, fraza ta niepoprawnie zawstydza Kool-Aid. Grupa faktycznie piła Flavor Aid, ale od tamtej pory Kool-Aid był smolony przez ten zarost.

Ponadto dystrybucje Linuksa nie podążają ślepo za Red Hatem; po poważnych naradach przyjmują system. Debata szalała na Debian listy mailingowe przez długi czas. Jednak w 2014 roku społeczność głosowała za przyjęciem systemd jako domyślny system init, ale obsługuje również alternatywy.

Debian jest ważnym przykładem, ponieważ nie pochodzi z RedHata, Fedory ani CentOS. W Debianie nie ma sterowania z Red Hata. Debian, podobnie jak PID 1, ma wielu potomków, w tym Ubuntu i jego liczne rozwiązania uboczne.

Decyzje podjęte przez społeczność Debiana są dalekosiężne. Są również energicznie dyskutowani i głosowali za użyciem metoda głosowania Condorcet. Społeczność też nie dokonuje takich wyborów lekko.

Głosował ponownie w grudniu 2019 roku nadal się na nich skupiać systemd i nadal badać alternatywy. W przeciwieństwie do ślepego naśladowania, jest to w rzeczywistości podręcznikowy przykład demokracji i wolności wyboru w pracy.

Ograniczenia wyboru

Na ogół nie możesz wybrać, czy chcesz używać systemd z określoną dystrybucją Linuksa. Zamiast tego dystrybucje same decydują, czy chcą z niego korzystać, i możesz wybrać preferowaną dystrybucję Linuksa. Być może dystrybucja Linuksa, którą kochasz, przeszła na systemd. Podobnie jak w przypadku ulubionego muzyka, który zmienia gatunek, może to być irytujące.

Osoby używające Debiana, Fedora, CentOS, Ubuntu, Łuk, Solus, i openSUSEi sprzeciwiają się przyjęciu systemd, mogą czuć, że nie mogą korzystać z wybranej przez siebie dystrybucji. Jeśli czują się wystarczająco mocno co do któregokolwiek z wyborów architektonicznych, pełzania zakresu lub lekceważenia POSIX, mogą uznać, że dalsze używanie tej dystrybucji jest nie do utrzymania.

Oczywiście jest spektrum. Z jednej strony masz ludzi, którzy nie rozumieją problemów (a nawet nie dbają o to), az drugiej masz zapalonych przeciwników. Gdzieś pośrodku są ci, którzy nie lubią zmian, ale nie przejmują się tym na tyle, by przeskoczyć statek. Ale co z dystrybucją uchodźców, którzy nie mogą pozostać przy wybranej dystrybucji ze względu na swoje preferencje lub zasady?

Niestety, nie jest to tak łatwe, jak po prostu zainstalowanie dowolnego systemu init, który chcesz. Nie każdy ma taką techniczną możliwość, bez względu na trudności, które pojawiają się, gdy aplikacje lub środowiska graficzne, takie jak GNOME, mają zależności od systemd.

A co z przejściem do innej dystrybucji? Niektórzy, jak Devuan, pojawił się jako niesystemowe rozwidlenia dystrybucji (w tym przypadku Debiana), które przyjęły systemd. Używanie Devuana powinno być podobne do dystrybucji nadrzędnej, ale nie dotyczy to wszystkich rozwidleń niesystemowych. Na przykład, jeśli opuścisz Fedorę i przejdziesz do AntiX, Gentoolub Slackware, będziesz miał zupełnie inne doświadczenie.

Nigdzie nie idzie

Podoba mi się to, co robi systemd (proste i ustandaryzowane mechanizmy kontroli procesów). Nie rozumiem uzasadnienia niektórych z tego, co robi (dzienniki binarne). Nie podoba mi się też część tego, co robi (przebudowa folderów domowych – kto o to prosił?).

Dystrybucje takie jak Debian robią mądre rzeczy i badają alternatywy, aby zachować otwarte opcje. Jednak systemd jest w tym na dłuższą metę.

Jeśli administrujesz maszynami z Linuksem dla innych, naucz się systemd, a także znasz init System V. W ten sposób niezależnie od tego, co napotkasz, będziesz mógł wykonywać swoje obowiązki.

Po prostu używasz Linuksa w domu? Jeśli tak, wybierz dystrybucję, która zarówno spełnia Twoje potrzeby techniczne, jak i uzupełnia ideologię Linuksa.