เหตุใด systemd ของ Linux จึงยังคงแตกแยกหลังจากหลายปีที่ผ่านมา

เผยแพร่แล้ว: 2022-01-29
เทอร์มินัล Linux ที่มีข้อความสีเขียวบนแล็ปท็อป
fatmawati achmad zaenuri/Shutterstock

systemd อายุ 10 ปี แต่ความรู้สึกที่มีต่อมันในชุมชน Linux นั้นยังไม่คลี่คลาย—ตอนนี้มันแตกแยกเหมือนที่เคยเป็นมา แม้ว่าจะมีการใช้งานโดยลีนุกซ์รุ่นใหญ่หลายรุ่น แต่ฝ่ายค้านไม่ยอมใครง่ายๆก็ไม่ยอมลดละ

ลำดับการบูต Linux

เมื่อคุณเปิดเครื่องคอมพิวเตอร์ ฮาร์ดแวร์จะบู๊ต จากนั้น (ตามประเภทของบูตเซกเตอร์ที่คอมพิวเตอร์ของคุณใช้) มาสเตอร์บูตเรคคอร์ด (MBR) จะทำงานหรือ Unified Extensible Firmware Interface (UEFI) จะทำงาน การกระทำสุดท้ายของทั้งสองสิ่งนี้คือการเริ่มการทำงานของเคอร์เนลลินุกซ์

เคอร์เนลถูกโหลดเข้าสู่หน่วยความจำ คลายการบีบอัดและเริ่มต้น ระบบไฟล์ชั่วคราวถูกสร้างขึ้นใน RAM โดยปกติโดยยูทิลิตี้ที่เรียกว่า initramfs หรือ initrd ซึ่งช่วยให้สามารถกำหนดและโหลดไดรเวอร์ที่จำเป็นได้ ซึ่งจะทำให้ระบบไฟล์พื้นที่ผู้ใช้โหลดและเตรียมสร้างสภาพแวดล้อมของพื้นที่ผู้ใช้ได้

การสร้างสภาพแวดล้อมพื้นที่ผู้ใช้ได้รับการจัดการโดยกระบวนการ init ซึ่งเป็นกระบวนการแรกที่เปิดตัวโดยเคอร์เนลในพื้นที่ผู้ใช้ มีรหัสกระบวนการ (PID) เท่ากับ 1 กระบวนการอื่นๆ ทั้งหมดเป็นลูกโดยตรงหรือโดยอ้อมของกระบวนการเริ่มต้น

ก่อน systemd ค่าดีฟอลต์หลักสำหรับกระบวนการ init คือการทำงานซ้ำของ Unix System V init มีตัวเลือกอื่น ๆ ให้เลือก แต่ System V init เป็นตัวเลือกมาตรฐานในการแจกแจงที่มาที่ไม่ใช่ Berkeley Software Distribution (BSD) ส่วนใหญ่ เพราะมันมาจาก System V Unix ซึ่งเป็นบรรพบุรุษทางจิตวิญญาณของ Linux โดยตรง หลายคนจึงมองว่านี่เป็น "วิธีที่เป็นทางการ" ในการเริ่มต้น

โฆษณา

กระบวนการ init เริ่มต้น daemons และบริการทั้งหมดที่จำเป็นในการทำให้ระบบปฏิบัติการทำงานในลักษณะโต้ตอบที่มีความหมาย daemons เหล่านี้จัดการสิ่งต่างๆ เช่น สแต็กเครือข่าย เปิดใช้งานฮาร์ดแวร์อื่นภายในคอมพิวเตอร์ของคุณ และจัดเตรียมหน้าจอบูต

กระบวนการพื้นหลังจำนวนมากเหล่านี้ยังคงทำงานต่อไปหลังจากที่เริ่มทำงาน พวกเขาทำสิ่งต่างๆ เช่น บันทึกข้อมูลเหตุการณ์ ดูการเปลี่ยนแปลงฮาร์ดแวร์เมื่อคุณใส่หรือนำอุปกรณ์ออก และจัดการการเข้าสู่ระบบของผู้ใช้ ไม่น่าแปลกใจเลยที่ระบบ init ยังมีคุณสมบัติในการจัดการบริการอีกด้วย

เราสามารถใช้ ps เพื่อดูกระบวนการที่มี PID 1 เราจะใช้ตัวเลือก f (รายการแบบเต็ม) และ p (PID):

 ps -fp 1 

