Tại sao các nhà phát triển Linux không thể tạo ra một định dạng đóng gói phổ quát?


14

Các lựa chọn định dạng gói nhị phân của nhà cung cấp dường như được xác định bởi một hình thức của Luật Murphy: tất cả các bản phân phối bạn không sử dụng đều có các gói. (Corralary: không tồn tại phân phối nào thỏa mãn các phụ thuộc phân phối của ngăn xếp phần mềm của bạn).

Đây có phải là vấn đề chính trị, hay một điều gì đó sâu sắc hơn, mà chúng ta chưa thấy sự xuất hiện của định dạng gói "xây dựng một lần, chạy ở bất cứ đâu"?


3
bạn dường như chỉ có một sự hiểu biết hời hợt về những gì phân biệt phân phối lẫn nhau. thống nhất hệ thống gói vẫn không có nghĩa là các gói có thể hoán đổi cho nhau giữa các bản phân phối. Câu hỏi của bạn là vô nghĩa.

3
hop, tại sao bạn không viết ra một câu trả lời đưa ra một mô tả ít hời hợt hơn về sự khác biệt giữa các bản phân phối? Câu hỏi được nêu một cách ngây thơ, nhưng có một câu trả lời kỹ thuật sâu sắc đang chờ được đưa ra.
jldugger

Bạn đang thực sự tìm kiếm "Cơ sở tiêu chuẩn Linux"
Bill Weiss

Tại sao các nhà phát triển Windows không thể tạo một định dạng đóng gói phổ quát? Không đóng gói Windows ở đây, nhưng họ có nhiều phương pháp cài đặt phần mềm và không có kho lưu trữ nào như Linux có ... (đây là một câu hỏi tu từ, btw)
Mark Henderson

Câu trả lời:


24

Có vẻ thích hợp để trích dẫn Joel Spolsky về điều này:

(Nhân tiện, đối với những người theo dõi thế giới phức tạp của các định dạng nguồn cấp dữ liệu cung cấp blog, bạn có thể thấy điều tương tự xảy ra ở đó. RSS bị phân mảnh với một số phiên bản khác nhau, thông số kỹ thuật không chính xác và nhiều cuộc chiến chính trị, và nỗ lực dọn dẹp mọi thứ bằng cách tạo ra một định dạng khác gọi là Atom đã dẫn đến một số phiên bản RSS khác nhau cộng với một phiên bản của Atom, thông số kỹ thuật không chính xác và nhiều cuộc chiến chính trị. Khi bạn cố gắng hợp nhất hai lực lượng đối lập bằng cách tạo ra một phương án thứ ba, bạn chỉ kết thúc với ba lực lượng đối lập. Bạn chưa thống nhất bất cứ điều gì và bạn chưa thực sự sửa chữa bất cứ điều gì.)

(nhấn mạnh thêm)

Bạn có (ít nhất) hai hệ thống đóng gói cho Linux. Đó thực sự là một điều tốt. Một hệ thống đơn giản sẽ tạo ra một hệ thống thứ ba.


Re: Khi bạn cố gắng hợp nhất hai lực lượng đối lập bằng cách tạo ra một sự thay thế thứ ba, bạn chỉ cần kết thúc với ba lực lượng đối lập. xem thêm : xkcd.com/927
JamesBarnett

20

Có nhiều lý do cho điều này, và một chút lịch sử là để đưa mọi thứ vào quan điểm.

Hãy nhớ rằng khi chúng ta nói về "Linux", cái mà chúng ta thường nói đến là một trong nhiều bản phân phối Linux khác nhau . "Linux" thực sự chỉ là một nhân hệ điều hành.

