Tại sao systemd của Linux vẫn chia rẽ sau ngần ấy năm

Spread the love

systemd đã 10 năm tuổi, nhưng cảm xúc về nó trong cộng đồng Linux vẫn chưa nguôi ngoai — giờ đây nó vẫn gây chia rẽ hơn bao giờ hết. Mặc dù nó được sử dụng bởi nhiều bản phân phối Linux lớn, nhưng phe phản đối mạnh mẽ vẫn không nhượng bộ.

Trình tự khởi động Linux

Khi bạn bật nguồn máy tính của mình, phần cứng khởi động, sau đó (tùy theo loại giày cao cổ máy tính của bạn sử dụng) hoặc bản ghi khởi động chính (MBR) thực thi hoặc Giao diện chương trình cơ sở mở rộng hợp nhất (UEFI) chạy. Hành động cuối cùng của cả hai là kích hoạt nền tảng Linux.

Kernel được tải vào bộ nhớ, tự giải nén và khởi tạo. MỘT hệ thống tệp tạm thời được tạo trong RAM, thường là bởi một tiện ích có tên là initramfs hoặc initrd. Điều này cho phép các trình điều khiển cần thiết được xác định và tải. Đến lượt nó, điều này cho phép hệ thống tệp không gian người dùng tải và chuẩn bị thiết lập môi trường không gian người dùng.

Việc tạo ra môi trường không gian người dùng được xử lý bởi quá trình init, đây là quá trình đầu tiên được khởi chạy bởi hạt nhân trong không gian người dùng. Nó có một xử lý ID (PID) của 1. Tất cả các quy trình khác đều là con trực tiếp hoặc gián tiếp của quy trình init.

Trước systemd, mặc định chính cho quá trình init là làm lại Hệ thống Unix V init. Có sẵn các lựa chọn khác, nhưng System V init là tùy chọn tiêu chuẩn trong hầu hết cácPhân phối phần mềm Berkeley (BSD) bản phân phối dẫn xuất. Bởi vì nó đến trực tiếp từ System V Unix – tổ tiên tinh thần của Linux – nên nhiều người coi nó là “cách chính thức” để thực hiện init.

Quá trình init bắt đầu tất cả daemon và các dịch vụ cần thiết để làm cho hệ điều hành hoạt động theo cách có ý nghĩa và tương tác. Các daemon này xử lý những thứ như ngăn xếp mạng, kích hoạt phần cứng khác bên trong máy tính của bạn và cung cấp màn hình khởi động.

Nhiều quy trình nền này tiếp tục chạy sau khi chúng bắt đầu. Họ thực hiện những việc như ghi thông tin sự kiện, theo dõi các thay đổi phần cứng khi bạn chèn hoặc xóa thiết bị và quản lý thông tin đăng nhập của người dùng. Không có gì ngạc nhiên khi hệ thống init cũng bao gồm các tính năng để quản lý các dịch vụ.

Chúng ta có thể sử dụng ps để xem quy trình có PID 1. Chúng tôi sẽ sử dụng các tùy chọn f (danh sách định dạng đầy đủ) và p (PID):

ps -fp 1

Chúng tôi thấy quá trình với PID 1 là systemd. Chạy cùng một lệnh trên Manjaro Linux cho kết quả khác. Quá trình với PID 1 được xác định là / sbin / init. Nhìn nhanh vào tệp đó cho thấy nó là một liên kết tượng trưng đến systemd:

ps -fp 1
ls -hl /sbin/init

Sử dụng tùy chọn ppid (ID quy trình mẹ) với ps, chúng ta có thể xem quy trình nào đã được khởi chạy trực tiếp bởi systemd:

ps -f --ppid 1

Đó là một danh sách khá dài, như bạn có thể thấy trong hình ảnh bên dưới.

Các lựa chọn thay thế

Một số dự án đã cố gắng tạo ra một giải pháp thay thế cho System V init truyền thống. Một trong những vấn đề chính là, với System V init, tất cả các quy trình đều được bắt đầu nối tiếp nhau. Để cải thiện hiệu quả của trình tự khởi động, nhiều dự án thay thế sử dụng song song để khởi động các quy trình đồng thời và không đồng bộ.

Dưới đây là một số thông tin về một số trong số này:

  Cách chỉnh sửa tệp Máy chủ lưu trữ trên Linux