เราเห็นกระบวนการด้วย PID 1 คือ systemd การรันคำสั่งเดียวกันบน Manjaro Linux ให้ผลลัพธ์ที่ต่างออกไป กระบวนการที่มี PID 1 ถูกระบุว่าเป็น /sbin/init การดูไฟล์นั้นอย่างรวดเร็วแสดงว่าเป็นลิงก์สัญลักษณ์ไปยัง systemd :

 ps -fp 1
 ls -hl /sbin/init 

การใช้ตัวเลือก ppid (รหัสกระบวนการหลัก) กับ ps เราสามารถดูว่ากระบวนการใดเปิดตัวโดยตรงโดย systemd :

 ps -f --ppid 1 

รายการค่อนข้างยาว ดังที่คุณเห็นในภาพด้านล่าง

ทางเลือก

หลายโครงการได้พยายามสร้างทางเลือกให้กับ System V init แบบเดิม ปัญหาหลักประการหนึ่งคือ เมื่อมี System V init กระบวนการทั้งหมดจะเริ่มต้นตามลำดับ เพื่อปรับปรุงประสิทธิภาพของลำดับการบูต โปรเจ็กต์ทางเลือกจำนวนมากใช้การขนานกันเพื่อเริ่มกระบวนการพร้อมกันและไม่พร้อมกัน

นี่คือข้อมูลบางส่วนเกี่ยวกับสิ่งเหล่านี้:

  • พุ่งพรวด: พัฒนาโดย Canonical มันถูกใช้ใน Ubuntu 9.10, Red Hat, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 และ Fedora 9
  • Runit: ทำงานบน FreeBSD และอนุพันธ์ BSD อื่นๆ, macOS และ Solaris รวมถึงระบบ Linux นอกจากนี้ยังเป็นระบบเริ่มต้นเริ่มต้นบน Void Linux
  • s6-linux-init: การแทนที่สำหรับ System V init นี้ได้รับการออกแบบมาเพื่อให้สอดคล้องกับปรัชญา Unix อย่างใกล้ชิด ซึ่งมักจะลดเหลือเพียงเสียงกัด "ทำสิ่งหนึ่งแล้วทำได้ดี"
โฆษณา

มีฟังก์ชันและการออกแบบที่แตกต่างกันมากมาย อย่างไรก็ตามไม่มีใครสร้างระบบความโกรธ systemd ได้

The systemd Way

systemd เปิดตัวในปี 2010 และถูกใช้ใน Fedora ในปี 2011 ตั้งแต่นั้นมา ระบบก็ถูกนำมาใช้โดยหลายรุ่น ได้รับการพัฒนาโดย Lennart Poettering และ Kay Sievers วิศวกรซอฟต์แวร์สองคนที่ RedHat

systemd เป็นมากกว่าการแทนที่ init แต่เป็นชุดของไบนารีประมาณ 70 ตัวที่จัดการการเริ่มต้นระบบ ภูตและบริการ การบันทึกและการทำเจอร์นัล และฟังก์ชันอื่นๆ อีกมากมายที่ได้รับการจัดการโดยโมดูลเฉพาะใน Linux แล้ว สิ่งเหล่านี้ส่วนใหญ่ไม่เกี่ยวข้องกับการเริ่มต้นระบบ

daemons บางตัวที่จัดเตรียมโดย systemd ได้แก่:

  • systemd-udevd: จัดการอุปกรณ์ทางกายภาพ
  • systemd-logind: จัดการการเข้าสู่ระบบของผู้ใช้
  • systemd-resolved: ให้การแก้ไขชื่อเครือข่ายแก่แอปพลิเคชันในเครื่อง
  • systemd-networkd : จัดการและตรวจจับอุปกรณ์เครือข่ายและจัดการการกำหนดค่าเครือข่าย
  • systemd-tmpfiles: สร้าง ลบ และล้างไฟล์และไดเร็กทอรีที่ระเหยและชั่วคราว
  • systemd-localed: จัดการการตั้งค่าตำแหน่งที่ตั้งของระบบ
  • systemd-machined: ตรวจจับและตรวจสอบเครื่องเสมือนและคอนเทนเนอร์
  • systemd-nspawn: สามารถเรียกใช้คำสั่งหรือกระบวนการอื่นในคอนเทนเนอร์เนมสเปซที่มีน้ำหนักเบา ทำให้มีฟังก์ชันการทำงานคล้ายกับ chroot

และนั่นเป็นเพียงส่วนปลายของภูเขาน้ำแข็ง ซึ่งเป็นจุดสำคัญของเรื่องด้วย systemd ได้แซงหน้าสิ่งที่ต้องการของระบบ init มานานแล้ว ซึ่งตามที่ฝ่ายตรงข้ามกำหนดไว้คือคำจำกัดความของขอบเขตการคืบคลาน