Mục tiêu ban đầu của Linux là tạo ra một hệ thống dựa trên Unix chạy trên PC (ban đầu là 386). Bước đầu tiên là tự tạo kernel. Trong khi Linus Torvalds đang làm việc với hạt nhân Richard Stallman đang làm việc trên hệ thống Unix miễn phí của riêng mình , trong dự án GNU (GNU's Not Unix) . Để cắt ngắn một câu chuyện dài, cả hai phần nào hội tụ vì GNU có các tiện ích liên quan (trình biên dịch C / thư viện / công cụ xây dựng, trình bao, trình soạn thảo văn bản, v.v.) nhưng không có lõi để chạy và Linux có lõi nhưng không có tiện ích nào chạy trên đầu trang của nó để làm cho nó hữu ích cho quần chúng.

Sự hội tụ này được biết đến một cách chính thức là GNU / Linux. Bạn sẽ thấy rằng rất nhiều bản phân phối vẫn tự gọi mình là bản phân phối GNU / Linux.

Do tính chất mở và miễn phí của GNU / Linux, bất kỳ ai cũng có thể chọn nó và tạo ra một hệ thống đi kèm theo thị hiếu cụ thể của họ. Kết quả là nhiều luồng phương pháp cấu hình khác nhau đã được sử dụng để tạo ra các hệ thống này, có tác dụng phụ là tạo ra gần như nhiều hệ thống quản lý gói khác nhau để phù hợp với từng hệ thống.

Mỗi hệ thống hoàn chỉnh khác nhau có những người theo dõi mạnh mẽ đã gắn bó với họ trong nhiều năm qua, dẫn đến kết quả là chúng ta có ngày nay: một số ít các hệ thống quản lý gói được sử dụng rộng rãi, bám rễ sâu và ổn định như RPM , APT / dpkg và Gentoo's Portage .

Có những dự án, chẳng hạn như Autopackage , đang cố gắng giải quyết vấn đề, nhưng sự phát triển liên tục của hệ thống quản lý gói được hỗ trợ khác nhau có nghĩa là có nhiều mục tiêu di chuyển phải tuân theo.

Điều mà một số nhà cung cấp phần mềm cuối cùng làm là gói các nhị phân và bản sao phụ thuộc cụ thể mà họ yêu cầu vào một gói lớn sẽ hoạt động trên các hệ thống cụ thể.


8
Có nhiều thứ hơn thế này. Ngay cả khi cả thế giới thống nhất trên vòng / phút, bạn vẫn sẽ không có gói một lần, chạy bất cứ nơi nào thế giới mà OP dự tính. Các gói dành riêng cho phần lớn bản phân phối của chúng, vì chúng dựa vào tất cả các gói khác. Cách duy nhất để có một thế giới "gói một lần, chạy mọi nơi" là không chỉ có một hệ thống đóng gói duy nhất, mà còn chỉ có một bản phân phối duy nhất.
Cian

9

Có cùng định dạng gói sẽ không giúp được gì. Bạn không thể sử dụng cùng một gói trong các bản phân phối khác. Bạn thậm chí không thể sử dụng nó trong phiên bản khác nhau của cùng một bản phân phối. Và thậm chí xây dựng gói có thể có những vấn đề tương tự.

Để cài đặt một gói bạn cần đáp ứng các phụ thuộc được hình thành trong quá trình xây dựng gói. Để xây dựng một gói bạn cần phải đáp ứng các phụ thuộc xây dựng. Và những điều này thay đổi. Để có thể thực hiện các thay đổi, sẽ dễ dàng hơn khi chỉ hỗ trợ các gói bạn có thể sửa đổi để hoạt động sau khi thay đổi.

Nếu tất cả các phụ thuộc sẽ giống nhau, thì đó sẽ không phải là một bản phân phối khác hoặc phiên bản khác của cùng một bản phân phối.


4
Sẽ không thể thư viện phiên bản và sử dụng phụ thuộc phiên bản để giải quyết vấn đề bạn đề cập?
jldugger

Bạn đề cập rằng bạn không thể sử dụng các cuộc tranh luận từ phiên bản này sang phiên bản khác. Điều đó không hoàn toàn đúng, có những ngoại lệ cho quy tắc đó. Nếu gói chủ yếu là python, hoặc nếu tất cả các bit được biên dịch tĩnh thì bạn có thể. Thậm chí có một vài nhà cung cấp chỉ đơn giản bao gồm tất cả các phụ thuộc như một phần của gói, điều này làm lãng phí không gian đĩa, nhưng tạo ra một gói đa nền tảng.
Zoredache

Ngay cả khi một gói là vòm: tất cả, hoặc ngôn ngữ kịch bản, có sự khác biệt đáng kể giữa python2.4 và python2.6 sẽ gây ra một gói hoạt động trong nền tảng mà nó được xây dựng và thất bại trên các nền tảng khác.
jldugger

Vâng, nó không chỉ là về phụ thuộc thư viện.
iny

Một số bản cập nhật debian đã thay đổi nơi đặt các tệp được đặt hoặc cung cấp các hệ thống được tiêu chuẩn hóa để cập nhật các tệp cấu hình được quản lý thủ công trước đây .. loại này rất đặc biệt về phiên bản / phân phối.
pjc50

7

Có một chút "Hội chứng không được phát minh ở đây", tôi nghĩ vậy. Hệ thống đóng gói của Debian có trước RedHat, nhưng nó vượt trội hơn về nhiều mặt, nhưng bạn sẽ không bao giờ thấy RedHat chuyển đổi. Thay vào đó, bạn thấy rất nhiều người sử dụng "apt-rpm" cố gắng cung cấp cho bạn một số lợi thế của apt với các tệp vòng / phút.


4
apt-rpm đã chết khá lâu (bản phát hành cuối cùng hơn 1 năm trước) và hầu hết mọi người đã chuyển sang sử dụng yum. Bản thân Yum cung cấp khá nhiều tính năng hay, vượt trội hơn các dịch vụ của apt ..
ras camera

1
Tôi không tin rằng bao bì của Debian tốt hơn Redhat ngày nay. Trước đây, Debian từng có một hệ thống cập nhật tốt hơn , nhưng điều đó dường như không còn đúng nữa. Yum đã nhận được rất tốt. Vẫn chậm so với Smart , nhưng rất dễ quản lý.
niXar

1
Tất cả những gì tôi biết là lần trước khi tôi làm việc trên CentOS, chúng tôi có nhiều khả năng rơi vào địa ngục phụ thuộc và chuyển sang apt-rpm đã khắc phục hầu hết các vấn đề đó.
Paul Tomblin

1
Bao bì RPM của Redhat bị EDS (hội chứng phụ thuộc cực độ.) Đây không phải là một bình luận về RPM mà là Redhat. Yum là một bản sao tuyệt vời của apt-get plus apt-search, và mang lại khả năng sử dụng cho thế giới phức tạp trước đây của lệnh gọi RPM.
kmarsh

3
trên thực tế, các định dạng gói .deb và .rpm thậm chí là về mặt kỹ thuật (nhưng, IMO .deb có khả năng xử lý phụ thuộc tốt hơn, phụ thuộc phiên bản, cung cấp, xung đột và gói ảo). apt-get là thứ tỏa sáng ở cấp độ công nghệ, nhưng điều thực sự làm cho các gói của debian nổi bật là tập hợp các chính sách dành cho nhà phát triển được xác định rõ ràng đặt ra các tiêu chuẩn mà các gói phải tuân thủ. Các gói ubfox kế thừa điều đó ở một mức độ lớn và ubfox cũng kế thừa văn hóa nhà phát triển đi cùng với nó.
cas



2

Tôi nghĩ cletus, Wayne và iny đã trả lời điều này khá tốt. Tôi muốn nói thêm rằng đó thực sự không phải là một vấn đề lớn. Tôi làm việc trong một môi trường hỗn hợp nơi chúng tôi có Gentoo (portage), SUSE (rpm / zypper) và OpenBSD (gói và cổng). Cài đặt các gói trên bất kỳ một trong số chúng không khó, và tôi không thực sự quan tâm đến định dạng chúng đang sử dụng.

Từ quan điểm của phần mềm đóng gói, nó cũng không quá khó khăn. Có thể là Gentoo, một bản phân phối dựa trên RPM hoặc một bản phân phối dựa trên tranh luận, nó thực sự chỉ cần có công thức để xây dựng phần mềm và thêm một số siêu dữ liệu. Được cung cấp hệ thống xây dựng của những gì bạn đang cố gắng để đóng gói không hoàn toàn điên rồ, thông thường chỉ cần ít hơn là viết một tập lệnh shell được tôn vinh để tạo ra một gói.


1

Vâng, luôn có các nhị phân được biên dịch tĩnh trong các bóng tar .... ;-)