Khởi động: Được phát triển bởi Canonical, nó đã được sử dụng trong Ubuntu 9.10, Mũ đỏ, Red Hat Enterprise Linux (RHEL) 6, CentOS 6, và Fedora 9.
Runit: Chạy trên FreeBSD và các dẫn xuất BSD khác, macOS, và Solaris, cũng như các hệ thống Linux. Nó cũng là hệ thống init mặc định trên Hư không Hệ điều hành Linux.
s6-linux-init: Sự thay thế này cho System V init được thiết kế để tuân thủ chặt chẽ Triết lý Unix, thường được rút gọn thành phần âm thanh “làm một việc, và làm tốt điều đó.”

Có nhiều chức năng và thiết kế khác. Tuy nhiên, không ai trong số họ tạo ra furor systemd đã làm.

Cách systemd

systemd được phát hành vào năm 2010 và được sử dụng trong Fedora vào năm 2011. Kể từ đó, nó đã được nhiều bản phân phối áp dụng. Nó được phát triển bởi Lennart thi sĩKay Sievers, hai kỹ sư phần mềm tại RedHat.

systemd không chỉ là một sự thay thế init. Thay vào đó, đó là một bộ gồm khoảng 70 mã nhị phân xử lý việc khởi tạo hệ thống, daemon và dịch vụ, ghi nhật ký và ghi nhật ký, và nhiều chức năng khác đã được xử lý bởi các mô-đun chuyên dụng trong Linux. Phần lớn trong số này không liên quan gì đến việc khởi tạo hệ thống.

Một số daemon được cung cấp bởi systemd là:

systemd-udevd: Quản lý các thiết bị vật lý.
systemd-logind: Quản lý thông tin đăng nhập của người dùng.
systemd-Resolution: Cung cấp độ phân giải tên mạng cho các ứng dụng cục bộ.
systemd-networkd: Quản lý và phát hiện các thiết bị mạng cũng như quản lý các cấu hình mạng.
systemd-tmpfiles: Tạo, xóa và dọn dẹp các tệp và thư mục tạm thời và dễ bay hơi.
systemd-localed: Quản lý cài đặt ngôn ngữ hệ thống.
systemd-machined: Phát hiện và giám sát các máy ảo và vùng chứa.
systemd-nspawn: Có thể khởi chạy một lệnh hoặc quy trình khác trong một vùng chứa không gian tên nhẹ, cung cấp một chức năng tương tự như chroot.

Và đó chỉ là phần nổi của tảng băng, cũng là mấu chốt của vấn đề. systemd từ lâu đã vượt xa những gì yêu cầu của một hệ thống init, mà theo các đối thủ của nó, là định nghĩa của phạm vi creep.

“Nó quá to. Nó có quá nhiều. “

Những người phản đối systemd chỉ ra sự pha trộn lớn, gây tò mò của các chức năng mà nó bao gồm. Tất cả các tính năng này đã tồn tại trong Linux, và có lẽ, một số trong số chúng cần được làm mới hoặc cách tiếp cận mới. Tuy nhiên, để gộp tất cả các chức năng này vào thứ được cho là một hệ thống init là một điều khó hiểu về mặt kiến ​​trúc.

systemd đã được gọi là một điểm lỗi duy nhất cho quá nhiều chức năng quan trọng, nhưng điều này dường như không chính đáng. Phải thừa nhận rằng nó ném Triết lý Unix tạo ra các công cụ nhỏ hoạt động cùng nhau thay vì các phần mềm lớn thực hiện mọi thứ ngoài cửa sổ. Mặc dù systemd không phải là nguyên khối hoàn toàn (nó bao gồm nhiều mã nhị phân chứ không phải một mã lớn duy nhất), nhưng nó bao gồm rất nhiều công cụ và lệnh quản lý khác nhau dưới một cái ô.

Mặc dù nó có thể không phải là nguyên khối, nhưng nó lớn. Để có ý tưởng về tỷ lệ, chúng tôi đã đếm các dòng văn bản trong cơ sở mã kernel 5.6.15 và nhánh chính systemd của kho lưu trữ GitHub.

Đây là một số liệu tương đối thô. Nó đếm các dòng văn bản, không chỉ các dòng mã. Vì vậy, điều này bao gồm các nhận xét, tài liệu và mọi thứ khác. Tuy nhiên, đó là một so sánh tương tự và cho chúng tôi một thước đo đơn giản:

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