"มันใหญ่เกินไป. มันมากเกินไป”

ฝ่ายตรงข้ามของ systemd ชี้ให้เห็นถึงการผสมผสานของฟังก์ชันการทำงานที่น่าสนใจและน่าสนใจมากมาย คุณลักษณะทั้งหมดเหล่านี้มีอยู่แล้วใน Linux และบางทีคุณสมบัติบางอย่างอาจจำเป็นต้องรีเฟรชหรือแนวทางใหม่ อย่างไรก็ตาม การรวมฟังก์ชันการทำงานทั้งหมดนี้ไว้ในสิ่งที่ควรจะเป็นระบบเริ่มต้นนั้นเป็นเรื่องที่น่าสับสนในเชิงสถาปัตยกรรม

โฆษณา

systemd ถูกเรียกว่าจุดล้มเหลวเพียงจุดเดียวสำหรับฟังก์ชันที่สำคัญมากเกินไป แต่สิ่งนี้ดูเหมือนจะไม่สมเหตุสมผล เป็นที่ยอมรับว่ามันโยนปรัชญา Unix ในการสร้างเครื่องมือขนาดเล็กที่ทำงานร่วมกันแทนซอฟต์แวร์ชิ้นใหญ่ที่ทำทุกอย่างนอกหน้าต่าง แม้ว่า systemd จะไม่ใช่เสาหินขนาดใหญ่ (ประกอบด้วยไบนารีจำนวนมากแทนที่จะเป็นไบนารีขนาดใหญ่เพียงตัวเดียว) แต่ก็มีเครื่องมือและคำสั่งการจัดการที่แตกต่างกันจำนวนมากภายใต้ร่มเดียวกัน

แม้ว่ามันอาจจะไม่ใช่เสาหิน แต่ก็ใหญ่ เพื่อให้ได้แนวคิดเรื่องขนาด เรานับบรรทัดของข้อความในเคอร์เนล 5.6.15 codebase และสาขาหลัก systemd ของที่เก็บ GitHub

นี่เป็นตัวชี้วัดที่ค่อนข้างหยาบ มันนับบรรทัดของข้อความ ไม่ใช่แค่บรรทัดของโค้ด ซึ่งรวมถึงความคิดเห็น เอกสารประกอบ และทุกอย่างอื่นๆ อย่างไรก็ตาม มันเป็นการเปรียบเทียบที่เหมือนกันและให้มาตรฐานง่ายๆ แก่เรา:

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

เคอร์เนลมีข้อความเกือบ 28,784,340 บรรทัด ในทางตรงกันข้าม systemd มี 1,349,969 หรือเกือบ 1.4 ล้าน ด้วยตัวชี้วัดที่โชคดีของเรา systemd ออกมาที่ขนาดประมาณ 5 เปอร์เซ็นต์ของเคอร์เนล ซึ่งมันบ้ามาก!

ในการเปรียบเทียบอื่น จำนวนบรรทัดสำหรับการนำ System V init ไปใช้งานที่ทันสมัยสำหรับการแจกจ่าย Arch Linux ออกมาเป็น 1,721 บรรทัด

การกวีนิพนธ์ไม่คำนึงถึงสถาบันวิศวกรไฟฟ้าและอิเล็กทรอนิกส์ (IEEE) Computer Society หรือมาตรฐาน Portable Operating System Interface (POSIX) อันที่จริง เขาสนับสนุนให้นักพัฒนาละเว้น POSIX:

“ดังนั้น หาสำเนาของ The Linux Programming Interface ให้ตัวเอง ละเว้นทุกอย่างที่กล่าวถึงเกี่ยวกับความเข้ากันได้ของ POSIX และแฮ็กซอฟต์แวร์ Linux ที่น่าทึ่งของคุณออกไป มันค่อนข้างโล่งใจ!”

โฆษณา

มีการกล่าวหาว่า systemd เป็นโปรเจ็กต์ของ Red Hat ที่ให้ประโยชน์แก่ Red Hat เท่านั้น แต่กลับถูกบังคับเข้าสู่โลก Linux ที่กว้างขึ้น ใช่ มันถือกำเนิดในเร้ดแฮทและถูกควบคุมและควบคุมโดยมัน อย่างไรก็ตาม จากผู้มีส่วนร่วม 1,321 คน มีเพียงเศษเสี้ยวเดียวเท่านั้นที่ทำงานให้กับเร้ดแฮท

แล้วเร้ดแฮทมีประโยชน์อย่างไร?

