Γιατί το σύστημα του Linux είναι ακόμα διχαστικό μετά από όλα αυτά τα χρόνια

Το systemd είναι 10 ετών, αλλά τα συναισθήματα για αυτό στην κοινότητα του Linux δεν έχουν χαλαρώσει—είναι τόσο διχαστικό τώρα όσο ποτέ. Αν και χρησιμοποιείται από πολλές μεγάλες διανομές Linux, η σκληροπυρηνική αντίθεση δεν έχει υποχωρήσει.

Η ακολουθία εκκίνησης του Linux

Όταν ενεργοποιείτε τον υπολογιστή σας, το υλικό εκκινείται και στη συνέχεια (ανάλογα με τον τύπο του τομέας εκκίνησης ο υπολογιστής σας χρησιμοποιεί) είτε το κύρια εγγραφή εκκίνησης (MBR) εκτελεί ή το Ενοποιημένη επεκτάσιμη διεπαφή υλικολογισμικού (UEFI) τρέχει. Η τελευταία ενέργεια και των δύο είναι να πυροδοτήσουν το Πυρήνας Linux.

Ο πυρήνας φορτώνεται στη μνήμη, αποσυμπιέζεται και αρχικοποιείται. ΕΝΑ προσωρινό σύστημα αρχείων δημιουργείται στη μνήμη RAM, συνήθως από ένα βοηθητικό πρόγραμμα που ονομάζεται initramfs ή initrd. Αυτό επιτρέπει τον προσδιορισμό και τη φόρτωση των απαιτούμενων προγραμμάτων οδήγησης. Αυτό, με τη σειρά του, επιτρέπει στο σύστημα αρχείων χώρου χρήστη να φορτώσει και να προετοιμαστεί για τη δημιουργία του περιβάλλοντος χώρου χρήστη.

Η δημιουργία του περιβάλλοντος χώρου χρήστη γίνεται από τη διεργασία init, η οποία είναι η πρώτη διεργασία που ξεκινά από τον πυρήνα σε ένα χώρο χρήστη. Εχει ένα αναγνωριστικό διαδικασίας (PID) του 1. Όλες οι άλλες διεργασίες είναι είτε άμεσα είτε έμμεσα παιδιά της διαδικασίας έναρξης.

Πριν από το systemd, η κύρια προεπιλογή για τη διαδικασία εκκίνησης ήταν μια εκ νέου επεξεργασία του Unix System V init. Υπήρχαν και άλλες διαθέσιμες επιλογές, αλλά το System V init ήταν η τυπική επιλογή στα περισσότερα μηΔιανομή λογισμικού Berkeley Κατανομές που προέρχονται από (BSD). Επειδή προήλθε απευθείας από το System V Unix – τον πνευματικό πρόγονο του Linux – πολλοί άνθρωποι το θεωρούν ως «τον επίσημο τρόπο» να το κάνουν.

Η διαδικασία έναρξης ξεκινάει όλα τα δαίμονες και υπηρεσίες που απαιτούνται για να λειτουργήσει το λειτουργικό σύστημα με ουσιαστικό, διαδραστικό τρόπο. Αυτοί οι δαίμονες χειρίζονται πράγματα όπως η στοίβα δικτύωσης, η ενεργοποίηση άλλου υλικού μέσα στον υπολογιστή σας και η παροχή μιας οθόνης εκκίνησης.

Πολλές από αυτές τις διεργασίες παρασκηνίου συνεχίζουν να εκτελούνται μετά την εκκίνησή τους. Κάνουν πράγματα όπως καταγραφή πληροφοριών συμβάντων, παρακολούθηση για αλλαγές υλικού καθώς εισάγετε ή αφαιρείτε συσκευές και διαχειρίζονται τις συνδέσεις χρηστών. Όπως ήταν αναμενόμενο, το σύστημα init περιλαμβάνει επίσης δυνατότητες διαχείρισης υπηρεσιών.

Μπορούμε να χρησιμοποιήσουμε ΥΣΤΕΡΟΓΡΑΦΟ για να δείτε τη διαδικασία που έχει PID 1. Θα χρησιμοποιήσουμε τις επιλογές f (καταχώριση πλήρους μορφής) και p (PID):

ps -fp 1

Βλέπουμε ότι η διαδικασία με το PID 1 είναι συστηματοποιημένη. Η εκτέλεση της ίδιας εντολής στο Manjaro Linux έδωσε διαφορετικό αποτέλεσμα. Η διαδικασία με το PID 1 αναγνωρίστηκε ως /sbin/init. Μια γρήγορη ματιά σε αυτό το αρχείο δείχνει ότι είναι ένας συμβολικός σύνδεσμος με το systemd:

