Tại sao phần mềm không được đóng gói trong một tệp duy nhất?


15

Chúng tôi thấy Hầu hết các phần mềm Windows được đóng gói trong một tệp thực thi duy nhất. Khi tôi bấm đúp vào tệp Thiết lập, nó sẽ thiết lập tất cả các tệp, tệp nhị phân và thư viện với nó.

Tôi hiểu sự phụ thuộc của Ubuntu hoặc các gói linux nói chung. Nhưng tôi tự hỏi, tại sao những điều này tồn tại. Không thể xây dựng một tệp duy nhất với tất cả các phụ thuộc? Các vấn đề với phương pháp này là gì?

Hãy cố gắng đưa ra lý do chi tiết.

Câu trả lời:


17

Lý do chính mà các phụ thuộc không được bao gồm trong chính chương trình là để các thành phần của hệ thống có thể dễ dàng cập nhật.

Hãy tưởng tượng một phụ thuộc được sử dụng bởi năm chương trình khác nhau. Nếu một lỗ hổng bảo mật được tìm thấy trong sự phụ thuộc đó, chỉ có một bản sao phải được cập nhật, thay vì năm bản sao.

Đối với người dùng, không cần cài đặt nhiều gói - cài đặt một phần mềm bạn muốn tự động cài đặt các phụ thuộc của nó.


Sự khác biệt chính giữa bao bì .deb và .exe không phải là phần mềm Ubuntu không được xuất bản trong một tệp duy nhất. Sự khác biệt chính là toàn bộ khái niệm về một kho lưu trữ phần mềm có chứa các gói và các bản cập nhật có thể dễ dàng được cung cấp từ đó.

Điều này đôi khi có thể là vấn đề đối với máy tính mà không có kết nối internet trực tiếp. Có những công cụ, như APTonCD , giúp giảm thiểu những khó khăn này.


2
đôi khi có vấn đề với những người dùng như chúng tôi mà không truy cập Internet đúng cách
Anwar

2
Bất cứ cách nào tôi ghét tính năng này vì internet của tôi chậm. Và việc chia sẻ phần mềm ubfox đã tải xuống rất khó khăn, (Đừng đề xuất sao lưu apt-cache Bởi vì tôi làm điều đó hàng ngày)
Tachyons

1
Nhưng sau đó, bạn thực sự nên yêu thích tính năng này! Bởi vì, thay vì tải xuống một thư viện năm lần, bạn chỉ cần tải xuống một lần. Hãy tưởng tượng mọi chương trình trên bản cài đặt Ubuntu của bạn đều có cài đặt GTK + hoặc Qt của riêng nó! Những thứ đó rất lớn .
Michael Wild

4

Điều đó không hoàn toàn đúng. Phần mềm Ubuntu thường có trong một tệp .deb duy nhất. Hoàn toàn đơn giản (và không chính xác), các tệp .deb là tệp .exe tương ứng cho các cửa sổ. Tất cả các chương trình, bao gồm cả các chương trình trong windows sử dụng phụ thuộc vào các tệp khác trong hệ thống tác vụ (thư viện). Quá trình cài đặt chỉ rõ ràng hơn hoặc ít hơn trong các hệ điều hành khác nhau. Khi bạn sử dụng trung tâm phần mềm trong Ubuntu để tải xuống một chương trình, bạn chỉ tải xuống các phần phụ thuộc không được cài đặt trong hệ thống của bạn và các tệp chương trình thực tế. Điều đó ngăn hệ thống không bị quá tải với các tệp trùng lặp và chức năng trùng lặp sẽ dẫn đến xung đột.

Dù bạn có tin hay không, sự khác biệt duy nhất giữa việc cài đặt một chương trình trong windows hoặc Ubuntu là lượng thông tin mà họ cung cấp cho người dùng. Windows nghĩ rằng người dùng của họ bị câm và không muốn họ biết những gì nó đang được cài đặt khi chạy tệp exe. Trong linux bạn có được thông tin đó..cho một số người dùng quá nhiều chi tiết, nhưng những người khác (hầu hết) thực sự đánh giá cao điều đó.

hy vọng nó có ý nghĩa


2
Hoàn toàn đúng. Ngay cả các bản phân phối khác (không tốt bằng Ubuntu) cũng sử dụng .rpms. Vấn đề của một .exe, .deb, hoặc bất cứ điều gì, về cơ bản, đó là một .tar lớn tự trích xuất đến những nơi khác nhau! Trên Windows, nó đi đến Tệp chương trình và hiển thị cho bạn một thanh tiến trình, nhưng trên linux, nó hiển thị cho bạn nhiều hơn nữa.
WindowsEscapist