Jim Whitehurst ประธาน IBM ซึ่งครั้งหนึ่งเคยเป็น CEO ของ Red Hat กล่าวว่า:

“Red Hat พิจารณาตัวเลือกที่มีอยู่มากมายและแม้กระทั่งใช้ Canonical's Upstart สำหรับ Red Hat Enterprise Linux 6 ในท้ายที่สุด เราเลือก systemd เพราะมันเป็นสถาปัตยกรรมที่ดีที่สุดที่ให้ความสามารถในการขยาย ความเรียบง่าย ความสามารถในการปรับขนาด และอินเทอร์เฟซที่กำหนดไว้อย่างดีเพื่อแก้ไขปัญหาที่เราเห็น วันนี้และคาดการณ์ในอนาคต”

Whitehurst ยังกล่าวอีกว่าพวกเขาเห็นประโยชน์ในระบบฝังตัวเช่นกัน เร้ดแฮทเป็นพันธมิตรกับ “ผู้จำหน่ายอุปกรณ์ฝังตัวรายใหญ่ที่สุดในโลก โดยเฉพาะอย่างยิ่งในอุตสาหกรรมโทรคมนาคมและยานยนต์ ซึ่งความกังวลเรื่องเสถียรภาพและความน่าเชื่อถือเป็นอันดับหนึ่ง”

สิ่งเหล่านี้ดูเหมือนเหตุผลที่มีเหตุผลทางเทคนิค คุณสามารถเข้าใจความต้องการของบริษัทในด้านความน่าเชื่อถือ และไม่ใช่เรื่องไม่มีเหตุผลสำหรับเร้ดแฮทที่จะมองหาผลประโยชน์ของตนเอง แต่คนอื่นๆ ควรปฏิบัติตามหรือไม่

ดื่ม Kool-Aid ที่เป็นระบบ?

ฝ่ายตรงข้ามบางคนของ systemd กล่าวว่าการแจกแจงและผู้คนเพียงแค่สุ่มสี่สุ่มห้าตามการนำของ Red Hat และนำไปใช้

อย่างไรก็ตาม เช่นเดียวกับวลี "การดื่ม Kool-Aid" นั้นไม่ถูกต้องนัก ประกาศเกียรติคุณในปี 1978 หลังจากผู้นำลัทธิ จิม โจนส์ บังคับผู้ติดตามกว่า 900 คนให้ฆ่าตัวตายโดยการดื่มของเหลวรสองุ่นเจือไซยาไนด์ วลีนี้ทำให้ Kool-Aid อับอายอย่างไม่ถูกต้อง กลุ่มนี้ดื่ม Flavour Aid จริงๆ แต่ Kool-Aid ก็ถูกแปรงด้วยแปรงนั้นตั้งแต่นั้นเป็นต้นมา

โฆษณา

นอกจากนี้ ลีนุกซ์รุ่นไม่ได้ติดตามเร้ดแฮทอย่างสุ่มสี่สุ่มห้า; พวกเขากำลังใช้ systemd หลังจากไตร่ตรองอย่างจริงจัง การอภิปรายโหมกระหน่ำในรายการส่งเมลของ Debian เป็นเวลานาน อย่างไรก็ตาม ในปี 2014 ชุมชนได้ลงคะแนนให้นำ systemd มาใช้เป็นระบบเริ่มต้นเริ่มต้น แต่ยังสนับสนุนทางเลือกอื่นด้วย

Debian เป็นตัวอย่างที่สำคัญเนื่องจากไม่ได้มาจาก RedHat, Fedora หรือ CentOS ไม่มีการใช้การควบคุมกับ Debian จาก Red Hat และ Debian เช่น PID 1 มีทายาทมากมาย รวมถึง Ubuntu และสปินออฟมากมาย

การตัดสินใจของชุมชน Debian นั้นกว้างขวาง พวกเขายังถกเถียงกันอย่างจริงจังและลงคะแนนโดยใช้วิธีการลงคะแนนเสียงของ Condorcet ชุมชนไม่ได้ทำการเลือกอย่างไม่ใส่ใจเช่นกัน

มีการโหวตอีกครั้งในเดือนธันวาคม 2019 เพื่อมุ่งเน้นที่ systemd ต่อไปและเพื่อสำรวจทางเลือกอื่นต่อไป ตรงกันข้ามกับการสุ่มสี่สุ่มห้านี่คือตัวอย่างตำราเรียนเกี่ยวกับประชาธิปไตยและเสรีภาพในการเลือกในที่ทำงาน

ข้อจำกัดของการเลือก

