為什麼非軟體包管理的軟體不自行更新?

為什麼非軟體包管理的軟體不自行更新?

我是基於 Debian 的發行版的用戶 - Debian、Ubuntu、Linux Mint。我知道最新版本的軟體通常不在儲存庫中,因此我經常直接從原始程式碼下載並安裝它們。

但是,我注意到該軟體很少讓您知道更新。另外,我從未註意到它們中的任何一個實際上是自行更新,然後只是要求安裝許可。

是因為程式設計師普遍認為 Linux 版本將透過套件管理器更新嗎?

答案1

實現這種類型的功能非常困難,無論是「打電話回家」方面(查看是否有更新)還是「就地更新」方面:

  • 在使用者係統上執行的軟體需要知道如何檢查是否有更新的版本可用(這意味著向您的應用程式添加網路程式碼,這很可能沒有任何其他原因使用網路);
  • 無論網路條件如何,軟體都需要正常運作(顯然,當它完全離線時;但當它發現自己部分連接時,它也不應該因奇怪的錯誤而失敗);
  • 您需要有某種方法來決定是否有較新的版本可用(當使用者從來源儲存庫建置時如何比較版本?);
  • 您需要在某處擁有一台具有伺服器端功能的伺服器,您可能還需要開發該伺服器;
  • 您需要確保更新不會在伺服器上或透過中間人攻擊而受到損害(因此您需要使用 TLS 和/或某種強簽名);
  • 您需要以使用者可用的形式提供更新;他們可能最初是從原始程式碼構建的,但不能保證他們運行軟體的系統具有從原始程式碼重建更新版本所需的一切 - 因此您需要提供二進位(對於所有可能的目標平台?)。

(這不是詳盡的清單。)

這些都是發行版已經處理的問題,因此讓發行版來處理事情會更容易。此外,如善行難陀已經解釋過,關心運行某個軟體的最新版本的用戶可能非常關心它,至少會關注公告郵件列表,因此他們會以這種方式收到通知。

另一個需要考慮的方面是,很多人不希望他們使用的軟體以任何方式打電話給家裡。有些發行版不遺餘力地消除從他們分發的軟體中執行此操作的程式碼,甚至是可用於追蹤其使用情況的軟體的其他部分(例如從網頁載入圖像、字體或 CSS 的文檔)。查看所有「隱私外洩」標籤Debian 的林天例如。

所有這些都解釋了為什麼包含自身提供更新資訊的必要機制的軟體如此之少,而能夠自我升級的軟體則更少。

還有其他方法可以解決「問題」:使用 CI 系統的軟體開發人員通常可以擴展該系統,以某種可使用形式(作為包)提供「夜間」建置;有興趣的使用者可以建立自己的建置系統,定期提取他們關心的軟體的更新來源(這在企業環境中相當常見);或者您可以設定 AUR 風格的包,這些包是從最新的源代碼構建的。

答案2

除非軟體本身有能力「打電話回家」來檢查更新,就像某些瀏覽器之類的同步事物似乎能夠做到,通常沒有機制能夠自動提醒使用者/管理員有更新版本的軟體可用。

您使用套件管理器安裝的套件是由人類創建的,這些用戶可能有興趣使它們保持最新並在他們關心的作業系統上正常運行。

包裝例如的人安西布爾, 或者GNU 核心工具, 或者亞什外殼, 或者CMake或針對特定 Unix 系統的數千個軟體專案中的任何其他專案很可能(但不一定)訂閱這些項目的相關郵件清單和/或擁有用於定期查看原始程式碼儲存庫或來源分發檔案的特殊工具。當他們得知新版本時,他們將根據其 Unix 上的打包程式以相關方式下載、編譯、測試、修補(等)並打包軟體。這可能涉及上游(與軟體開發人員)和下游(與軟體使用者)有關建置/打包過程中出現的不相容性或其他問題的溝通。

然後,他們將根據所使用的Unix 以及第三方軟體包分發的工作方式,以某種方式註冊、上傳或提交軟體包,以便像我和您這樣的用戶可以使用我們的軟體包管理器來更新我們的系統。