ps -fp 1
ls -hl /sbin/init

Χρησιμοποιώντας την επιλογή ppid (γονικό αναγνωριστικό διεργασίας) με το ps, μπορούμε να δούμε ποιες διεργασίες έχουν ξεκινήσει απευθείας από το systemd:

ps -f --ppid 1

Είναι αρκετά μεγάλη λίστα, όπως μπορείτε να δείτε στην παρακάτω εικόνα.

Οι Εναλλακτικές

Αρκετά έργα προσπάθησαν να δημιουργήσουν μια εναλλακτική στην παραδοσιακή αρχή System V. Ένα από τα κύρια προβλήματα είναι, με το System V init, όλες οι διεργασίες ξεκινούν σειριακά, η μία μετά την άλλη. Για να βελτιωθεί η αποτελεσματικότητα της ακολουθίας εκκίνησης, πολλά εναλλακτικά έργα χρησιμοποιούν παραλληλισμό για να ξεκινήσουν διαδικασίες ταυτόχρονα και ασύγχρονα.

  Πώς να εξάγετε αρχεία από ένα αρχείο .tar.gz ή .tar.bz2 στο Linux

Ακολουθούν ορισμένες πληροφορίες για μερικά από αυτά:

Νεόπλουτος: Αναπτύχθηκε από Κανονικός, χρησιμοποιήθηκε στο Ubuntu 9.10, κόκκινο καπέλο, Red Hat Enterprise Linux (RHEL) 6, CentOS 6, και Μαλακό καπέλλο 9.
Τρέξτο: Τρέχει FreeBSD και άλλα παράγωγα BSD, macOS και Σολάρις, καθώς και συστήματα Linux. Είναι επίσης το προεπιλεγμένο σύστημα έναρξης Κενός Linux.
s6-linux-init: Αυτή η αντικατάσταση για το σύστημα V init σχεδιάστηκε για να ακολουθεί πιστά το Φιλοσοφία Unix, το οποίο συχνά περιορίζεται στο δάγκωμα του ήχου «κάντε ένα πράγμα και κάντε το καλά».

Υπάρχουν πολλά άλλα με διαφορετική λειτουργικότητα και σχεδιασμό. Ωστόσο, κανένας από αυτούς δημιούργησε την οργή έκανε το systemd.

Ο συστηματικός τρόπος

Το systemd κυκλοφόρησε το 2010 και χρησιμοποιήθηκε στο Fedora το 2011. Από τότε, έχει υιοθετηθεί από πολλές διανομές. Αναπτύχθηκε από Lennart Poettering και Κέι Σίβερς, δύο μηχανικοί λογισμικού στο RedHat.

systemd είναι πολύ περισσότερο από μια αντικατάσταση init. Αντίθετα, είναι μια σουίτα περίπου 70 δυαδικών αρχείων που χειρίζονται την προετοιμασία του συστήματος, τους δαίμονες και τις υπηρεσίες, την καταγραφή και το ημερολόγιο, και πολλές άλλες λειτουργίες που είχαν ήδη χειριστεί από αποκλειστικές μονάδες στο Linux. Το μεγαλύτερο μέρος αυτών δεν έχει καμία σχέση με την προετοιμασία του συστήματος.

Μερικοί από τους δαίμονες που παρέχονται από το systemd είναι:

systemd-udevd: Διαχειρίζεται φυσικές συσκευές.
systemd-logind: Διαχειρίζεται τις συνδέσεις χρηστών.
systemd-resolved: Παρέχει ανάλυση ονόματος δικτύου σε τοπικές εφαρμογές.
systemd-networkd: Διαχειρίζεται και εντοπίζει συσκευές δικτύου και διαχειρίζεται διαμορφώσεις δικτύου.
systemd-tmpfiles: Δημιουργεί, διαγράφει και καθαρίζει πτητικά και προσωρινά αρχεία και καταλόγους.
systemd-localed: Διαχειρίζεται τις ρυθμίσεις τοπικών ρυθμίσεων συστήματος.
systemd-machined: Ανιχνεύει και παρακολουθεί εικονικές μηχανές και κοντέινερ.
systemd-nspawn: Μπορεί να ξεκινήσει μια εντολή ή άλλη διεργασία σε ένα ελαφρύ κοντέινερ χώρου ονομάτων, παρέχοντας μια λειτουργικότητα παρόμοια με chroot.