1
AKA "Slackware".
Paul Tomblin

Thật không may, có những vấn đề với các nhị phân được biên dịch tĩnh cần tải các thư viện hệ thống khi chạy (đặc biệt là nsswitch).
pjc50

1

Không có định nghĩa về giao diện nhị phân tiêu chuẩn cho "Linux" vì đó chỉ là một hạt nhân. Điều lạ lùng là ngăn xếp phần mềm của bạn sẽ cần giao diện không chỉ với kernel của bạn, đưa ra một thách thức cụ thể là duy trì ABI tiêu chuẩn giữa hàng trăm cây nguồn khác nhau.

Về chủ đề các công cụ đóng gói tốt , tôi thích Debian GNU / Linux vì nó là định dạng đóng gói nhị phân tuyệt vời. Nó đã phục vụ 90% nhu cầu của tôi cho các công cụ và ứng dụng tiêu chuẩn. 10% còn lại được xây dựng từ nguồn do bao gồm các thành phần không miễn phí hoặc lỗi phụ thuộc thư viện chia sẻ. Khi các ứng dụng đó cần được triển khai, tôi xây dựng các nhị phân tùy chỉnh cho các cụm sản xuất.


1

Để có bản dựng một lần, hãy chạy bất kỳ định dạng gói nào mà không buộc mọi người phải sử dụng cùng một bản phân phối, bạn cần một vài tính năng quan trọng:

  • Đặt tên gói duy nhất trên toàn cầu, để hai người / phân phối không thể độc lập tạo các gói khác nhau có cùng tên.

  • Khả năng cài đặt song song các phiên bản khác nhau của thư viện khi các gói có yêu cầu xung đột. Một bản phân phối có thể quyết định phiên bản nào của mỗi thư viện sẽ sử dụng và buộc tất cả các gói sử dụng phiên bản đó. Một hệ thống hoạt động trên các bản phân phối phải linh hoạt hơn.

Zero Install cung cấp cả hai tính năng này:

  • Tên là URI (ví dụ: http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Chỉ có chủ sở hữu của một tên miền có thể tạo các gói trong không gian tên đó theo mặc định.

  • Mỗi phiên bản của mỗi gói đi trong thư mục riêng của mình. Mỗi ứng dụng chỉ nhìn thấy những thư viện mà nó cần, với các phiên bản mà nó tương thích.

Ví dụ: ứng dụng Chỉnh sửa phụ thuộc vào Python <3 như thế này:

<command name="run" path="Edit/AppRun">
  <runner interface="http://repo.roscidus.com/python/python">
    <version before="3"/>
  </runner>
</command>

Xem thêm: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Lưu ý: Tôi là nhà phát triển 0install]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.