1
Tôi nghĩ rằng gợi ý rằng một tệp exe giống như một tệp tar lớn đang đi quá xa theo hướng đơn giản hóa. Một tập tin tar không thể thực thi. Một tập tin exe (tự nhiên) là. Đó là, với một tệp gỡ lỗi (thực sự một tệp tar), nó là trình quản lý gói xử lý quá trình di chuyển thực tế của các tệp xung quanh, vì vậy hệ thống có thể theo kịp mọi thứ khá thanh lịch. Với một chương trình cài đặt (như trong Windows), chính trình cài đặt sẽ thực hiện. Nó có thể nói chuyện với một số thành phần hệ thống để giữ mọi thứ gọn gàng, nhưng chỉ khi cảm thấy như vậy.
Dylan McCall

1
Cách tốt nhất để tóm tắt điều này là Windows có các nhà sản xuất chương trình cài đặt như InstallShield và NSIS. Cũng có những công cụ như vậy cho Linux. MojoSetup là một phổ biến. Đó là nơi bạn đôi khi tải xuống một chương trình và nó có một tệp thực thi (thường kết thúc bằng .sh hoặc .run) và nó cung cấp cho bạn một trình hướng dẫn nhỏ. Những người này thường không nói chuyện với người quản lý gói và họ làm việc rất nhiều như các chương trình cài đặt trong Windows. Trên lưu ý đó, Windows Installer (với các tệp .msi của nó) là một nỗ lực để dọn sạch mớ hỗn độn đó;)
Dylan McCall

Tôi nghĩ rằng các cách Linux tốt hơn nhiều so với các cách của Windows. Nhưng vâng, các cách của Windows rất đơn giản và dễ dàng
Anwar

2
Định dạng tệp Windows tương ứng .deb.msi.
Eliah Kagan

3

Trên Ubuntu, hầu hết các phần mềm đều có trong một tệp duy nhất. Nó là một*.deb tệp gói debian được tải xuống, giải nén và cài đặt từ trình quản lý gói của bạn.

Tại sao Ubuntu không cài đặt phần mềm từ các tệp thực thi tự giải nén như hầu hết các phần mềm Windows?

Vì tự giải nén. *.exe các tập tin là một đề xuất rất nguy hiểm để chấp nhận.

Sự khác biệt quan trọng nhất giữa các tệp thực thi tự giải nén và hệ thống đóng gói, như debian / Ubuntu, là:

  • Bảo vệ
  • Minh bạch
  • Kiểm soát chi tiết hơn

Chi tiết hơn:

Bảo vệ

Trong thế giới windows, bạn phải tin tưởng vào *.exetập tin duy nhất đó . Làm thế nào người ta có thể thực sự chắc chắn rằng nó có thể được tin cậy? Làm thế nào bạn có thể biết rằng nó cài đặt một cái gì đó? Làm thế nào bạn có thể chắc chắn rằng nó không làm những việc khác sau lưng bạn?

Trong Ubuntu, tất cả các gói đều được ký điện tử, do đó, bằng cách sử dụng một tệp gói riêng - trình quản lý gói (có thể là muon, synaptic, aptitude hoặc thậm chí apt thẳng) - bạn có thể xác minh nội dung trước khi nó được giải nén. Tất nhiên, điều này giả định rằng bạn tin tưởng các kho lưu trữ. Tôi thà tin tưởng các kho lưu trữ Ubuntu (một cơ quan duy nhất) hơn là hàng trăm nguồn khác nhau thường không quen thuộc để tải xuống.

Kiểm soát hạt

Với một *.exetệp, về cơ bản bạn có thể thực hiện một điều: thực thi nó. Trong Ubuntu, bạn có thể kiểm tra nội dung của gói, mô tả, cấu hình, tệp riêng lẻ, thay đổi mới nhất, sửa lỗi, v.v. để thuận tiện cho trình quản lý gói của bạn, trước khi quyết định có cài đặt hay không.

Khi bạn cài đặt từ một *.exetệp, bạn cũng phải tin vào hook 'gỡ cài đặt của nó (và không phải tất cả *.execác tệp đều được đảm bảo có một tệp). Trong Ubuntu, tất cả các tệp thuộc các gói tiêu chuẩn được cài đặt bởi trình quản lý gói, luôn có thể được gỡ cài đặt vì đó là chức năng của trình quản lý gói chứ không phải chính gói đó. Trình quản lý gói là một ứng dụng riêng biệt và đáng tin cậy, cung cấp cả trình cài đặt và trình gỡ cài đặt, gói không thể lấy đi móc cài đặt từ bạn. Tất nhiên, một gói độc hại có thể lén lút các công cụ thông qua các hành động sau khi cài đặt, nhưng đó là lý do tại sao chúng tôi có hệ thống kho lưu trữ chính thức và cùng những người chúng tôi tin tưởng để duy trì chúng.

Minh bạch

Nó đi xa hơn. Trên Ubuntu tôi thực sự có thể tin tưởng vào hệ thống của mình, vì tôi có thể xác minh phần mềm ở nhiều cấp độ. Mức cuối cùng là có thể nhìn vào mã nguồn. gói nhị phân có gói nguồn tương ứng. Tôi thực sự có thể nhìn vào nguồn (Ví dụ: ' apt-get source bash ' sẽ cung cấp cho bạn các nguồn đầy đủ cho shell bash). Trong thế giới của các tệp * .exe, thường chỉ có các tệp nhị phân, và ai biết những gì họ thực sự làm đằng sau hậu trường?