Και αυτή είναι μόνο η κορυφή του παγόβουνου, που είναι και η ουσία του θέματος. Το systemd έχει ξεπεράσει εδώ και καιρό ό,τι απαιτείται από ένα σύστημα init, το οποίο, σύμφωνα με τους αντιπάλους του, είναι ο ίδιος ο ορισμός του scope creep.

“Είναι πολύ μεγάλο. Κάνει πάρα πολλά.”

Οι αντίπαλοι του systemd επισημαίνουν τον μεγάλο, περίεργο συνδυασμό λειτουργικότητας που περιλαμβάνει. Όλες αυτές οι δυνατότητες υπήρχαν ήδη στο Linux και, ίσως, κάποιες από αυτές χρειάζονταν μια ανανέωση ή μια νέα προσέγγιση. Ωστόσο, η δέσμη όλων αυτών των λειτουργιών σε αυτό που υποτίθεται ότι είναι ένα αρχικό σύστημα είναι αρχιτεκτονικά αινιγματικό.

Το systemd έχει ονομαστεί ένα μόνο σημείο αστοχίας για πάρα πολλές κρίσιμες λειτουργίες, αλλά αυτό δεν φαίνεται να είναι δικαιολογημένο. Ομολογουμένως, ρίχνει το Φιλοσοφία Unix της δημιουργίας μικρών εργαλείων που συνεργάζονται αντί για μεγάλα κομμάτια λογισμικού που κάνουν τα πάντα έξω από το παράθυρο. Αν και το systemd δεν είναι αυστηρά μονολιθικό (αποτελείται από πολλά δυαδικά αρχεία και όχι από ένα τεράστιο), περιλαμβάνει πολλά ανόμοια εργαλεία διαχείρισης και εντολές κάτω από μια ομπρέλα.

Αν και μπορεί να μην είναι μονολιθικό, είναι μεγάλο. Για να έχουμε μια ιδέα της κλίμακας, μετρήσαμε τις γραμμές του κειμένου στη βάση κώδικα του πυρήνα 5.6.15 και στον κύριο κλάδο systemd του αποθετηρίου GitHub.

Αυτή ήταν μια σχετικά ωμή μέτρηση. Μετρούσε γραμμές κειμένου, όχι μόνο γραμμές κώδικα. Έτσι, αυτό περιελάμβανε σχόλια, τεκμηρίωση και οτιδήποτε άλλο. Ωστόσο, ήταν μια σύγκριση που μοιάζει με παρόμοια και μας έδωσε ένα απλό κριτήριο:

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

Ο πυρήνας είχε σχεδόν 28 εκατομμύρια (27.784.340, για την ακρίβεια) γραμμές κειμένου. Αντίθετα, το systemd είχε 1.349.969, ή σχεδόν 1,4 εκατομμύρια. Με τη μέτρηση ευτυχισμένη, το systemd βγαίνει περίπου στο 5 τοις εκατό του μεγέθους του πυρήνα, κάτι που είναι τρελό!

  Τα 4 καλύτερα συστήματα αρχείων SSD στο Linux

Ως άλλη σύγκριση, ο αριθμός γραμμών για μια σύγχρονη υλοποίηση του System V init για τη διανομή Arch Linux έφτασε στις 1.721 γραμμές.

Το Poettering ξεκάθαρα δεν σέβεται το Ινστιτούτο Ηλεκτρολόγων και Ηλεκτρονικών Μηχανικών (IEEE) Computer Society, ούτε το Φορητή διεπαφή λειτουργικού συστήματος Πρότυπο (POSIX). Στην πραγματικότητα, αυτός ενθάρρυνε τους προγραμματιστές να αγνοήσουν το POSIX:

«Λοιπόν, αποκτήστε ένα αντίγραφο του The Linux Programming Interface, αγνοήστε όλα όσα λέει σχετικά με τη συμβατότητα POSIX και χάσετε το εκπληκτικό λογισμικό Linux σας. Είναι αρκετά ανακουφιστικό!»

Υπήρξαν κατηγορίες ότι το systemd είναι ένα έργο της Red Hat που ωφελεί μόνο τη Red Hat, ωστόσο τροφοδοτείται αναγκαστικά στον ευρύτερο κόσμο του Linux. Ναι, γεννήθηκε μέσα στο Red Hat και διέπεται και κατευθύνεται από αυτό. Ωστόσο, από τους 1.321 συνεισφέροντες, μόνο ένα κλάσμα εργάζεται για τη Red Hat.

