Oasis Linux
(git.sr.ht)- oasis เป็นระบบ Linux ขนาดเล็กที่ทำ static linking ให้กับซอฟต์แวร์ทั้งหมดในระบบพื้นฐาน และมีแนวทางที่ใกล้เคียงกับ BSD มากกว่าดิสทริบิวชัน Linux ทั่วไปที่คุ้นเคย
- ทุกแพ็กเกจถูก build ด้วย samurai และสร้าง manifest ด้วย สคริปต์ Lua ทำให้มีต้นทุนการแพ็กเกจเริ่มต้นสูง แต่ได้การ build ที่คาดการณ์ได้และทำซ้ำได้ พร้อมทั้ง incremental build ที่ข้ามขอบเขตแพ็กเกจได้
- ใช้ BearSSL เป็นไลบรารี TLS และการเข้ารหัสของระบบ และทำให้สามารถใช้ BearSSL ได้ทั่วทั้งระบบผ่าน native BearSSL support ของ libcurl และ libtls-bearssl
- oasis ไม่มี ตัวจัดการแพ็กเกจ แต่ใช้การกำหนดสเปกว่าไฟล์ใดจากแพ็กเกจใดจะถูกรวมในระบบ จากนั้นระบบ build จะบันทึก filesystem tree ที่ได้ลงใน git repository เพื่อนำไป merge เข้ากับ
/หรือดึงไปใช้บนเครื่องอื่นได้ - เป้าหมายหลักคือทำให้
/etcเรียบง่ายพอที่จะเข้าใจได้ทั้งหมด และ build ด้วยคอมไพเลอร์ cproc ที่เข้มงวดต่อมาตรฐาน ISO C มากกว่า gcc หรือ clang และมีขนาดเล็กกว่ามาก
ภาพรวมของ oasis
- oasis เป็นระบบ Linux ขนาดเล็กที่แตกต่างจากระบบปฏิบัติการบน Linux อื่น ๆ ที่คุ้นเคยค่อนข้างมาก และมีแนวทางใกล้กับ BSD มากกว่า
- ซอฟต์แวร์ทั้งหมดในระบบพื้นฐานใช้ static linking รวมถึง display server velox และเว็บเบราว์เซอร์ netsurf ด้วย
- ใช้กลไกที่เรียบง่ายกว่าการลิงก์แบบไดนามิก ช่วยตัดปัญหาการอัปเกรดไลบรารี และสร้างไบนารีแบบ self-contained ที่สมบูรณ์ซึ่งคัดลอกไปยังระบบอื่นได้ง่าย
การ build และ bootstrap
- ทุกแพ็กเกจถูก build ด้วย samurai และ manifest สำหรับการ build ถูกสร้างด้วย สคริปต์ Lua
- วิธีนี้มีต้นทุนการแพ็กเกจเริ่มต้นค่อนข้างสูง แต่ต้นทุนการดูแลรักษาต่ำ และให้เวลา build ที่เกือบเหมาะสมที่สุด การ build ที่คาดการณ์ได้และทำซ้ำได้ การพึ่งพาระหว่างขั้นตอน build ที่ลดลง และ incremental build ที่ข้ามขอบเขตแพ็กเกจได้
- สำหรับ bootstrap เพียงมีระบบ POSIX ใดก็ได้ที่มี git, lua, curl, ยูทิลิตี sha256, ยูทิลิตีบีบอัดมาตรฐาน และ cross compiler
x86_64-linux-musl - ทำให้การ cross compile จากระบบที่ไม่ใช่ Linux เช่น macOS หรือ OpenBSD ทำได้ง่าย
TLS, การจัดองค์ประกอบแพ็กเกจ, และการขยายระบบ
- ใช้ BearSSL เป็นไลบรารี TLS และการเข้ารหัสของระบบ
- BearSSL มีขนาดเล็กมากและเขียนมาอย่างดี แต่ยังไม่ได้รับการยอมรับอย่างแพร่หลาย
- ด้วย native BearSSL support ของ libcurl และ libtls-bearssl ซึ่งเป็น implementation ทดแทนของ libtls ที่สร้างบน BearSSL ทำให้ oasis ใช้ BearSSL ได้ทั่วทั้งระบบ
- มีเพียง แพ็กเกจเสริมบางส่วน เท่านั้นที่ยังต้องใช้ LibreSSL
- oasis ไม่มี ตัวจัดการแพ็กเกจ
- แต่จะกำหนดผ่านสเปกว่าไฟล์ใดจากแพ็กเกจใดจะถูกรวมในระบบ แล้วระบบ build จะบันทึก filesystem tree ที่ได้ลงใน git repository
- ผลลัพธ์นี้สามารถ merge เข้ากับ
/หรือดึงไปใช้บนเครื่องอื่นได้ - แม้จะมุ่งหมายให้เป็นระบบที่สมบูรณ์ แต่มีซอฟต์แวร์เสรีจำนวนมากที่ไม่สอดคล้องกับเป้าหมายนี้ จึงเลือกเชื่อมต่อกับ pkgsrc และ nix แทนการสร้างและดูแลคลังแพ็กเกจนับพันรายการขึ้นมาใหม่
- วิธีนี้ช่วยให้ระบบพื้นฐานยังคงมีขนาดเล็กและโฟกัสชัดเจน พร้อมทั้งขยายระบบด้วยซอฟต์แวร์ที่ต้องการได้
แนวทางการตั้งค่าและการใช้งาน C
- หนึ่งในแนวทางของ oasis คือทำให้ไดเรกทอรี
/etcเรียบง่ายพอที่ผู้ดูแลระบบจะเข้าใจทั้งหมดและปรับแต่งได้อย่างเหมาะสม - ในการตั้งค่าเริ่มต้น ไฟล์ที่ซับซ้อนที่สุดคือสคริปต์เริ่มต้นระบบ
/etc/rc.initซึ่งยาวเพียง 16 บรรทัด - เป้าหมายสำคัญของ oasis คือการ build ด้วยคอมไพเลอร์ภาษา C cproc ที่เข้มงวดต่อมาตรฐาน ISO C มากกว่า gcc หรือ clang มาก และมีขนาดเล็กกว่าหลายลำดับ
- งานนี้ยัง อยู่ระหว่างดำเนินการ แต่แพ็กเกจหลักทั้งหมดและแพ็กเกจอื่นส่วนใหญ่สามารถ build ด้วย cproc ได้สำเร็จ
หลักการ
- ความซับซ้อนของซอฟต์แวร์ควรถูกวัดโดยรวม dependency แบบส่งต่อทั้งหมด
- ไฟล์ executable ควรถูกลิงก์แบบ static
- องค์ประกอบของซอฟต์แวร์ควรเปิดให้ปรับแต่งหรือแก้ไขได้ง่าย
- ซอร์สของแพ็กเกจควรถูกอ้างอิงผ่าน URL หรือ git submodule และไม่ควรถูกรวมมาโดยตรง
/etcควรเรียบง่ายพอที่จะเข้าใจได้ทั้งหมด- แพตช์ควรถูกจัดระเบียบอย่างดี มีคำอธิบายที่ดี และต้องสามารถนำไปใช้ได้อย่างสะอาดเสมอ
การติดตั้งและอิมเมจ QEMU
- คู่มือการติดตั้งอยู่ใน wiki
- oasis เป็นโปรเจ็กต์ที่ทะเยอทะยานและยังมีงานอีกมากที่ต้องทำ
- ผู้ใช้ควรคุ้นเคยกับการ build kernel เองและการปรับแต่งระบบเมื่อเกิดปัญหา
- มี อิมเมจ QEMU ให้ลองใช้งานได้โดยไม่ต้องติดตั้งเอง
- ภายใน archive มี root filesystem, Linux kernel และสคริปต์สำหรับรัน qemu
- รวม
README.mdที่มีข้อมูลวิธีใช้งาน โดย./runจะรันในโหมดกราฟิก และ./run -sจะรันในโหมด serial
การเลือกซอฟต์แวร์ที่รวมมา
- oasis เลือกใช้ implementation ของไลบรารีและเครื่องมือที่เล็กกว่าและเรียบง่ายกว่าเมื่อเป็นไปได้
- ตัวเลือกหลักมีดังนี้
- ใช้ musl แทน glibc
- ใช้ sbase แทน coreutils
- ใช้ ubase แทน util-linux
- ใช้ pigz แทน gzip
- ใช้ mandoc แทน man-db
- ใช้ bearssl แทน openssl
- ใช้ oksh แทน bash
- ใช้ sdhcp แทน dhclient หรือ dhcpcd
- ใช้ vis แทน vim หรือ emacs
- ใช้ byacc แทน bison
- ใช้ perp และ sinit แทน sysvinit หรือ systemd
- ใช้ netsurf แทน chromium หรือ firefox
- ใช้ samurai แทน ninja
- ใช้ velox แทน Xorg
- ใช้ netbsd-curses แทน ncurses
- แพ็กเกจเหล่านี้ถูกรวมเป็น sets ตามตรรกะ
- ดูรายการทั้งหมดได้ในไดเรกทอรี pkg
- แม้ไม่มีซอฟต์แวร์ที่ต้องการ ก็มีความเป็นไปได้สูงว่ายังสามารถติดตั้งผ่าน pkgsrc หรือ nix ได้
ช่องทางติดต่อ
- mailing list อยู่ที่ ~mcf/oasis@lists.sr.ht
- ช่อง IRC คือ
#oasisบน libera.chat - ใช้สำหรับคำถาม แพตช์ และการสนทนาทั่วไป
1 ความคิดเห็น
ความเห็นจาก Lobste.rs
น่าประทับใจที่มันเป็น static link ทั้งหมด
อย่าไปลิงก์
bashตอนกำลังหัวร้อน ♪bashจำได้ว่าเคยดูโปรเจกต์นี้ราวปี 2020 ก่อนที่ Wayland จะเริ่มลงหลักปักฐาน
ตอนนั้นมันก็น่าประทับใจมากแล้วเพราะกำลังทำ ดิสโทรที่ static link ทั้งหมด ซึ่งรวมถึง display server ของตัวเองด้วย และยิ่งเจ๋งเข้าไปอีกที่ตอนนี้มันยังมีชีวิตอยู่
มีสกรีนช็อตอยู่ที่นี่: https://github.com/oasislinux/oasis/wiki
ของแบบนี้น่าจะใส่ไว้ใน README
จุดที่เป็น static link ทั้งหมด นี่น่าประทับใจมาก
โปรเจกต์ของฉันเองก็เกือบทั้งหมดเป็น static link เหมือนกัน แต่มีข้อยกเว้นฝั่งกราฟิกอย่าง X server หรือ OpenGL/Vulkan
รายการทางเลือก ของไลบรารี/ซอฟต์แวร์ที่เรียบง่ายกว่าซึ่ง Oasis เสนอก็น่าลองเปิดดูเหมือนกัน
ฉันได้เรียนรู้เรื่อง Linux เยอะมากจากการติดตั้ง Oasis ลงบนโน้ตบุ๊ก
แต่ต้องเตรียมใจให้พร้อมพอสมควร และโดยเฉพาะตอนตั้งค่า pkgsrc เพื่อใช้ sway หรือเดสก์ท็อป Wayland อื่น ๆ มันไม่ง่ายเลย
coreutils เวอร์ชัน suckless ก็เข้ากันไม่ได้กับซอฟต์แวร์หลายตัว จึงควรคาดไว้ล่วงหน้าว่าจะมีปัญหา
จุดที่ดีมากเป็นพิเศษคือมันทำให้ดีบักและทำความเข้าใจ user space ทั้งชุดได้ง่ายมาก และในฐานะแนวทางสำหรับสร้างระบบที่ทำซ้ำได้ มันให้ความรู้สึกเหมือนมีมนตร์น้อยกว่า nix มาก
BearSSL ไม่ได้ออกรุ่นใหม่มานานแล้ว แต่ก็ยังมี commit เป็นครั้งคราว และเดือนที่แล้วก็มีอยู่ไม่กี่อัน
อย่างไรก็ตาม มันยังไม่รองรับ TLS 1.3 เลยถูกถอดออกจาก curl 8.15 เมื่อปีที่แล้ว และ TLS 1.2 ก็ยังถือว่าปลอดภัยอยู่
ฝั่ง curl เองก็มีความกังวลว่าถ้ามี commit ใหม่และการแก้บั๊กน้อย อาจไม่มีผู้ใช้คนไหนรู้สึกสบายใจได้ แต่ Thomas ตอบว่า “ขออภัยที่ผมสร้างบั๊กในโค้ดได้ไม่มากพอ ครั้งหน้าจะพยายามทำให้สะเพร่ากว่านี้”
README ที่อ้างถึงเป็นเวอร์ชันเก่า และใน 0.6 ก็อธิบายว่า BearSSL เป็น ซอฟต์แวร์ระดับเบต้า โดยฟีเจอร์ที่วางแผนไว้ส่วนใหญ่ถูกทำเสร็จแล้ว การนำไปใช้ในโปรดักชันอาจถือว่าค่อนข้างใจกล้า แต่ก็ไม่ถึงกับเป็นตัวเลือกที่บ้าบิ่นทั้งหมด
ในความเห็นของฉัน มาตรฐานของ Thomas Pornin สำหรับคำว่า “ซอฟต์แวร์คุณภาพระดับเบต้า” น่าจะสูงกว่าสิ่งที่คนส่วนใหญ่มองว่าเป็นระดับพร้อมใช้ในโปรดักชัน