為什麼包名稱包含版本號?
在使用 Ubuntu 和其他基於 Debian 的發行版時,我注意到軟體倉庫中的軟體包通常包含主要版本號。
例如,
- 阿帕奇:
apache2
- 雄貓:
tomcat7
- PHP:
php5
- 葡萄酒:
wine1.4
- MySQL:
mysql-server-5.5
但是我注意到沒有
apache1
可用的軟體包,其餘的也類似。如果軟體包的名稱隨著軟體的更新而改變,這不會妨礙軟體包管理的主要目標之一(輕鬆升級)嗎?如果明天 Apache 3 出來了,
apache3
如果我想升級,我是否必須手動安裝軟體包?`
包的命名類似於(或曾經)需要簡化包的兩個主要版本之間的轉換,並且預計這樣做所需的時間會很長。在過渡期間,新舊版本均保持可用,但需要了解的是,在未來某個時間,舊版本將被停用。
有時,過渡期發生在您目前使用的系統發布期間。對於某些包,這種情況經常發生,以至於您可以期望在每個新系統版本中看到過渡包版本。軟體開發工具通常屬於這一類,因為在與系統發布相同的時間表上升級到新工具可能不切實際。我公司對特定版本的 GCC、Autoconf 和 Perl 的依賴可能是 5 年周期,而我的作業系統可能是 3 年升級週期。因此,如果它包含我的某些軟體包的舊版本以及開發新作業系統時的最新版本,那麼我更容易採用新作業系統。
其他時候,這些主要的版本變化發生在很久以前,過去,現在每個人都在目前版本上。例如,Apache 就是這種情況。從兼容性的角度來看,1.3 到 2.0 的變化比任何 2.x 版本的變化都要大得多,所以一旦每個人都離開了 1.3,就不再需要在給定的作業系統版本中繼續提供多個 Apache 版本。但是,一旦你讓每個人都使用了這個
apache2
包,將它重命名回 just 並不是一個很好的論據apache
。這將導致不必要的升級麻煩。此外,在過去認為需要暫時提供兩個並行版本的情況下,這種需要可能會在未來再次出現。這種包命名實踐通常只發生在庫或重要的核心包中。對於更多外設包,您只需升級到目前的任何內容。
庫比應用程序更常用這種方式處理,因為就其性質而言,其他包依賴於它們。一個庫越受歡迎,要求依賴它的所有其他包都被重建並重新連結到它,以便庫可以在沒有這個過渡期的情況下逐步升級到新的主要版本就越不切實際。
通常以這種方式處理應用程序是因為它包含一個庫元素。例如,Apache 不僅僅是一個 Web 伺服器,它還為外掛提供了一個開發 API。(
mod_foo
等等。)如果有人mod_something
與 Apache 1.3 外掛 ABI 有舊連結並且沒有升級它以使用更新的 2.0 API,那麼如果您的作業系統繼續提供舊的 Apache 1.3 直到所有外掛創建者都有機會,這很方便更新他們的外掛。