Λοιπόν, ποια είναι τα οφέλη του Red Hat;

Τζιμ Γουάιτχερστ, ο πρόεδρος της IBM, ο οποίος ήταν κάποτε ο Διευθύνων Σύμβουλος της Red Hat είπε:

«Η Red Hat εξέτασε πολλές διαθέσιμες επιλογές και χρησιμοποίησε ακόμη και το Upstart της Canonical για το Red Hat Enterprise Linux 6. Τελικά, επιλέξαμε το systemd επειδή είναι η καλύτερη αρχιτεκτονική που παρέχει την επεκτασιμότητα, την απλότητα, την επεκτασιμότητα και τις καλά καθορισμένες διεπαφές για την αντιμετώπιση των προβλημάτων που βλέπουμε σήμερα και να προβλέψουμε στο μέλλον».

Ο Whitehurst είπε επίσης ότι είδαν οφέλη και στα ενσωματωμένα συστήματα. Η Red Hat συνεργάζεται με «τους μεγαλύτερους ενσωματωμένους προμηθευτές στον κόσμο, ιδιαίτερα στον κλάδο των τηλεπικοινωνιών και της αυτοκινητοβιομηχανίας όπου η σταθερότητα και η αξιοπιστία είναι το νούμερο ένα μέλημα».

Αυτοί φαίνονται σαν τεχνικά ορθοί λόγοι. Μπορείτε να κατανοήσετε την ανάγκη της εταιρείας για αξιοπιστία και δεν είναι παράλογο η Red Hat να προσέχει τα δικά της συμφέροντα, αλλά θα πρέπει όλοι οι άλλοι να ακολουθήσουν το παράδειγμά τους;

Πίνετε το σύστημα Kool-Aid;

Ορισμένοι αντίπαλοι του systemd λένε ότι οι διανομές και οι άνθρωποι απλώς ακολουθούν τυφλά το παράδειγμα της Red Hat και το υιοθετούν.

Ωστόσο, ακριβώς όπως η φράση, «πίνοντας το Kool-Aid», δεν είναι πολύ σωστή. Δημιουργήθηκε το 1978 μετά Ηγέτης της λατρείας, Τζιμ Τζόουνς, ανάγκασε τους περισσότερους από 900 οπαδούς του να αυτοκτονήσουν πίνοντας ένα υγρό με γεύση σταφυλιού με κυάνιο, η φράση λανθασμένα ντροπιάζει την Kool-Aid. Η ομάδα έπινε στην πραγματικότητα το Flavour Aid, αλλά η Kool-Aid έχει πιαστεί από αυτό το πινέλο από τότε.

Επιπλέον, οι διανομές Linux δεν ακολουθούν τυφλά τη Red Hat. υιοθετούν το σύστημα μετά από σοβαρή συζήτηση. Η συζήτηση μαίνεται για το Debian λίστες αλληλογραφίας για μεγάλο χρονικό διάστημα. Ωστόσο, το 2014, η κοινότητα ψήφισε να υιοθετήσει το systemd ως το προεπιλεγμένο σύστημα έναρξης, αλλά και για την υποστήριξη εναλλακτικών.

Το Debian είναι ένα σημαντικό παράδειγμα επειδή δεν προέρχεται από το RedHat, το Fedora ή το CentOS. Δεν υπάρχει κανένα σύστημα διεύθυνσης που εφαρμόζεται στο Debian από την Red Hat. Και το Debian, όπως το PID 1, έχει πολλούς απογόνους, συμπεριλαμβανομένου του Ubuntu και των πολλών spin-off του.

  Πώς να δημιουργήσετε αντίγραφα ασφαλείας ενός ιστολογίου Ghost στο Linux

Οι αποφάσεις που λαμβάνονται από την κοινότητα του Debian είναι εκτενείς. Επίσης, συζητούνται έντονα και ψηφίζονται για τη χρήση τους τη μέθοδο ψηφοφορίας Condorcet. Ούτε η κοινότητα κάνει τέτοιες επιλογές επιπόλαια.

Ψήφισε ξανά τον Δεκέμβριο του 2019 να συνεχίσει να επικεντρώνεται και να συνεχίσει να διερευνά εναλλακτικές. Το αντίθετο του να ακολουθείς τυφλά, αυτό είναι στην πραγματικότητα ένα σχολικό παράδειγμα δημοκρατίας και ελευθερίας επιλογής στην εργασία.