Điều đó nói rằng, luôn có các ngoại lệ đối với các quy tắc, nhưng đối với tôi bảo mật và tin cậy có nghĩa là tôi không thể chấp nhận thực thi nhị phân từ hàng trăm nguồn khác nhau khó xác minh như một cách tiêu chuẩn để cài đặt các thành phần trên hệ thống của tôi.


2

Ngoài những gì đã được người khác nói, đôi khi một phần mềm duy nhất được chia thành nhiều gói vì không phải tất cả các tính năng đều phù hợp với tất cả người dùng. Ví dụ, nếu tài liệu của một chương trình là đồ sộ, nó thường sẽ được cung cấp bởi một gói riêng. Điều này cho phép người dùng không quan tâm đến các tính năng tùy chọn này để tiết kiệm dung lượng đĩa và băng thông / thời gian để tải xuống.


0

Hãy thử chia sẻ hiểu biết của tôi về các phụ thuộc (Vâng, tôi đã nhận thức được ưu điểm của Ubuntu hoặc nói chung là cách xử lý phần mềm Linux. Tôi chỉ đơn giản là cố gắng tập hợp tất cả các ý kiến ​​và lý do tốt theo cách trung tâm, để tôi có thể chứng minh một số của bạn bè tôi) .

Phần mềm Windows hầu hết được đóng gói trong một tệp duy nhất. Điều này có nghĩa là họ không có bất kỳ sự phụ thuộc?

Không, Hầu như tất cả các phần mềm đều phụ thuộc vào một số phần mềm khác. (Trừ khi phần mềm ở mức rất thấp và có thể nói chuyện trực tiếp với phần cứng, chẳng hạn như chính Hệ điều hành) . Phần mềm của microsofts không bị phụ thuộc. Vì vậy, câu hỏi quan trọng là: làm thế nào họ xử lý việc này?

Trả lời: Họ xử lý việc này theo cách truyền thống của riêng họ. Giả sử hầu hết người dùng của họ là ngu ngốc, họ chỉ cần đặt tất cả sự phụ thuộc vào một tệp duy nhất, dẫn đến Phần mềm có kích thước lớn hơn (1 tệp).
Ví dụ: Xem các trò chơi được phát hành cho Microsoft. Hầu như mọi trò chơi đều bao gồm các thiết lập DirectX, mặc dù người dùng có thể đã cập nhật các phiên bản của chúng.

Đây là một cái gì đó tôi đã tìm thấy trên Google về Tại sao DirectX được bao gồm trong mọi trò chơi.

Ngay cả khi phiên bản nhị phân mới hơn đã được cài đặt, phiên bản đó vẫn không thể được sử dụng và ngay cả khi cài đặt DirectX của bạn được cập nhật vì bạn đã chạy phiên bản mới hơn của trình cài đặt không được đảm bảo đã cài đặt tất cả những phiên bản trước. Tệ hơn nữa, nếu một phiên bản được cài đặt cho x86, nó không đảm bảo cùng một phiên bản được cài đặt cho x64, vì vậy các trò chơi 64 bit và 32 bit có thể cần chạy cùng một phiên bản trình cài đặt chính xác nhưng nhắm mục tiêu các nền tảng khác nhau khi chạy.

bấm vào đây để xem toàn bộ bài viết Rõ ràng là họ không làm tốt với việc xử lý sự phụ thuộc.

Hầu hết thời gian, bất kể phụ thuộc đã có, họ cung cấp nó để đạt được sự đơn giản (cho người dùng của họ) . Cũng xem có bao nhiêu chủ đề phần mềm bao gồm các thành phần thời gian chạy .NET.
Một ví dụ khác từ kinh nghiệm của tôi: Khi tôi đã tải xuống và cài đặt phần mềm MS. Hài lòng với quy trình, tôi nhấp vào biểu tượng để mở phần mềm, Chỉ sau đó nó mới nói với tôi rằng "Tôi cần Java để chạy". Tình huống như vậy không bao giờ xảy ra trong thế giới Linux thông qua quản lý gói. (trừ khi bạn thử tải xuống các tệp .deb từ trang lưu trữ và cài đặt bằng cách nhấp đúp, theo kiểu MS) .

Làm thế nào Linux xử lý vấn đề phụ thuộc này?

Chà, Linux hay Ubuntu không che giấu sự thật rằng, bạn phải cài đặt các phần phụ thuộc để sử dụng phần mềm (không giống như cách của Microsoft). Nhưng khi bạn cài đặt các thành phần, một phần mềm khác phụ thuộc vào cùng một thành phần sẽ sử dụng các phần tử được cài đặt trước đó (không giống như phần mềm MS bao gồm tất cả mọi thứ).

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.