Đầu tiên, từ chối trách nhiệm xung đột lợi ích trước mắt: Tôi là nhà phát triển GoboLinux lâu năm.
Thứ hai, một tuyên bố trước mắt về chuyên môn tên miền: Tôi là một nhà phát triển GoboLinux lâu năm.
Có một vài cấu trúc khác nhau trong sử dụng hiện tại. GoboLinux có một và các công cụ như GNU Stow , Homebrew , v.v., sử dụng một cái gì đó khá giống nhau (chủ yếu cho các chương trình người dùng). NixOS cũng sử dụng hệ thống phân cấp không chuẩn cho các chương trình và triết lý sống. Đây cũng là một thử nghiệm LFS khá phổ biến.
Tôi sẽ mô tả tất cả những điều đó, và sau đó nhận xét từ kinh nghiệm về cách thực hiện trong thực tế ("tính khả thi"). Câu trả lời ngắn gọn là có, nó khả thi, nhưng bạn phải thực sự muốn nó .
GoboLinux
GoboLinux có cấu trúc rất giống với những gì bạn mô tả. Phần mềm được cài đặt bên dưới /Programs
: /Programs/ZSH/5.0.8
chứa tất cả các tệp thuộc ZSH 5.0.8, trong các thư mục bin
/ lib
/ ... thông thường . Các công cụ hệ thống tạo liên kết tượng trưng đến các tệp đó theo cấu trúc /System/Links
phân cấp, ánh xạ vào /usr
. Các PATH
biến chỉ chứa thư mục thực thi thống nhất, và LD_LIBRARY_PATH
là không sử dụng. Nhiều phiên bản phần mềm có thể cùng tồn tại cùng một lúc, nhưng chỉ một tệp theo tên đã cho ( bin/zsh
) sẽ được liên kết tích cực cùng một lúc. Bạn có thể truy cập những người khác bằng đường dẫn đầy đủ của họ.
Một tập hợp các liên kết tương thích cũng tồn tại, do đó /bin
, /usr/bin
ánh xạ tới thư mục thực thi hợp nhất, v.v. Điều này làm cho cuộc sống dễ dàng hơn cho phần mềm trong thời gian chạy. Một bản vá kernel, GoboHide, cho phép các liên kết tương thích đó bị ẩn khỏi danh sách tệp (nhưng vẫn có thể duyệt qua).
Đối với câu trả lời khác, bạn không cần phải sửa đổi mã hạt nhân: GoboHide hoàn toàn là mỹ phẩm và hạt nhân không phụ thuộc vào đường dẫn không gian người dùng nói chung². GoboLinux không có hệ thống init bespoke, nhưng điều đó cũng không bắt buộc phải làm điều này.
Khẩu hiệu luôn là "hệ thống tập tin là trình quản lý gói", nhưng có những công cụ quản lý gói thông thường trong hệ thống. Bạn có thể làm mọi việc bằng cp
, rm
và ln
, mặc dù.
Nếu bạn muốn sử dụng GoboLinux, bạn rất hoan nghênh. Tuy nhiên, tôi sẽ lưu ý rằng đó là một nhóm phát triển nhỏ và bạn có thể thấy rằng một số phần mềm bạn muốn không được đóng gói nếu không ai muốn sử dụng nó trước đây. Tin tốt là nói chung khá dễ dàng để xây dựng một chương trình cho hệ thống (một "công thức" tiêu chuẩn dài khoảng ba dòng); tin xấu là đôi khi nó phức tạp một cách khó chịu, mà tôi sẽ đề cập nhiều hơn bên dưới.
Ấn phẩm
Có một vài "ấn phẩm". Tôi đã trình bày tại linux.conf.au 2010 trên toàn bộ hệ thống bao gồm tất cả mọi thứ nói chung, có sẵn trong video: ogv mp4 (cũng trên gương Linux Úc địa phương của bạn); Tôi cũng đã viết lên ghi chú của tôi vào văn xuôi. Ngoài ra còn có một vài tài liệu cũ hơn, bao gồm " Tôi không biết gì ", trên trang web GoboLinux , trong đó đề cập đến một số phản đối và vấn đề. Tôi nghĩ rằng tất cả chúng ta ngày nay ít gung-ho hơn một chút và tôi nghi ngờ rằng một bản phát hành trong tương lai sẽ sử dụng /usr
làm vị trí cơ sở cho các liên kết tượng trưng.
NixOS
NixOS đặt từng chương trình được cài đặt vào thư mục riêng của nó bên dưới /nix/store
. Các thư mục đó được đặt tên giống như /nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/
- có một hàm băm mật mã đại diện cho toàn bộ các phụ thuộc và cấu hình dẫn đến chương trình đó. Bên trong thư mục đó là tất cả các tệp được liên kết, với các vị trí bình thường nhiều hơn hoặc ít hơn cục bộ.
Nó cũng cho phép bạn có nhiều phiên bản cùng một lúc và sử dụng bất kỳ phiên bản nào trong số chúng. NixOS có toàn bộ triết lý liên quan đến cấu hình có thể tái tạo: về cơ bản, nó có một hệ thống quản lý cấu hình được đưa vào từ đầu. Nó dựa vào một số thao tác môi trường để trình bày đúng thế giới của các chương trình được cài đặt cho người dùng.
LFS
Việc truy cập Linux From Scratch khá đơn giản và thiết lập chính xác thứ bậc bạn muốn: chỉ cần tạo các thư mục và định cấu hình mọi thứ để cài đặt đúng nơi. Tôi đã thực hiện nó một vài lần trong việc xây dựng các thử nghiệm GoboLinux và nó không khó hơn LFS đơn giản. Bạn cần phải tạo các liên kết tương thích trong trường hợp đó; mặt khác, nó khó hơn nhiều, nhưng sử dụng cẩn thận các liên kết có thể tránh điều đó nếu bạn thực sự muốn.
Tôi cảm thấy như có một LFS Gợi ý về chính xác điều đó tại một thời điểm, nhưng dường như tôi không thể tìm thấy nó bây giờ.
Về tính khả thi
Vấn đề của FHS là nó là một tiêu chuẩn, nó rất phổ biến và nó phản ánh rộng rãi việc sử dụng hiện tại tại thời điểm nó được viết. Hầu hết người dùng sẽ không bao giờ ở trên một hệ thống không tuân theo bố cục đó. Kết quả của điều đó là rất nhiều phần mềm có sự phụ thuộc tiềm ẩn vào nó mà không ai nhận ra, thường là hoàn toàn vô tình.
Tất cả những kịch bản với #!/bin/bash
? Không tốt nếu bạn không có Bash ở đó. Đó là lý do tại sao GoboLinux có tất cả các liên kết tương thích đó; nó chỉ thực tế Rất nhiều phần mềm không hoạt động hoặc trong thời gian xây dựng hoặc trong thời gian chạy theo bố cục không chuẩn, và sau đó nó yêu cầu vá để sửa, thường khá xâm phạm.
Chương trình Autoconf cơ bản của bạn thường sẽ vui vẻ cài đặt bất cứ nơi nào bạn nói với nó và khá dễ dàng để tự động hóa quá trình chuyển chính xác --prefix
. Các hệ thống xây dựng khác không phải lúc nào cũng đẹp, bằng cách cố tình nướng trong hệ thống phân cấp hoặc bởi các tác giả hàng đầu để viết cấu hình không di động. CMake là một tội phạm lớn trong thể loại sau. Điều đó có nghĩa là nếu bạn muốn sống trong thế giới này, bạn phải sẵn sàng làm rất nhiều công việc khó khăn ở phía trước trong các hệ thống xây dựng của người khác. Đó là một rắc rối thực sự khi phải tự động vá các tệp được tạo trong quá trình biên dịch.
Thời gian chạy là một vấn đề một lần nữa. Nhiều chương trình có giả định về nơi các tệp của riêng họ hoặc tệp của người khác được tìm thấy có liên quan đến chúng hoặc hoàn toàn. Khi bạn bắt đầu sử dụng các liên kết tượng trưng để đưa ra một quan điểm nhất quán, rất nhiều chương trình có lỗi xử lý chúng (hoặc đôi khi, được cho là hành vi đúng được cho là không có ích cho bạn). Ví dụ, một công cụ foobar
có thể mong đợi tìm thấy baz
tệp thực thi bên cạnh nó hoặc trong ../sbin
. Tùy thuộc vào việc nó có đọc được liên kết tượng trưng của nó hay không, chúng có thể là hai vị trí khác nhau và dù sao chúng cũng không thể đúng.
Một vấn đề kết hợp là /usr/share
thư mục. Tất nhiên, nó dành cho các tệp được chia sẻ, nhưng khi bạn đặt mọi chương trình vào tiền tố riêng thì chúng không còn thực sự được chia sẻ. Điều đó dẫn đến các chương trình không thể tìm thấy các biểu tượng tiêu chuẩn và tương tự. GoboLinux đã xử lý vấn đề này theo một cách khá xấu xí: tại thời điểm xây dựng, $prefix/share
là một liên kết tượng trưng $prefix/Shared
và sau khi xây dựng liên kết đã được trỏ đến share
thư mục toàn cầu thay thế. Bây giờ nó sử dụng hộp cát thời gian biên dịch và di chuyển tệp để xử lý share
(và các thư mục khác), nhưng lỗi thời gian chạy từ các liên kết đọc vẫn có thể là một vấn đề.
Suites của nhiều chương trình là một vấn đề khác. GoboLinux chưa bao giờ khiến Gnome hoạt động hoàn toàn và tôi cũng không tin NixOS có được, bởi vì sự phụ thuộc lẫn nhau về bố cục được nung nấu đến mức chỉ có thể chữa được tất cả.
Vì vậy, vâng, nó khả thi , nhưng:
- Có khá nhiều công việc liên quan đến việc làm cho mọi thứ hoạt động.
- Một số phần mềm có thể không bao giờ hoạt động.
- Mọi người sẽ nhìn bạn buồn cười.
Tất cả những điều đó có thể hoặc không thể là một vấn đề cho bạn.
Phiên bản 14.01 sử dụng /System/Index
, ánh xạ trực tiếp lên /usr
. Tôi nghi ngờ một phiên bản trong tương lai có thể bỏ cấu trúc phân cấp Liên kết / Chỉ mục và sử dụng /usr
trên bảng.
² Nó đòi hỏi /bin/sh
phải tồn tại theo mặc định.