Οι περιορισμοί της επιλογής

Γενικά δεν μπορείτε να επιλέξετε εάν θα χρησιμοποιήσετε το systemd με μια συγκεκριμένη διανομή Linux. Αντίθετα, οι ίδιες οι διανομές επιλέγουν αν θέλουν να το χρησιμοποιήσουν και εσείς μπορείτε να επιλέξετε ποια διανομή Linux προτιμάτε. Ίσως μια διανομή Linux που αγαπάτε να έχει αλλάξει στο systemd. Όπως ένας αγαπημένος μουσικός που αλλάζει είδη, αυτό μπορεί να είναι ενοχλητικό.

Άτομα που χρησιμοποιούν Debian, Μαλακό καπέλλο, CentOS, Ubuntu, Αψίδα, Solus, και openSUSE, και αντιτίθενται στην υιοθέτηση του systemd, μπορεί να αισθάνονται ότι αποκλείονται από τη χρήση της διανομής της επιλογής τους. Εάν αισθάνονται αρκετά έντονα για οποιαδήποτε από τις αρχιτεκτονικές επιλογές, το ερπυσμό του εύρους ή την αδιαφορία για το POSIX, μπορεί να θεωρήσουν αβάσιμο να συνεχίσουν να χρησιμοποιούν αυτήν τη διανομή.

Υπάρχει βέβαια ένα φάσμα. Στο ένα άκρο, έχετε τους ανθρώπους που δεν καταλαβαίνουν τα ζητήματα (ή καν τους νοιάζουν), και στο άλλο, έχετε τους παθιασμένους αντιρρησίες. Κάπου στη μέση βρίσκονται αυτοί που δεν τους αρέσουν οι αλλαγές, αλλά δεν τους ενοχλεί αρκετά για να πηδήξουν. Τι γίνεται όμως με τους πρόσφυγες διανομής, οι οποίοι δεν μπορούν να παραμείνουν στην επιλεγμένη κατανομή λόγω των προτιμήσεων ή των αρχών τους;

Δυστυχώς, δεν είναι τόσο εύκολο όσο απλά να εγκαταστήσετε όποιο σύστημα init θέλετε. Δεν έχουν όλοι την τεχνική ικανότητα να το κάνουν αυτό, μην λάβετε υπόψη τις δυσκολίες που προκύπτουν όταν εφαρμογές ή περιβάλλοντα επιφάνειας εργασίας, όπως το GNOME, έχουν εξαρτήσεις από systemd.

Τι γίνεται με τη μετάβαση σε άλλη διανομή; Κάποιοι σαν Devuan, εμφανίστηκαν ως μη συστημικά forks διανομών (στην περίπτωση αυτή, Debian) που είχαν υιοθετήσει το systemd. Η χρήση του Devuan θα πρέπει να είναι παρόμοια με τη μητρική διανομή, αλλά αυτό δεν ισχύει για όλα τα μη συστημικά πιρούνια. Για παράδειγμα, εάν αφήσετε το Fedora και μετακομίσετε σε ΑντιΧ, Gentoo, ή Slackware, θα ζήσετε μια πολύ διαφορετική εμπειρία.

Δεν πάει πουθενά

Μου αρέσουν μερικά από αυτά που κάνει το systemd (απλοί και τυποποιημένοι μηχανισμοί ελέγχου για διαδικασίες). Δεν καταλαβαίνω το σκεπτικό για ορισμένα από αυτά που κάνει (δυαδικά αρχεία καταγραφής). Δεν μου αρέσουν επίσης ορισμένα από αυτά που κάνει (ανανέωση οικιακών φακέλων — ποιος το ζήτησε;).

Διανομές όπως το Debian κάνουν το έξυπνο πράγμα και διερευνούν εναλλακτικές λύσεις για να διατηρήσουν τις επιλογές του ανοιχτές. Ωστόσο, το systemd είναι σε αυτό για μεγάλο χρονικό διάστημα.

Εάν διαχειρίζεστε μηχανές Linux για άλλους, μάθετε το systemd όσο καλά γνωρίζετε το System V init. Με αυτόν τον τρόπο, όποια και αν συναντήσετε, θα είστε σε θέση να εκτελέσετε τα καθήκοντά σας.

Απλώς χρησιμοποιείτε Linux στο σπίτι; Αν ναι, επιλέξτε μια διανομή που να καλύπτει τις τεχνικές σας ανάγκες και να συμπληρώνει την ιδεολογία σας στο Linux.