Bsd

是什麼允許 BSD 執行 Linux 二進製文件,但反之則不行?

  • June 17, 2015

是什麼讓 BSD 能夠執行 Linux(和其他類 Unix)二進製文件,但 Linux(以及大部分其他類 Unix)不能執行 BSD 二進製文件?

市場力量。

與 *BSD 相比,專門針對 Linux 的程序要多得多。許多軟體原始碼具有足夠的可移植性,可以在兩者上進行編譯,但許多發布 Linux 二進製文件的軟體生產商並不費心為 BSD 這樣做,因為它們的市場份額比 Linux 更小。¹

如果一個軟體只能以二進制形式用於不同的作業系統,ABI 仿真是使其執行的一種方法,這就是 BSD 所做的。²

曾幾何時,當 x86 Unix 在 Linux 上佔據市場多數時,iBCS功能被添加到 Linux 以允許它執行為 SCO Unix 等建構的二進製文件。隨著 Linux 市場份額的增加,對該功能的興趣下降,因此在 Linux 2.3 開發系列期間它被允許年久失修。³ SCO 的訴訟幫助該功能從 Linux 中消失,但我認為這是失去市場的次要原因產生該功能的力量。

沒有技術原因導致 Linux 有一天無法獲得類似 iBCS 的功能來執行 BSD 二進製文件,但除非 BSD 和 Linux 的市場地位因某種原因發生轉變,否則這不太可能。

今天,很少有人呼籲這樣的事情。你知道有多少只適用於 BSD 的二進製程序,它們也不是為 Linux 建構的?肯定有一些,但我猜它們中的大多數是用於嵌入式 BSD,例如Junos。如果它不允許一組重要的程序在 Linux 上執行,否則不會創建這樣的功能。⁴


腳註:

  1. 我在這裡沒有將 OS X 算作 BSD,因為這是一個單獨的二進制兼容性問題。FreeBSD、OpenBSD 和 NetBSD 在 x86 上使用ELF,而 OS X 使用完全不同的可執行格式。OS X 上的動態連結也與傳統的 x86 BSD 有很大不同。

有關 Linux ⇔ OS X 二進制兼容性故事的更多資訊,請參閱此問題。 2. 自由BSD開放BSDNetBSD 3. 與某些種類的鯊魚一樣,停止前進的軟體也會死掉。這種現象發生在軟體上,我們稱這種現象為bit-rot而不是窒息,但因果是一樣的。 4. 對比NDISwrapper,它允許 Linux 執行為 Windows XP 編寫的純二進製網卡驅動程序。需求被辨識,需求被滿足。這需要在哪裡執行僅限 BSD 的二進製文件?

引用自:https://unix.stackexchange.com/questions/172038