Tin tức và phân tích của tất cả các thiết bị di động

Tại sao Linux systemd vẫn bị chia rẽ sau nhiều năm

systemd đã 10 năm tuổi, nhưng cảm xúc về nó trong cộng đồng Linux vẫn chưa dịu đi – giờ đây nó đang được chia sẻ nhiều 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 sự phản đối gay gắt vẫn chưa lắng xuống.

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

Khi bạn bật máy tính, phần cứng sẽ khởi động và sau đó (tùy theo loại cung khởi động mà máy tính của bạn đang sử dụng) Bản ghi khởi động chính (MBR) thực thi hoặc Giao diện phần sụn mở rộng hợp nhất (UEFI) chạy. Bước cuối cùng cho cả hai thao tác này là khởi động Linux Kernel.

Kernel được nạp vào bộ nhớ, 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 bạn chỉ định và tải các trình điều khiển cần thiết. Điều này đến lượt nó 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 môi trường không gian người dùng được xử lý bởi quy trình init, đây là quy trình đầu tiên mà nhân bắt đầu trong không gian người dùng. Cái này có ID tiến trình (PID) là 1. Tất cả các quy trình khác là con trực tiếp hoặc gián tiếp của quy trình khởi tạo.

Trước khi giới thiệu systemd, phần tử mặc định chính của quy trình init là viết lại tệp Ban đầu Hệ thống Unix V. Các tùy chọn khác có sẵn, nhưng khởi tạo Hệ thống V là một tùy chọn tiêu chuẩn trên hầu hết các bản phân phối bắt nguồn từ Phân phối phần mềm Berkeley (BSD). Bởi vì nó xuất phát trực tiếp từ Unix System V – tổ tiên tinh thần của Linux – nhiều người coi đó là “cách chính thức” để thực thi init.

Quá trình init chạy tất cả các daemon và dịch vụ cần thiết để hệ điều hành chạy theo cách tương tác, có ý nghĩa. 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 và cung cấp màn hình khởi động.

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

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

ps -fp 1

Chúng ta có thể thấy rằng quá trình với PID 1 là hệ thống Chạy cùng một lệnh trên Manjaro Linux đã cho một kết quả khác. quy trình PID 1 được xác định là /sbin/init. Xem nhanh tệp này cho thấy đó là một liên kết tượng trưng đến systemd:

ps -fp 1
ls -hl /sbin/init

ps -fp 1 trong cửa sổ đầu cuối.

Sử dụng tùy chọn ppid (ID tiến trình gốc) trong ps, chúng ta có thể xem những tiến trình nào được bắt đầu trực tiếp bởi systemd:

ps -f --ppid 1

ps -f --ppid 1 trong cửa sổ đầu cuối.

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

ps -f --ppid 1 trong cửa sổ đầu cuối.

lựa chọn thay thế

Một số dự án đã cố gắng tạo một giải pháp thay thế cho khởi tạo System V truyền thống. Một trong những vấn đề chính là khi System V được khởi tạo, tất cả các quy trình đều được khởi động nối tiếp, cái này nối tiếp cái kia. Để cải thiện hiệu suất trình tự khởi động, nhiều thiết kế thay thế sử dụng song song để chạy 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ố họ:

Dorobkiewicz: Được phát triển bởi Canonical, nó được sử dụng trong Ubuntu 9.10, mũ đỏ, Red Hat Enterprise Linux (RHEL) 6CentOS 6 và Fedora 9.
Chạy: Tiếp tục chạy 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 khởi động mặc định cho Void Linux.
s6-linux-init: Sự thay thế init System V này được thiết kế để tuân thủ nghiêm ngặt triết lý Unix, triết lý này thường dẫn đến âm thanh “làm một việc và làm tốt”.

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

cách hệ thống

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 chấp nhận. Nó được phát triển bởi Lennart Poettering và Kay Sievers, hai kỹ sư phần mềm tại RedHat.

systemd không chỉ đơn thuần là trao đổi khởi tạo. Thay vào đó, nó là một tập hợp 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ý cũng như nhiều chức năng khác đã được xử lý bởi các mô-đun chuyên dụng trong Linux. Hầu hết chúng 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-resolved: 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à khám phá các thiết bị mạng và quản lý 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 dễ bay hơi và tạm thời.
systemd-localed: quản lý ngôn ngữ của 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ể chạy lệnh hoặc quy trình khác trong vùng chứa không gian tên nhẹ, cung cấp chức năng giống như chroot.

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

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

Các đối thủ của Systemd chỉ ra sự kết hợp lớn, đặc biệt của các tính 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 một cách tiếp cận mới. Tuy nhiên, sự kết hợp của tất cả các chức năng này trong cái được cho là một hệ thống bắt đầu 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 đối với quá nhiều chức năng quan trọng, nhưng điều đó dường như không được bảo đảm. Phải thừa nhận rằng nó loại bỏ triết lý Unix về việc tạo ra các công cụ nhỏ hoạt động cùng nhau, thay vì các chương trình lớn thực hiện mọi thứ ngoài cửa sổ. Mặc dù systemd không hoàn toàn nguyên khối (bao gồm nhiều tệp nhị phân chứ không phải một tệp lớn), nhưng nó chứa nhiều công cụ quản lý và lệnh dưới một chiếc ô.