例如,我關心的是GNU 斯托適用於 OpenBSD(我是該軟體的「連接埠維護者」)。我時不時地在 GNU 網站上檢查 Stow 的當前狀態(它不經常更新),當我發現新版本時,我會安裝它並確保它可以工作,並更新 OpenBSD 端口在我的私人機器上。然後,我透過電子郵件發送 OpenBSD 連接埠列表,其中包含該連接埠的補丁(連接埠在 OpenBSD 上作為一組 Makefile 分發)。然後,具有提交權限的人將確保我的補丁完全應用,並且在將其提交到 OpenBSD ports CVS 樹之前連接埠看起來正確。

下次用戶更新 CVS 樹並重建連接埠或下載最終出現的二進位連接埠時,他們的 GNU Stow 安裝就會更新。但 GNU Stow 本身並不知道自己的新版本是否可用。這根本不是 GNU Stow 應該做的事情。它是一種用於在獨立的目錄層次結構中安裝第三方軟體的工具,它是嚴重奇怪如果它每次使用時都嘗試「打電話回家」(就像ls突然需要網路存取才能運行一樣奇怪)。

在許多情況下,單獨進行軟體更新可能是不可取的,因為系統的許多元件需要一起測試。所需的基礎設施也會使較小的軟體包嚴重膨脹,並且缺乏專業知識或資源的個人不可能運行某種高可用性更新伺服器來開發自動保持最新的軟體。

答案3

過去,電腦由專業人員管理,他們會根據需要安裝新軟體。

隨著時間的推移,不同的作業系統發展出了兩種不同的傳統,以減輕手動保持軟體最新的負擔。

  • 在 Linux 和大多數其他現代 Unix 變體上,作業系統附帶一個套件管理器。大多數軟體都是透過此套件管理器安裝的,當有新版本可用時,套件管理器會更新軟體。
  • Windows 直到最近才附帶套件管理器,因此 Windows 軟體供應商養成了使用自己的程式碼來安裝更新的習慣。

套件管理器方法特別適合開源世界,因為開源軟體由數千個獨立開發並組裝在一起的套件組成。組裝軟體包時很多事情都可能出錯,因此大多數 Linux 發行版都提供了一個一致的集合,稱為發布。一些發行版具有“滾動版本”,其中唯一的一致性檢查是軟體編譯。其他人進行更多測試,每年只提供一次或兩次新版本,甚至每幾年一次。

Linux 方法相對於 Windows 方法的一個優點是它允許軟體包相互協作。這在 Windows 方法中很困難,因為如果軟體 A 和軟體 B 想要一起做某事,他們必須監視其夥伴是否已安裝,應對升級,卸載時注意不要留下碎片…這一點尤其重要為什麼Windows軟體必須捆綁它使用的所有庫,這意味著如果在庫中發現錯誤,那麼所有使用該庫的軟體都需要更新。相比之下,在 Linux 上,只需要更新包含該程式庫的套件,無論有多少程式使用它。

由於作業系統提供了軟體更新機制,Linux 軟體的作者不需要重新發明輪子。

很少需要安裝比您的發行版提供的更新版本的軟體。一般來說,較新的軟體的錯誤也不少。如果發現嚴重錯誤(尤其是安全錯誤),發行版確實會提供更新。某些軟體的較新版本只有在該版本具有您需要的新功能時才有用。

如果您希望擁有最新版本的軟體,即使您不需要它,那麼您應該安裝滾動發行版,例如 Debian stable 或 Arch Linux。具有一致版本的發行版(例如 Ubuntu、Mint 或 Debian stable)適合不想每週破壞系統的人。

答案4

其他答案都很好,但我想補充一些他們都沒有突出解決的問題:安全問題。

安裝軟體(至少在系統範圍內安裝)通常需要 root 存取權限。您信任您的發行版的套件管理器和打包軟體的人員能夠正確使用此權限,但您不一定信任您安裝的每個隨機軟體都能正確執行此操作。

相關內容