Kernel có gần 28 triệu (chính xác là 27.784.340) dòng văn bản. Ngược lại, systemd có 1.349.969, tương đương gần 1,4 triệu. Với chỉ số hạnh phúc-may mắn của chúng tôi, systemd xuất hiện với kích thước khoảng 5% của hạt nhân, điều này thật điên rồ!

  Cách làm cho Gnome Shell thân thiện với người dùng trên Linux

Như một so sánh khác, số dòng cho việc triển khai System V init hiện đại cho bản phân phối Arch Linux là 1.721 dòng.

Nói thơ rõ ràng không liên quan đến Viện Kỹ sư Điện và Điện tử (IEEE) Hiệp hội Máy tính, cũng không phải Giao diện hệ điều hành di động (POSIX) tiêu chuẩn. Trên thực tế, anh ấy khuyến khích các nhà phát triển bỏ qua POSIX:

“Vì vậy, hãy kiếm cho mình một bản sao của Giao diện lập trình Linux, bỏ qua mọi thứ nó nói về khả năng tương thích của POSIX và lấy đi phần mềm Linux tuyệt vời của bạn. Nó khá nhẹ nhõm! ”

Đã có những cáo buộc rằng systemd là một dự án Red Hat chỉ mang lại lợi ích cho Red Hat, nhưng nó đang bị ép buộc vào thế giới Linux rộng lớn hơn. Vâng, nó được sinh ra trong Red Hat và được điều hành và chỉ đạo bởi nó. Tuy nhiên, trong số 1.321 người đóng góp, chỉ có một phần nhỏ làm việc cho Red Hat.

Vì vậy, những lợi ích cho Red Hat là gì?

Jim Whitehurst, chủ tịch của IBM, người đã từng là giám đốc điều hành của Red Hat, nói:

“Red Hat đã cân nhắc nhiều lựa chọn có sẵn và thậm chí đã sử dụng Canonical’s Upstart cho Red Hat Enterprise Linux 6. Cuối cùng, chúng tôi chọn systemd vì nó là kiến ​​trúc tốt nhất cung cấp khả năng mở rộng, tính đơn giản, khả năng mở rộng và các giao diện được xác định rõ để giải quyết các vấn đề mà chúng tôi thấy ngày hôm nay và thấy trước trong tương lai. ”

Whitehurst cũng cho biết họ cũng thấy những lợi ích trong các hệ thống nhúng. Red Hat hợp tác với “các nhà cung cấp nhúng lớn nhất trên thế giới, đặc biệt là trong các ngành công nghiệp viễn thông và ô tô, nơi sự ổn định và độ tin cậy là mối quan tâm số một”.

Đây có vẻ là những lý do hợp lý về mặt kỹ thuật. Bạn có thể hiểu nhu cầu của công ty về độ tin cậy, và không phải vô lý khi Red Hat nhìn ra lợi ích của chính mình, nhưng những người khác có nên làm theo không?

Uống Kool-Aid systemd?

Một số người phản đối systemd nói rằng các bản phân phối và mọi người chỉ đang mù quáng đi theo sự dẫn dắt của Red Hat và áp dụng nó.

Tuy nhiên, giống như cụm từ, “uống Kool-Aid,” điều đó không đúng lắm. Được sản xuất vào năm 1978 sau nhà lãnh đạo giáo phái, Jim Jones, đã ép buộc hơn 900 tín đồ của mình tự sát bằng cách uống một chất lỏng có hương vị nho được pha với xyanua, cụm từ ám chỉ Kool-Aid một cách không chính xác. Cả nhóm thực sự đã uống Flavor Aid, nhưng Kool-Aid đã bị chiếc bàn chải đó làm hoen ố kể từ đó.

Thêm vào đó, các bản phân phối Linux không chạy theo Red Hat một cách mù quáng; họ đang áp dụng systemd sau khi cân nhắc nghiêm túc. Cuộc tranh luận diễn ra trên Debian danh sách gửi thư trong một thời gian dài. Tuy nhiên, vào năm 2014, cộng đồng đã bỏ phiếu để chấp nhận systemd là hệ thống init mặc định, nhưng cũng hỗ trợ các lựa chọn thay thế.

Debian là một ví dụ quan trọng vì nó không bắt nguồn từ RedHat, Fedora hoặc CentOS. Không có steerage nào được áp dụng cho Debian từ Red Hat. Và Debian, giống như PID 1, có nhiều con cháu, bao gồm cả Ubuntu và nhiều phần phụ của nó.