Mặc dù nó có thể không 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ã hạt nhân 5.6.15 và nhánh chính systemd của kho lưu trữ GitHub.

Đó là một thước đo tương đối thô sơ. Nó đếm các dòng văn bản, không chỉ các dòng mã. Điều này bao gồm 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à giống nhau và cho chúng tôi một thước đo đơn giản:

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

Hạt nhân chứa 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, gần như 1,4 triệu. Với phép đo may mắn hạnh phúc của chúng tôi, systemd mất khoảng 5 tỷ lệ phần trăm kích thước hạt nhân, thật điên rồ!

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

Poeting dường như không tôn trọng Hiệp hội Máy tính của Viện Kỹ thuật Điện và Điện tử (IEEE) hoặc tiêu chuẩn Giao diện Hệ điều hành Di động (POSIX). Trên thực tế, ông đã khuyến khích các lập trình viên bỏ qua POSIX:

“Vì vậy, hãy lấy cho mình một bản Giao diện lập trình Linux, bỏ qua bất kỳ điều gì nói rằng tuân thủ POSIX và hack phần mềm Linux tuyệt vời của bạn. Đó là một cứu trợ! “

Đã 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 lại được hỗ trợ bởi thế giới Linux rộng lớn hơn. Vâng, nó được sinh ra trong Red Hat và được quản lý và kiểm soát bởi nó. Tuy nhiên, trong số 1.321 cộng sự, chỉ 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à CEO của Red Hat cho biết:

“Red Hat đã xem xét nhiều tùy 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ì đây là kiến ​​trúc tốt nhất cho 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õ ràng để giải quyết các vấn đề chúng ta thấy ngày nay và dự đoán tương lai.”

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

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

Uống hệ thống Kool-Aid?

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

Tuy nhiên, giống như câu nói “uống Kool-Aid”, điều này không hoàn toàn chính xác. Được tạo ra sau đó vào năm 1978, thủ lĩnh giáo phái Jim Jones đã buộc hơn 900 tín đồ của mình tự sát bằng cách uống chất lỏng xyanua có hương vị nho, một cụm từ khiến Kool-Aid xấu hổ một cách không chính xác. Nhóm thực sự đã uống Flavour Aid, nhưng Kool-Aid kể từ đó đã bị hoen ố bởi thứ râu ria này.

Ngoài ra, các bản phân phối Linux không tuân theo Red Hat một cách mù quáng; sau khi cân nhắc nghiêm túc, họ áp dụng hệ thống. Cuộc tranh luận nổ ra trong danh sách gửi thư của Debian 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àm hệ thống init mặc định, nhưng nó 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 phải từ RedHat, Fedora hay CentOS. Không có kiểm soát Red Hat trong Debian. Debian, giống như PID 1có nhiều hậu duệ, bao gồm cả Ubuntu và nhiều sản phẩm phụ của nó.

Các quyết định do cộng đồng Debian đưa ra có ảnh hưởng sâu rộng. Chúng cũng được thảo luận sôi nổi và bỏ phiếu ủng hộ 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 này một cách nhẹ nhàng.

Đã bình chọn lại 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 giải pháp thay thế. Không giống như mù quáng làm theo, đâ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.

ràng buộc lựa chọn

Nói chung, bạn không thể 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ự quyết định xem chúng có muốn sử dụng nó hay không và bạn có thể chọn bản phân phối Linux ưa thích của mình. Có lẽ bản phân phối Linux mà bạn yêu thích đã chuyển sang systemd. Giống như thể loại chuyển đổi nhạc sĩ yêu thích của bạn, nó có thể gây khó chịu.

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

Tất nhiên là có một quang phổ. Một mặt, 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 đối thủ cuồng nhiệt. Đâu đó ở giữa là những người không thích thay đổi nhưng không đủ quan tâm để nhảy việc. Nhưng còn sự phân bố của những người tị nạn không thể tuân theo sự phân bố đã chọn vì sở thích hoặc quy tắc của họ thì sao?

Thật không may, nó không dễ dàng như việc cài đặt bất kỳ hệ thống init nào mà bạn muốn. Không phải ai cũng có khả năng kỹ thuật này, bất kể 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 như GNOME phụ thuộc vào systemd.

Còn việc chuyển sang một distro khác thì sao? Một số, như Devuan, nổi lên dưới dạng nhánh phân phối phi hệ thống (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 gốc, nhưng đây không phải là trường hợp đối với tất cả các nhánh phi hệ thống. Ví dụ: nếu bạn rời khỏi Fedora và chuyển sang AntiX, Gentoo hoặc Slackware, bạn sẽ có một trải nghiệm hoàn toàn khác.

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

Tôi thích những gì systemd làm (cơ chế kiểm soát quy trình đơn giản và chuẩn hóa). Tôi không hiểu lý do đằng sau một số chức năng của nó (nhật ký nhị phân). Tôi cũng không thích một số chức năng của nó (xây dựng lại 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 những điều thông minh và khám phá các giải pháp thay thế để luôn mở các tùy chọn. Tuy nhiên, systemd sẽ làm được điều đó trong một thời gian dài.

Nếu bạn đang quản lý máy Linux cho người khác, hãy học systemd và cũng biết init của System V. Bằng cách đó, bất kể bạn gặp phải vấn đề gì, bạn sẽ có thể thực hiện công việc 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 của bạn vừa bổ sung cho hệ tư tưởng Linux.

Mục lục