Pertama, penafian konflik kepentingan di muka: Saya sudah lama menjadi pengembang GoboLinux.
Kedua, klaim awal keahlian domain: Saya sudah lama menjadi pengembang GoboLinux.
Ada beberapa struktur berbeda yang digunakan saat ini. GoboLinux memilikinya, dan alat-alat seperti GNU Stow , Homebrew , dll, menggunakan sesuatu yang sangat mirip (terutama untuk program pengguna). NixOS juga menggunakan hierarki non-standar untuk program, dan filosofi kehidupan. Ini juga merupakan eksperimen LFS yang cukup umum.
Saya akan menggambarkan semua itu, dan kemudian mengomentari pengalaman tentang bagaimana hal itu berhasil dalam praktiknya ("kelayakan"). Jawaban singkatnya adalah ya, itu layak, tetapi Anda harus benar-benar menginginkannya .
GoboLinux
GoboLinux memiliki struktur yang sangat mirip dengan yang Anda gambarkan. Perangkat lunak diinstal di bawah /Programs
: /Programs/ZSH/5.0.8
berisi semua file milik ZSH 5.0.8, di direktori bin
// lib
/ ... biasa . Alat sistem membuat symlink ke file-file tersebut di bawah /System/Links
hierarki, yang memetakan ke /usr
¹. The PATH
variabel hanya berisi direktori executable tunggal terpadu, dan LD_LIBRARY_PATH
tidak terpakai. Beberapa versi perangkat lunak dapat hidup berdampingan sekaligus, tetapi hanya satu file dengan nama yang diberikan ( bin/zsh
) akan ditautkan secara aktif sekaligus. Anda dapat mengakses yang lain dengan jalur lengkap mereka.
Sekumpulan symlink kompatibilitas juga ada, jadi /bin
dan /usr/bin
petakan ke direktori executable yang disatukan, dan seterusnya. Ini membuat hidup lebih mudah untuk perangkat lunak pada saat dijalankan. Patch kernel, GoboHide, memungkinkan symlink kompatibilitas disembunyikan dari daftar file (tetapi masih dapat dilalui).
Kontra jawaban lain, Anda tidak perlu mengubah kode kernel: GoboHide murni kosmetik, dan kernel tidak bergantung pada jalur ruang pengguna pada umumnya². GoboLinux memang memiliki sistem init yang dipesan lebih dahulu, tetapi itu juga tidak diperlukan untuk melakukan ini.
Tagline selalu menjadi "sistem file adalah manajer paket", tetapi ada alat manajemen paket yang cukup biasa dalam sistem. Anda dapat melakukan segala sesuatu dengan menggunakan cp
, rm
, dan ln
, meskipun.
Jika Anda ingin menggunakan GoboLinux, Anda dipersilahkan. Saya akan mencatat, bahwa itu adalah tim pengembangan kecil, dan Anda mungkin menemukan bahwa beberapa perangkat lunak yang Anda inginkan tidak dikemas jika tidak ada yang ingin menggunakannya sebelumnya. Kabar baiknya adalah bahwa umumnya cukup mudah untuk membangun program untuk sistem ("resep" standar adalah sekitar tiga baris panjang); berita buruknya adalah kadang-kadang rumit dan tidak menyenangkan, yang akan saya bahas lebih lanjut di bawah ini.
Publikasi
Ada beberapa "publikasi". Saya memberikan presentasi di linux.conf.au 2010 tentang sistem secara keseluruhan yang mencakup semuanya secara umum, yang tersedia dalam video: ogv mp4 (juga di mirror Linux Australia lokal Anda); Saya juga menulis catatan saya menjadi prosa. Ada juga beberapa dokumen yang lebih tua, termasuk yang terkenal " Aku tidak mengerti ", di situs web GoboLinux , yang membahas beberapa keberatan dan masalah. Saya pikir kita semua sedikit kurang gung-ho hari ini, dan saya menduga bahwa rilis di masa depan akan diadopsi /usr
sebagai lokasi dasar untuk symlink.
NixOS
NixOS menempatkan setiap program yang diinstal ke dalam direktori sendiri di bawah /nix/store
. Direktori-direktori itu bernama sesuatu/nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/
- ada hash kriptografi yang mewakili seluruh rangkaian dependensi dan konfigurasi yang mengarah ke program itu. Di dalam direktori itu terdapat semua file yang terkait, dengan lokasi yang lebih atau kurang normal secara lokal.
Ini juga memungkinkan Anda untuk memiliki beberapa versi sekaligus, dan untuk menggunakannya. NixOS memiliki seluruh filosofi yang terkait dengannya dari konfigurasi yang dapat direproduksi: pada dasarnya punya sistem manajemen konfigurasi yang dimasukkan sejak awal. Itu bergantung pada beberapa manipulasi lingkungan untuk menghadirkan dunia yang tepat dari program yang diinstal kepada pengguna.
LFS
Cukup mudah untuk melalui Linux From Scratch dan mengatur hierarki yang Anda inginkan: buat saja direktori dan konfigurasikan semuanya untuk dipasang di tempat yang tepat. Saya sudah melakukannya beberapa kali dalam membangun eksperimen GoboLinux, dan itu tidak jauh lebih sulit daripada LFS biasa. Anda perlu membuat symlink kompatibilitas dalam kasus itu; kalau tidak, ini jauh lebih sulit, tetapi penggunaan union mount yang hati-hati mungkin bisa menghindarinya jika Anda benar-benar menginginkannya.
Saya merasa ada Petunjuk LFS tentang hal itu pada satu titik, tetapi saya tidak bisa menemukannya sekarang.
Tentang Kelayakan
Hal tentang FHS adalah standar, sangat umum, dan secara luas mencerminkan penggunaan yang ada pada saat itu ditulis. Sebagian besar pengguna tidak akan pernah berada pada sistem yang pada dasarnya tidak mengikuti tata letak itu. Hasil dari itu adalah bahwa banyak perangkat lunak memiliki ketergantungan laten padanya yang tidak disadari oleh siapa pun, seringkali sama sekali tidak disengaja.
Dengan semua skrip itu #!/bin/bash
? Tidak bagus jika Anda tidak memiliki Bash di sana. Itu sebabnya GoboLinux memiliki semua symlinks kompatibilitas; itu hanya praktis. Banyak perangkat lunak gagal berfungsi baik pada saat membangun atau pada waktu berjalan di bawah tata letak non-standar, dan kemudian memerlukan perbaikan untuk memperbaiki, seringkali cukup intrusively.
Program dasar Autoconf Anda biasanya akan dengan senang hati menginstal sendiri ke mana pun Anda mengatakannya, dan cukup mudah untuk mengotomatiskan proses mengirimkan yang benar --prefix
. Sistem build lain tidak selalu begitu baik, baik dengan sengaja memadukan hirarki, atau dengan mengarahkan penulis untuk menulis konfigurasi non-portabel. CMake adalah pelaku utama dalam kategori yang terakhir. Itu berarti bahwa jika Anda ingin hidup di dunia ini, Anda harus siap untuk melakukan banyak pekerjaan fiddly di depan dalam sistem pembangunan orang lain. Ini adalah kerumitan nyata harus secara dinamis menambal file yang dihasilkan selama kompilasi.
Runtime adalah masalah lain lagi. Banyak program memiliki asumsi tentang di mana file mereka sendiri, atau file orang lain, ditemukan relatif terhadap mereka atau benar-benar. Ketika Anda mulai menggunakan symlink untuk menyajikan tampilan yang konsisten, banyak program memiliki bug yang menangani mereka (atau kadang-kadang, perilaku yang bisa dibilang benar yang tidak membantu Anda). Misalnya, alat foobar
mungkin berharap untuk menemukan baz
executable di sebelahnya, atau di ../sbin
. Bergantung pada apakah itu membaca symlink atau tidak, itu bisa menjadi dua tempat yang berbeda, dan keduanya tidak benar.
Masalah gabungan adalah /usr/share
direktori. Ini untuk file bersama, tentu saja, tetapi ketika Anda meletakkan setiap program di awalannya sendiri, mereka tidak lagi benar-benar dibagikan. Itu mengarah ke program yang tidak dapat menemukan ikon standar dan sejenisnya. GoboLinux berurusan dengan ini dengan cara yang sangat jelek: pada saat membangun, $prefix/share
adalah symlink ke $prefix/Shared
, dan setelah membangun tautan diarahkan ke share
direktori global sebagai gantinya. Sekarang menggunakan sandboxing waktu kompilasi dan pergerakan file untuk berurusan dengan share
(dan direktori lain), tetapi kesalahan runtime dari membaca tautan masih bisa menjadi masalah.
Suite beberapa program adalah masalah lain. GoboLinux tidak pernah membuat GNOME bekerja sepenuhnya, dan saya tidak percaya NixOS memiliki keduanya, karena saling ketergantungan tata letak begitu terpanggang sehingga hanya sulit untuk menyembuhkan semuanya.
Jadi, ya, itu layak , tetapi:
- Ada cukup banyak pekerjaan yang terlibat hanya dalam membuat fungsi berfungsi.
- Beberapa perangkat lunak mungkin tidak pernah berfungsi.
- Orang-orang akan melihat Anda lucu.
Semua itu mungkin atau mungkin tidak menjadi masalah bagi Anda.
¹ Versi 14.01 digunakan /System/Index
, yang memetakan langsung ke /usr
. Saya menduga versi yang akan datang dapat menjatuhkan hierarki Tautan / Indeks dan menggunakannya /usr
di seluruh papan.
² Itu memang perlu /bin/sh
ada secara default.