Các quyết định do cộng đồng Debian đưa ra có tầm ảnh hưởng sâu rộng. Họ cũng được tranh luận sôi nổi và bỏ phiếu về việc sử dụng phương pháp bỏ phiếu Condorcet. Cộng đồng cũng không đưa ra những lựa chọn như vậy một cách nhẹ nhàng.

  Cách chơi Crusader Kings II trên Linux

Nó được bình chọn một lần nữa vào tháng 12 năm 2019 để tiếp tục tập trung vào systemd và để tiếp tục khám phá các lựa chọn thay thế. Ngược lại với việc làm theo một cách mù quáng, đây thực sự là một ví dụ điển hình về dân chủ và tự do lựa chọn tại nơi làm việc.

Các giới hạn của sự lựa chọn

Nói chung, bạn không được chọn có sử dụng systemd với một bản phân phối Linux cụ thể hay không. Thay vào đó, các bản phân phối tự chọn xem họ có muốn sử dụng nó hay không và bạn có thể chọn bản phân phối Linux nào bạn thích. Có lẽ một bản phân phối Linux mà bạn yêu thích đã chuyển sang systemd. Giống như một nhạc sĩ yêu thích thay đổi thể loại, điều này có thể gây chói tai.

Những người sử dụng Debian, Fedora, CentOS, Ubuntu, Vòm, Solus, và openSUSEvà phản đối việc áp dụng systemd, có thể cảm thấy rằng họ đang bị loại khỏi việc sử dụng phân phối lựa chọn của họ. Nếu họ cảm thấy đủ mạnh mẽ về bất kỳ lựa chọn kiến ​​trúc nào, phạm vi hạn chế hoặc không quan tâm đến POSIX, họ có thể thấy không thể tiếp tục sử dụng bản phân phối đó.

Tất nhiên là có một quang phổ. Ở một khía cạnh nào đó, bạn có những người không hiểu vấn đề (hoặc thậm chí không quan tâm), và mặt khác, bạn có những người phản đối nhiệt tình. Đâu đó ở giữa là những người không thích thay đổi, nhưng không đủ bận tâm về nó để nhảy tàu. Nhưng còn những người tị nạn phân phối, những người không thể ở lại phân phối đã chọn do sở thích hoặc nguyên tắc của họ?

Thật không may, nó không dễ dàng như chỉ cài đặt bất kỳ hệ thống init nào bạn muốn. Không phải ai cũng có khả năng kỹ thuật để làm điều đó, đừng để ý đến những khó khăn phát sinh khi các ứng dụng hoặc môi trường máy tính để bàn, chẳng hạn như GNOME, có sự phụ thuộc vào hệ thốngd.

Điều gì về việc chuyển sang phân phối khác? Một số, như Devuan, xuất hiện dưới dạng các nhánh phân phối không phải systemd (trong trường hợp này là Debian) đã sử dụng systemd. Việc sử dụng Devuan phải tương tự như bản phân phối chính, nhưng đó không phải là trường hợp của tất cả các fork không phải systemd. Ví dụ: nếu bạn rời Fedora và chuyển đến AntiX, Gentoo, hoặc là Slackware, bạn sẽ có một trải nghiệm rất khác.

Nó không đi đâu cả

Tôi thích một số trong những gì systemd làm (cơ chế điều khiển đơn giản và được tiêu chuẩn hóa cho các quy trình). Tôi không hiểu cơ sở lý luận của một số công việc của nó (nhật ký nhị phân). Tôi cũng không thích một số tính năng của nó (cải tiến các thư mục chính – ai đã yêu cầu điều đó?).

Các bản phân phối như Debian đang làm điều thông minh và đang điều tra các lựa chọn thay thế để giữ cho các tùy chọn của nó luôn mở. Tuy nhiên, systemd vẫn tồn tại trong một chặng đường dài.

Nếu bạn quản lý các máy Linux cho người khác, hãy tìm hiểu systemd cũng như bạn biết System V init. Bằng cách này, bất kể bạn gặp phải điều gì, bạn sẽ có thể thực hiện nhiệm vụ của mình.

Chỉ cần sử dụng Linux ở nhà? Nếu vậy, hãy chọn một bản phân phối vừa đáp ứng nhu cầu kỹ thuật vừa bổ sung cho hệ tư tưởng Linux của bạn.

x