- เป็นดิสโทรเชิงทดลองที่ปรับเปลี่ยนธรรมเนียมไดเรกทอรีของลินุกซ์แบบเดิมอย่างมาก เพื่อให้เข้าใจโครงสร้างระบบโดยยึด ไดเรกทอรีตามโปรแกรม เป็นศูนย์กลาง
- แทนที่จะใช้ฐานข้อมูลแพ็กเกจแยกต่างหาก จะใช้ ตัวไฟล์ซิสเต็มเองเป็นฐานข้อมูล โดยโปรแกรมจะถูกจัดวางตามเวอร์ชันในพาธอย่าง
/Programs/Nano/8.3 - รีลีสล่าสุด 017.01 เป็นอัปเดตแก้บั๊กที่ออกมาหลังจากรีลีส ISO ก่อนหน้าราว 5 ปี และจัดการปัญหาสำคัญบางส่วนที่เกิดขึ้นในช่วงนั้น
- ผู้ก่อตั้ง Hisham Muhammad ถอนตัวจากการดูแลหลังดำเนินโครงการมา 25 ปี และโปรเจ็กต์ถูกรับช่วงต่อโดยผู้ใช้ GitHub
@fyrak1s - สามารถรันแบบตรง ๆ ในสภาพแวดล้อม Live หรือจะติดตั้งลงฮาร์ดไดรฟ์ก็ได้ เพื่อทดลอง โครงสร้างไฟล์ซิสเต็ม ที่แตกต่างจากดิสโทรทั่วไปด้วยตนเอง
วิธีจัดการแพ็กเกจด้วยไฟล์ซิสเต็ม
- GoboLinux เป็นดิสโทรลินุกซ์เชิงทดลองที่นิยามลำดับชั้นของไฟล์ซิสเต็มใหม่ทั้งหมด
- แกนหลักคือโครงสร้างที่ไม่ใช้ฐานข้อมูลแพ็กเกจแยก แต่ใช้ ไฟล์ซิสเต็มเป็นฐานข้อมูล
- แต่ละโปรแกรมจะอยู่ในไดเรกทอรีของตัวเอง
- ตัวอย่างคือ
/Programs/Nano/8.3,/Programs/GCC/14.2.0
- เนื่องจากมีโครงสร้างต่างจากดิสโทรลินุกซ์ทั่วไป ผู้ใช้ที่เพิ่งพบครั้งแรกควรอ่านเอกสารก่อน
รีลีส 017.01 และการเปลี่ยนผู้ดูแลโครงการ
- เวอร์ชันปัจจุบันคือ 017.01
- เป็น สภาพแวดล้อม Live ที่บูตใช้งานได้จาก USB drive และ DVD
- สามารถติดตั้งลงฮาร์ดไดรฟ์ได้ด้วย
- ดาวน์โหลด ISO ได้จาก Downloads
- v017.01 เป็นอัปเดตแก้บั๊กที่ออกมาหลังช่วงว่างยาวราว 5 ปี
- แก้ปัญหาสำคัญบางส่วนที่เกิดขึ้นหลังรีลีส ISO ก่อนหน้า
- ดูรายละเอียดการเปลี่ยนแปลงได้ใน release notes
- การดำเนินโครงการก็มีการเปลี่ยนแปลงเช่นกัน
- Hisham Muhammad ผู้ก่อตั้งและผู้ที่นำ GoboLinux มาตลอด 25 ปี ได้ถอนตัวอย่างเป็นทางการ
- โปรเจ็กต์จะดำเนินต่อภายใต้การดูแลของ
@fyrak1s - Lucas Correia Villa Real หรือ
paranoiddได้ร่วมดูแล GoboLinux กับ Hisham มาจนถึงเดือนมิถุนายน 2021
- ศูนย์กลางคอมมูนิตี้กระจายอยู่ในแชต ฟอรัม และวิกิ
- Zulip Chat และ IRC channel
#gobolinuxบนirc.libera.chat - GoboLinux forum
- GoboLinux wiki
- Zulip Chat และ IRC channel
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าใครรู้สึก ต่อต้านโดยสัญชาตญาณทันที กับการออกแบบของ GoboLinux เอกสาร “I am not clueless”¹ ที่มีอายุ 20 ปีน่าจะมีทั้งบริบทและเหตุผลอธิบายไว้พอสมควร
ความรู้สึกต่อต้านนั้นยังไม่ได้หายไปหมด แต่ก็ไม่แรงเท่าเมื่อก่อนแล้ว ;)
¹ https://gobolinux.org/doc/articles/clueless.html
สรุปได้ประมาณว่า “เรารู้ว่าเราแตกต่าง มันเรียบง่ายมาก อาจไม่คุ้นเคย แต่เข้าใจและใช้งานได้ง่าย คุณไม่จำเป็นต้องใช้ก็ได้ เราชอบแบบนี้และพอใจกับมัน”
make all programs relocatableของบทความที่ลิงก์ไว้ มีการพูดถึงการใช้libprefixเพื่อให้ต้องเขียนแอปทั้งหมดใหม่ เลยสงสัยว่าlibprefixหมายถึงอะไรกันแน่ลองค้นในเว็บแล้วก็ไม่เจอผลลัพธ์ที่ใช้ประโยชน์ได้
ตัวอย่างเช่น ปฏิกิริยาแรกส่วนหนึ่งมาจากการใช้ตัวพิมพ์ใหญ่ โดย
Programsที่ขึ้นต้นด้วย P ใหญ่ทำให้นึกถึงProgram Filesของ Windows เลยเกิดแรงต้านทางอารมณ์ถ้าต้องพิมพ์
LibX11แทนlibx11ก็คงหงุดหงิดนิดหน่อยเหมือนกันปกติไฟล์ซิสเต็มของ Linux แยกตัวพิมพ์เล็กใหญ่ แต่ชื่อแพ็กเกจก็คงหลีกเลี่ยงชื่อซ้ำที่ต่างกันแค่ตัวพิมพ์อยู่แล้ว และดิสโทรที่มุ่งทำลำดับชั้นให้เป็นมิตรกับผู้ใช้ก็ดูไม่น่าจะวางไดเรกทอรีที่ต่างกันแค่ตัวพิมพ์ไว้ที่รากระบบ
ถึงอย่างนั้น ถ้าตัวอย่างเป็น
/packages/libx11/1.6.9,/packages/gcc/9.2.0ปฏิกิริยาแรกก็น่าจะน้อยกว่านี้มาก และข้อดีก็ดูจะไม่ได้ลดลงเลยแม้แต่น้อยน่าเสียดายจริง ๆ ที่แนวคิดของ GoboLinux ไม่ได้หยั่งรากในชุมชน Linux กระแสหลัก
โครงสร้างไฟล์ซิสเต็มของ Linux นั้นยุ่งเหยิงอย่างสิ้นเชิง
การทำให้มันใช้งานได้อย่างถูกต้องไม่เคยเป็นเรื่องเล็กน้อย และการทำให้มีประสิทธิภาพก็ยิ่งยากกว่า
รู้สึกว่าเพิ่งจะในช่วงไม่กี่ปีมานี้เองที่โมเดลแบบนี้เริ่มเข้าใกล้ระดับที่ดูแลรักษาได้จริงสำหรับการแจกจ่ายซอฟต์แวร์ส่วนใหญ่
โมเดลของ GoboLinux ต้องจัดการไดเรกทอรีเวอร์ชันอย่าง
/Programs/Xorg/7.0ด้วยมือ แต่ Nix แก้ปัญหานั้นด้วยการกำหนดพาธติดตั้งของแพ็กเกจจากแฮชของสูตรการบิลด์/homeกับ/tmpนอกนั้นแทบจะเป็นกองของปะปนที่เอาอะไรก็ไปใส่ไว้ที่ไหนก็ได้
GoboLinux เป็นโปรเจ็กต์แรกที่แสดงให้เห็นว่า บน Linux คุณทำในสิ่งที่อยากให้เป็นได้จริง ๆ
/optกับ/srvและถ้าชอบก็รวม/usr/local/optด้วย ต่างก็ให้ข้อดีแบบที่ GoboLinux มีอยู่พอสมควรในเรื่องการจัดการองค์ประกอบทีละชิ้นจากมุมมองของดิสโทร ทุกอย่างก็มีเหตุผลในแบบของมัน
ถ้าพิมพ์
dpkg -S this-fileคุณก็จะรู้ได้เร็วว่าทำไมไฟล์ใน/usrถึงอยู่ตรงนั้น และดิสโทรมีหน้าที่คอยวาดภาพรวมของทั้งระบบเลยสงสัยว่าคุณมองว่าส่วนไหนที่ยุ่งเหยิงที่สุด
น่าสนใจที่มันแมปพาธแบบดั้งเดิมไปยังพาธคู่กันของ GoboLinux เพื่อรักษา ความเข้ากันได้ กับมรดกของ Unix แบบโปร่งใส
ไม่มีเวทมนตร์พิเศษอะไรเลย โดย
/binเป็นลิงก์ไปที่/System/Index/binและ/usr/binกับ/usr/sbinก็เช่นกัน ทำให้ไดเรกทอรี “ไบนารี” ทั้งหมดชี้ไปยังที่เดียวกันผลคือไม่ว่าจะเข้าถึงผ่านพาธมาตรฐานไหน ไฟล์ก็ยังทำงานได้ ดังนั้นมันอาจเข้ากันได้มากกว่าดิสโทรทั่วไปเสียอีก ที่สคริปต์อาจพังเพราะอ้างถึง
/usr/bin/fooทั้งที่ไฟล์จริงอยู่ที่/usr/local/bin/fooขอถามแบบไม่ค่อยรู้เรื่องนักนะ macOS ทำงานในลักษณะคล้ายแบบนี้อยู่ระดับหนึ่งหรือเปล่า?
วิธีที่แอปพลิเคชันดูเหมือนเป็น “ไฟล์” เดียวที่จัดการได้ด้วยการลากแล้ววางนั้นดีมากจริง ๆ
เวลาอยากรู้ว่าอะไรอยู่ตรงไหนและถูกติดตั้งไว้ที่ไหนบน Ubuntu มักทำให้ฉันรู้สึกเหมือนตัวเองโง่ไปเลย
ก็เข้าใจว่าทำไมถึงทำแบบนั้น
โครงสร้างไดเรกทอรีของการติดตั้ง Linux ทั่วไปเป็นเขาวงกตที่ชวนสับสนแม้แต่สำหรับคนสายเทคนิค และยิ่งหนักเข้าไปอีกสำหรับผู้ใช้ทั่วไปที่ดิสโทรหลัก ๆ ตั้งเป้าไว้
แต่สุดท้ายมันก็เป็นการจัดการที่อาการ ไม่ใช่ต้นเหตุ และคิดว่าดิสโทร Linux ควรมีมากกว่านี้ที่จริงจังกับการทำโครงสร้างไฟล์ซิสเต็มให้ทันสมัยแบบที่ Gobo ทำ
ฉันเองก็อยากลองทำดูเหมือนกัน
เป้าหมายคือสร้างโครงสร้างที่อธิบายตัวเองได้อย่างสมเหตุสมผล พาผู้ใช้มือใหม่ให้ออกห่างจากพื้นที่อันตราย และทำให้ตัวจัดการไฟล์แทบไม่ต้องซ่อนอะไรเลยก็ยังไม่เป็นปัญหา
~/Libraryอยู่ดีกรณีอย่าง Minecraft launcher ที่เก็บทุกอย่างรวมถึงโลกและไฟล์เซฟไว้ใน bundle เองก็ดูน่าสนใจไปอีกแบบ
~/Libraryและ/Libraryแม้แต่บน macOS ก็ไม่ใช่เรื่องแปลกที่การลบบางแอปต้องทำตามคู่มือการลบด้วยมือหลายขั้นตอน
โดยเฉพาะถ้าเป็นแอปที่เพิ่มรายการตอนล็อกอินก็ยิ่งสำคัญ
อย่างน้อยระบบเพิ่ม/ลบโปรแกรมของ Windows ก็ยังมีจุดศูนย์กลางสำหรับเรียกการถอนการติดตั้ง และแอปส่วนใหญ่ก็มักทำตามแนวทางนั้นอย่างถูกต้อง
ใช้
dpkgทำแบบเดียวกันไม่ได้หรือ?การตั้งชื่อไดเรกทอรีตัวแรกให้ขึ้นต้นด้วยตัวพิมพ์ใหญ่ไม่ค่อยเวิร์ก
มันให้ความรู้สึกเหมือนมีงานเพิ่มตอนไล่ดูพาธ และการต้องกด Shift คู่กับตัวอักษรหรือตัวเลขทุกครั้งก็น่ารำคาญมากในการใช้งานบรรทัดคำสั่งประจำวัน
/Programsใช้จำนวนคีย์กดเท่ากับ/usrทุกประการแค่สแลช, p ตัวพิมพ์เล็ก, แล้ว Tab ก็พอ
มันไม่ได้บังคับให้คุณเสียสละการใช้งานเพื่อประหยัดคลิกนาฬิกาและหน่วยความจำอันล้ำค่าของ PDP-11
มันน่าขำเสมอที่แฟน ๆ แนว “แยกพิมพ์เล็กพิมพ์ใหญ่ดีที่สุด!” มองข้ามไปว่านี่เป็นผลลัพธ์จากข้อจำกัดของระบบดั้งเดิมเท่านั้น
ไม่ใช่ฟีเจอร์
แถมเรื่องนี้ก็มีการจัดการไว้อย่างชัดเจนแล้ว
แค่
set completion-ignore-case Onก็ทำให้ชีวิตดีขึ้นมากเพราะถึงไม่ได้ใช้ GoboLinux อย่างน้อยคุณก็ไม่ต้องกด Shift เพิ่มอีกครั้งกับทุกชื่อไฟล์ที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่
หรือจะใช้ชีวิตต่อเหมือนปี 1977 ก็ได้
VT100 ของคุณ กฎของคุณ
เคยเห็นคนพูดทีหลังว่า “ทำไมถึงไม่ใช้ bash เดิม ๆ สำหรับการท่องระบบทั่วไป แต่ไปติดตั้งเชลล์อื่น” ซึ่งก็เท่ากับว่าไม่รู้จักเชลล์ของตัวเองดีพอ
อีกอย่าง ไม่ว่าเชลล์ไหนก็สามารถมีการเติมคำอัตโนมัติแบบไม่สนตัวพิมพ์เล็กพิมพ์ใหญ่ได้ และ Fish ก็มีให้เป็นค่าเริ่มต้น
ให้ความรู้สึกแบบ Windows
โปรเจ็กต์นี้มีศักยภาพในการลดภาระทางความคิดของเราได้มากทีเดียว
หวังว่าจะสำเร็จ
แก้ไข: เพิ่งเห็นว่ามันเป็นโปรเจ็กต์อายุ 20 ปีแล้ว
https://github.com/gobolinux/Recipes/commits/master/
สมเหตุสมผลเสียจนแทบจะร้องไห้
การจัดการลบความซ้ำซ้อนของสำเนาไลบรารีหลายชุด หากจำเป็นจริง ๆ ก็ควรให้ไฟล์ซิสเต็มเป็นคนจัดการ
ท้ายที่สุดมันคือความซ้ำซ้อนในระดับไฟล์ จึงควรแก้ในระดับนั้น
พวกแอปปิดซอร์สที่แย่มาก ๆ มักคาดหวังจากระบบของผู้ใช้มากเกินไป
Steam client เป็นตัวอย่างแบบนั้น เพราะมันแจกสคริปต์
bashไม่ใช่สคริปต์shและจากข้อกำหนดเรื่องคอนเทนเนอร์ userspace สำหรับ Linux mount ก็ทำให้มันตั้งสมมุติฐานอย่างแรงว่าต้องมีการจัดวางไฟล์แบบ Debian/Ubuntu รวมถึงต้องใช้ตัวเลือกแปลก ๆ ที่มีเฉพาะ GNU ของหลายคำสั่งด้วยยังมีไลบรารี 32 บิตอีกเยอะ
แต่ดูเหมือนมันยังควบคุม ABI อยู่ และน่าจะใช้คำสั่ง
.symverของ binutils gasอย่างน้อยความยุ่งเหยิงในตอนนี้ก็เป็นสิ่งที่ Steam กำลังยัดเยียดเข้าคอเรา และถ้าไม่ใช่ดิสโทรที่ไม่เล่นเกม ก็คงเลี่ยงได้ยาก
ต่อให้ในกลุ่มเกมเมอร์เอง ก็น่าจะมีคนจำนวนมากที่มีพีซีสำหรับเล่นเกมโดยเฉพาะแยกต่างหาก
อยากให้คนที่ฉลาดกว่าผมมากช่วยอธิบายว่าทำไมสิ่งนี้ถึงดีกว่า หรือดีกว่าจริงไหม เมื่อเทียบกับดิสโทรอย่างsnap/FlatpakหรือNixOS
ถ้ามองผิวเผินโดยที่ยังเข้าใจไม่ลึก วิธีนี้ดูเหมือนจะเรียบง่ายที่สุด
แน่นอนว่านี่พูดบนพื้นฐานว่าผมรู้น้อย
ที่ Flatpak กับ NixOS ซับซ้อนกว่านั้นก็มีเหตุผลรองรับ
เช่น มันไม่เก็บ dependency เวอร์ชันเดียวกันเป๊ะซ้ำหลายชุดลงดิสก์
ที่ใส่เครื่องหมายคำพูดก็เพราะมีประเด็นด้านความปลอดภัย
NixOS ทำให้ความเข้ากันได้กับโปรแกรมเดิมพัง ขณะที่ Gobo ไม่เป็นแบบนั้น
แต่คลังแพ็กเกจของ NixOS ได้รับการดูแลดีกว่า Gobo แบบเทียบไม่ติด และฝั่ง Gobo เองก็ไม่สมบูรณ์และตามหลังอยู่หลายปี
ถึงอย่างนั้น สิ่งที่พูดถึงทั้งหมดตรงนี้ก็ยังตามหลังวิธีที่ Android ใช้เก็บแอป
บน Android สามารถแจกจ่ายแต่ละแอปเป็นไฟล์เดี่ยวที่นำไปแจกจ่ายได้ง่าย มี sandbox ที่เหมาะสม และมีไดเรกทอรีของตัวเอง
อีกจุดที่แนวทางอื่นมักพลาดคือ แต่ละแอปมีไดเรกทอรีย่อยใต้ไดเรกทอรีของแอปไว้เก็บสถานะของตัวเอง และยังแยกตามผู้ใช้ด้วย
นักพัฒนา GoboLinux สร้าง การจัดวาง filesystem ที่มนุษย์เข้าใจได้อย่าง “ชาญฉลาด” จริง ๆ
มองว่าธรรมเนียม UNIX แบบเก่าที่ใช้อยู่ทุกวันนี้ค่อนข้างเข้าใจยากแล้วในยุคที่ไม่มีข้อจำกัดอย่างชื่อแบบ 8.3, พื้นที่จัดเก็บไม่พอ, หรือปัญหาไฟล์ขนาดเกิน 1GB อีกต่อไป
เคยรัน GoboLinux 012~015 อยู่หลายปีบนเซิร์ฟเวอร์ที่โฮสต์ซอฟต์แวร์จัดการเวอร์ชัน และโดยรวมถือว่าดีมาก
จุดติดขัดคือถ้าไม่มีแพ็กเกจที่ต้องการ ก็ต้องเขียน recipe เอง
ตัวภาษาเขียน recipe ของ GoboLinux เองนั้นเข้าใจง่าย แต่แพ็กเกจหนึ่งมักพึ่งพาไลบรารีเป็นสิบ ๆ ตัวหรือหลายสิบตัว เลยต้องเสียเวลาไล่ตาม dependency ให้ครบ, จับคู่เวอร์ชัน, หา URL ของไลบรารีกับแพ็กเกจ แล้วค่อยสร้าง recipe ใหม่
สุดท้ายก็ย้ายไป Debian แต่จนถึงตอนนี้พอเห็นว่าไฟล์คอนฟิกยังอยู่ใน
/etcและไบนารีไปอยู่ใน/usr/binหรือ/usr/local/binก็ยังสะดุ้งอยู่มองว่า systemd ทั้งน่ารำคาญและเหมือนปลาหมึก
มักต้องใช้
findเพื่อหาไฟล์.serviceที่เกี่ยวข้อง และเชื่อไม่ได้เลยว่าจะอยู่รวมกันในที่เดียว แถม command line ก็ไม่ค่อย intuitiveในทางกลับกัน Gobo มีชุดสคริปต์สำหรับจัดการ service ที่เรียบง่ายมากและใช้งานสะดวก
ถึงอย่างนั้น ความสะดวกที่ติดตั้งสิ่งที่ต้องการได้ทันทีด้วย
apt getหรือdpkg -iก็เอาชนะการออกแบบอันชาญฉลาดและสมเหตุสมผลกว่ามากของ GoboLinux ได้ทุกวันนี้จำนวน Linux distribution ที่รองรับลดลงจากยุคที่มีตัวเลือกมหาศาล จนแทบจะมี Debian หรือ Ubuntu รวมมาให้เป็นพื้นฐานเสมอ ทำให้โอกาสที่จะติดตั้งแพ็กเกจหรือโปรแกรมไม่ได้ แม้อยู่นอก repository ก็มีน้อย
macOS เองก็ดูจะใช้แนวทางคล้าย GoboLinux อยู่พอสมควร และเพราะแบบนั้น ก่อนจะมีเวอร์ชันหลัง ๆ ที่ค่อนข้างไม่เป็นมิตรกับผู้ใช้ ก็ถือว่าจัดการ macOS ผ่าน command line ได้ค่อนข้างง่าย
ตัวอย่างเช่น USB drive จะอยู่ที่
/Volumesและไฟล์คอนฟิกของโปรแกรมจะอยู่ใต้~/Librarysystemctl status fooก็จะบอกได้อย่างชัดเจนตั้งแต่บรรทัดที่สองว่าเกี่ยวข้องกับไฟล์อะไรบ้างเช่น ในผลลัพธ์ของ
systemctl status getty@tty1.serviceจะมีLoaded: loaded (/lib/systemd/system/getty@.service; enabled; preset: enabled)แสดงอยู่ ทำให้รู้ได้ทันทีว่าเป็น/lib/systemd/system/getty@.service