โดยทั่วไปแล้ว คุณไม่ได้เลือกว่าจะใช้ systemd กับลีนุกซ์รุ่นใดรุ่นหนึ่งหรือไม่ ในทางกลับกัน ดิสทริบิวชันเองเป็นผู้เลือกว่าต้องการใช้หรือไม่ และคุณสามารถเลือก Linux distro ที่คุณต้องการได้ บางทีการแจกจ่าย Linux ที่คุณชอบอาจเปลี่ยนไปใช้ systemd เช่นเดียวกับนักดนตรีคนโปรดที่เปลี่ยนแนวเพลง เรื่องนี้ก็อาจสะเทือนใจได้

ผู้ที่ใช้ Debian, Fedora, CentOS, Ubuntu, Arch, Solus และ openSUSE และคัดค้านการนำ systemd ไปใช้ อาจรู้สึกว่าพวกเขากำลังถูกกีดกันจากการกระจายตัวเลือก หากพวกเขารู้สึกมากพอเกี่ยวกับตัวเลือกสถาปัตยกรรม ขอบเขตการคืบ หรือการละเลย POSIX พวกเขาอาจพบว่าไม่สามารถใช้การแจกจ่ายนั้นต่อไปได้

โฆษณา

มีสเปกตรัมแน่นอน ในตอนท้าย คุณมีคนที่ไม่เข้าใจปัญหา (หรือแม้แต่ไม่สนใจ) และในอีกด้านหนึ่ง คุณมีผู้คัดค้านที่กระตือรือร้น ตรงกลางคือคนที่ไม่ชอบการเปลี่ยนแปลง แต่ไม่ค่อยใส่ใจกับมันมากพอที่จะกระโดดขึ้นเรือ แต่แล้วผู้ลี้ภัยที่แจกจ่ายซึ่งไม่สามารถอยู่ในการแจกจ่ายที่เลือกเนื่องจากความชอบหรือหลักการของพวกเขาล่ะ

ขออภัย มันไม่ง่ายเหมือนกับการติดตั้งระบบ init ที่คุณต้องการ ไม่ใช่ทุกคนที่มีความสามารถด้านเทคนิคในการทำเช่นนั้น ไม่ต้องกังวลกับปัญหาที่เกิดขึ้นเมื่อแอปพลิเคชันหรือสภาพแวดล้อมเดสก์ท็อป เช่น GNOME มีการพึ่งพา systemd

แล้วการย้ายไปยังการกระจายอื่นล่ะ บางอย่างเช่น Devuan ปรากฏว่าเป็นการแจกแจงแบบ non- systemd (ในกรณีนี้คือ Debian) ที่ได้นำ systemd มาใช้ การใช้ Devuan ควรคล้ายกับการแจกแจงแบบพาเรนต์ แต่นั่นไม่ใช่กรณีของส้อมที่ไม่ใช่ systemd ทั้งหมด ตัวอย่างเช่น หากคุณออกจาก Fedora และย้ายไปที่ AntiX, Gentoo หรือ Slackware คุณจะมีประสบการณ์ที่แตกต่างออกไปอย่างมาก

มันไม่ไปไหนทั้งนั้น

ฉันชอบบางสิ่งที่ systemd ทำ (กลไกการควบคุมที่ง่ายและได้มาตรฐานสำหรับกระบวนการ) ฉันไม่เข้าใจเหตุผลของสิ่งที่ทำ (บันทึกไบนารี) ฉันยังไม่ชอบบางสิ่งที่มันทำ (ปรับปรุงโฮมโฟลเดอร์—ใครเป็นคนถาม?)

ดิสทริบิวชันเช่น Debian กำลังทำสิ่งที่ชาญฉลาดและตรวจสอบทางเลือกอื่น ๆ เพื่อเปิดตัวเลือกต่างๆ อย่างไรก็ตาม systemd อยู่ในนั้นในระยะยาว

โฆษณา

หากคุณดูแลระบบ Linux สำหรับผู้อื่น เรียนรู้ systemd เช่นเดียวกับที่คุณรู้จัก System V init ด้วยวิธีนี้ไม่ว่าจะเจออะไร คุณก็จะสามารถปฏิบัติหน้าที่ได้

แค่ใช้ Linux ที่บ้าน? ถ้าใช่ ให้เลือกการกระจายที่ตรงกับความต้องการด้านเทคนิคของคุณและเสริมอุดมการณ์ Linux ของคุณ

ที่เกี่ยวข้อง: Systemd จะเปลี่ยนวิธีการทำงานของโฮมไดเร็กทอรี Linux ของคุณ