是什麼導致了包/二進制不相容?

是什麼導致了包/二進制不相容?

跟進Ubuntu LTS 二進位檔案與 Debian 相容嗎?

我知道 Ubuntu 和 Debian 二進位套件常常不相容。我知道混合來自不同來源的軟體包通常是一個壞主意,並且人們總是被警告不要這樣做。因此,讓我們繼續討論純粹的技術問題——

當依賴關係不是問題時,到底是什麼會導致不同來源的套件不相容呢?

------ 分離,以下詳細介紹 ------

喜歡俗話說:

關於二進位相容性(https://wiki.ubuntu.com/MarkShuttleworth#What_about_binary_compatibility_ Between_distributions.3F): Debian 軟體包可能是使用不同的工具鏈版本建構的,因此您可能會遇到麻煩

為什麼不同的工具鏈版本會出問題?喜歡

  • 我知道如何將最小的軟體包集從 Debian sid 拉到我的 Debian 穩定版中,並且一直在這樣做,
  • 我曾經將舊版的 Ubuntu / Debian 的軟體包移植到新版本,甚至
  • 將單一執行檔從我的 Ubuntu / Debian 複製到另一個發行版,無論是 RedHat 還是 FreeBSD,

絕不之前有問題。那麼到底是什麼導致了人們所說的問題呢?

是 gcc 還是核心版本?對我來說不太可能,因為它們在我使用該版本的整個生命週期中一直在升級。

那麼是glibc的版本嗎?但它通常會向後相容,而且很有可能,對吧?

引用我第一個連結的答案:

實際上並不能保證甚至暗示交叉相容性。如果出現問題,不要指望 Debian 或 Ubuntu 社群會給您太多同情。在那種情況下,你基本上只能靠自己了。只要您對此感到滿意,就可以嘗試一下。

所以基本上我到處都看到針對這種做法的警告,但沒有人給出進一步的技術解釋。誰能列出這樣做的風險,那些潛在的技術問題嗎?

如果我想/需要混合來自不同來源(例如Debian 或Ubuntu)的軟體包,或者在同一發行版但不同版本中混合軟體包(如果依賴關係不是問題),這個答案將幫助我選擇最安全的方法,以拉取我確信 PPA 永遠不會出現在 Debian 中,進入我目前正在使用的 Debian Bullseye 中。

答案1

二進制和包不相容性是不同的,值得單獨解釋。

二進位不相容

當人們談論工具鏈差異等時通常會提到這一點。工具鏈不相容性本身是不尋常的,因為工具鍊和核心一樣,是開發人員在保持向後相容性方面最謹慎的領域之一。因此,過去建置的二進位檔案應該繼續運行,只要它的二進位依賴項繼續可用;歸根究底就是保留它所需的函式庫。

問題出在向前相容性:不能保證「未來」建置的二進位檔案能夠運作。這通常顯示為 C 庫中缺少符號(這正是被檢測到的,因為 C 庫開發人員非常注意保持相容性)。人們可能會認為 C 庫沒有太大變化,因此使用不同的 C 庫建置程式不應該改變它所需的符號,並且應該保持相容。事實並非如此,函數確實會以向後不相容的方式定期更改; C 庫保留向後透過繼續提供與先前的介面相容的功能版本以及適當的版本符號來實現相容性。例如,GNU C 函式庫的 2.33 版本對 family statfstat//lstatstat)等常用函數進行了不相容的變更;使用這些函數的預設設定 2.33 建置的程式將需要 2.33 版本的 C 庫才能運作。

與工具鏈相關的庫和 C 庫的維護方式使得此類不相容性顯示為庫符號更改或 soname 更改,因此最終在包依賴項中進行編碼(對於打包軟體)或被動態鏈接器捕獲(對於單獨的二進位檔案)。

在不像 C 函式庫那樣精心維護的函式庫中,這種不相容性不會立即出現,只有在測試了錯誤的組合時才會出現(即使如此,可能也僅在某些情況下)。發行版開發人員通常只在正在開發的版本上下文中測試軟體包,因此他們不會知道他們為Ubuntu 20.04 構建的軟體包是否可以在Debian 10 上正確安裝,但如果您在6 月CEST 凌晨1 點到2 點之間使用它,就會殺死您的寵物松鼠21.

這很好地導致...

封裝不相容

無論是否有意識地這樣做,軟體包很少是在真空中建構的,它們是發行版本的一部分。這從套件來源(更一般地說,專案來源)本身開始:專案和套件是在其開發人員的系統上建構的,除非付出巨大的努力,否則可能無法準確地編碼其依賴項。

這會滲透到二進位套件依賴項以及文件中描述的依賴項。專案維護者可能沒有意識到他們的專案在目前配置下只能運作,因為,比如說,systemd 版本 239 開始以某種方式設定係統。軟體包維護者可能也沒有意識到,如果他們正在開發的發行版恰好已經有 systemd 239 版本(請記住,發行版維護者通常生活在未來,IE它們將在下一個版本中開發)。

所有這些可以被測試捕獲,但是一旦您開始混合和匹配來自不同發行版和版本的二進位文件,您可能是第一個測試軟體包和二進製版本的精確組合的人。和這就是為什麼不建議這樣做:大多數用戶想要使用他們的系統,而不是測試它們。

當然,這符合您的經驗,在許多情況下一切都正常。這也導致了您所感知到的偏見:人們往往不會寫帖子(或問題,在 Stack Exchange 環境中)解釋他們如何在 Z 系統上安裝來自發行版 Y 的軟體包 X,而且它確實有效。所以你在這個領域看到的大部分內容都是場景沒有工作,或者最終設置起來很複雜,或者損壞了其他東西;人們不願意花時間幫助某人解決可能是一次性的問題,這是可以理解的,這些問題是他們因做明確推薦的事情而給自己帶來的反對

相關內容