*nix 執行檔兼容性
我查看了這個方案,現在我想知道,一個執行檔可以在具有相同祖先的兩個系統中執行嗎?(所以可能是同一個核心?)
例如,根據方案:Solaris <- System V R4 <- BSD 4.3,那麼,BSD*(OpenBSD、FreeBSD、NetBSD)和 Solaris 可以執行相同的執行檔嗎?
PS 可能這個問題對你來說很明顯而且毫無意義,但我對 *nix 完全陌生,所以對我來說這很重要。
簡短的回答:沒有。
中等答案:也許,如果目標作業系統支持它。
長答案…
首先要注意的是,不同的供應商可能使用不同的晶片組。因此,可以為 SPARC 晶片編譯 Solaris 二進製文件。這不會在 Intel/AMD 機器上執行。同樣,AIX 可能位於 PowerPC 上。HP-UX 可能在 PA-RISC 上。讓我們忽略所有這些問題,並堅持“英特爾/AMD”空間。
下一個問題是不同的作業系統可能會暴露不同的核心系統呼叫。這意味著應用程序對核心的任何呼叫都不會執行預期的操作。這顯然是個問題。然而,目標核心可能能夠提供“ABI 兼容層”;核心(比方說 FreeBSD 核心)可以檢測到您正在嘗試執行 Linux 二進製文件,並且可以在 Linux 核心 ABI 和本機核心 ABI 之間進行轉換。
下一個問題是庫之一;Linux 二進製文件希望能夠載入特定版本的 glibc,該版本可能不存在於宿主作業系統中。這可以通過複製所需的庫來解決。同樣,作業系統可能會使您更容易做到這一點,例如,通過為這些庫提供一個包以使它們易於安裝。
畢竟,您的二進製文件可能會執行:-)
早在 90 年代,Linux 就有一個 iBCS 模組,它允許這種事情發生。例如,它使得在 Linux 上執行 SCO Unix 程序成為可能。我在我的機器上執行了 SCO Unix Oracle 作為概念證明。它工作得很好!顯然沒有供應商支持,所以它不適合生產:-)
現在 Linux 在這個領域擁有了巨大的立足點,其他作業系統嘗試添加兼容性層以允許 Linux 程序在其作業系統上執行。
因此,如果您的作業系統支持 is ,並且如果您正確安裝和配置它,那麼您可能能夠從另一個 Unix 執行一些程序。