有沒有專注於二進制向後相容性的 Linux 發行版?

有沒有專注於二進制向後相容性的 Linux 發行版?

如果您建立可在目前版本的 Windows 上執行的可執行文件,則該執行檔可能會在較新版本的 Windows 上運行很多年。 Microsoft 非常努力地確保這一點。

對於 Linux,您期望擁有正在使用的軟體的源代碼,因此只要保持原始碼相容性,破壞二進位相容性就可以了。這導致發行版逐步淘汰舊的庫版本,並定期破壞曾經有效的東西。

對於使用 Linux 作為遊戲平台的人來說,這是一個問題,因為遊戲往往僅以二進位形式分發。當 Linux 端口出現故障時,它會顯得很糟糕,但我有一種感覺,嘗試從總體上解決這個問題,而不是期望每個人都更新他們的端口,會更有成效。

是否有任何發行版試圖保持二進位相容性,不一定要保留所有舊版本,但至少要保留舊的 sonames,這樣適用於版本 n 的二進位檔案也應該適用於版本 n+1?

我能找到的最接近的東西是 Valve 的“Steam Runtime”,它是一個二進制兼容層,僅適用於透過 Steam 分發的程式。

答案1

基本上這可以歸結為:你無法保持二進制相容性並引入新功能,因為這些事情在大多數方面都是直接相互對立的。如果你最終引入了主要的新功能必須更改 ABI(通常在 API 更改後不久)。現在,您可以擁有版本化符號(就像Glibc 那樣),但這會使庫的大小增加(並且在將二進位檔案載入記憶體時也可能會導致一些效能損失),並且開發人員通常不希望保留它庫(遺留程式碼包含沒有人有興趣修復的錯誤)。

在分發方面解決這個問題的通常方法有兩個:

  1. 不要更改版本 - 這是典型的企業級發行版,例如(按字母順序排列)RedHat 和 SUSE,以及其他一些發行版(Debian、Slackware、Ubunty LTS 以及可能是它們的克隆版本)。

  2. 允許同時安裝不同版本的庫。

在應用程式分發器上,處理方式與在 Windows 上相同:將所需的所有內容填入分發包中。是的,這就是 Windows 上經常採用的方式 - 這也是典型 Windows 系統的磁碟空間要求通常比具有相同功能的 Linux 高幾倍的原因之一 - 應用程式之間僅共享很少的內容,並且在某處有自己的副本。您可以將其視為每個 GTK/Qt 應用程式都帶有自己的 GTK/Qt 堆疊。它可以有一些優點,但缺點也很多。例如,從安全角度來看,Technicolor TM就是一場惡夢。如果二進位檔案是靜態連結的,甚至是全高清的。

相關內容