在Linux上运行最早的二进制文件?


34

关于Linux内核和GUI ABI的向后兼容性讨论中,Alan Cox指出:“ 我的3.6rc内核仍将运行1992年构建的Rogue二进制文件。X向后兼容比Linux早得多的应用程序。

那么Linux 应用程序二进制接口到底向后兼容吗?

什么是几年前实际编写和编译的最旧的二进制可执行文件,仍然可以在现代的通用Linux发行版上运行?

我确定所有这些词都可以解释。我的主要观点是,通过仿真器或专用虚拟机或二进制转换器运行它是不公平的,但是某些此类内容可能已内置在一些现代发行版中,在这里进行学习是有趣的一部分。

还需要关注硬件体系结构,可执行文件格式,语言和主要库动态加载依存关系的变化。

请注意,放宽规则后,这里有一个更进一步的示例。2002年的网页在现代Red Hat Linux运行a.out可执行文件讨论了在完成 并获得之后使用非常老的Linux之前的ELF a.out格式的可执行文件,这 再次引起了这个问题的兴趣,但它说明了这类事情进一步挖掘时可能会涉及到。modprobe binfmt_aout/lib/ld.solibc.so.4

为您的BSD粉丝提供更新,很高兴看到iBCS2支持旧的Xenix应用程序(例如1990年的zork / dungeon-2.5.6)和SCO OpenServer 5.0.x应用程序以及最近的NetBSD 4.0.1(来自2008年):iBCS2和NetBSD | 虚拟化的乐趣。但是同一件事在NetBSD 5.0.x中似乎坏了。

更新2:一年后,即使获得了此问题的“播音员”徽章,我仍在寻找答案。而且要澄清的是,由于这是关于API的,因此它应该是“真实的”二进制文件(长度不为零),至少仍然大部分以原始方式工作。


6
IBCS应该允许您运行比Linux 早几年的二进制文件。
吉尔斯(Gillles)“所以-别再作恶了”

我很惊讶地没有看到一个“ ABI”标签,而且还不能创建一个。因此,如果您认为有道理,请添加。
nealmcb 2012年

@Gilles似乎iBCS已经过时了。例如,它可能在十年前被“ Linux ABI”所取代(Linux ABI-在Linux上使用其他Unix二进制文件),而最新版本的linux-abi似乎是2002年的2.4.18版本:kernel.org/pub/linux /kernel/people/hch/linux-abi/v2.4
nealmcb 2012年

1
Zork的1981年二进制文件在IBM的VM / 370上运行,因此可以在其当前的z / VM上运行:Zork-Computer History Wiki。和1978年二进制的Zork对RT-11运行,如果你能找到....
nealmcb

3
+1我也在上周阅读了此报价,想知道它是否会出现在这里。
2012年

Answers:


11

我认为/ bin / true必须是最老的..

好吧,您可以将零字节文件称为二进制文件吗?

touch /tmp/old_true
chmod 755 /tmp/old_true
/tmp/old_true
echo $?

1
可爱。您是否知道/ bin / true是否已作为零长度文件分发,以及是否在何时何地分发?有关笑容,请参见Solaris / bin / true-TDWTF论坛
nealmcb 2012年

3
@nealmcb- go.comCP / M和DOS都调用了一个0字节的程序,它将重新运行最后加载的COM文件。因此,它甚至被卖掉了。因此,实际上,它早于Linux。它只是改变了跳平台时的功能。谈论向后兼容性!我们有一个CP / M,DOS和* nix程序一次运行。
杰里米·J·斯塔彻

真是奇怪的行为-运行最后一个COM文件。
nealmcb 2013年

有趣的是,这可以在POSIX shell和csh中使用,但在zsh中却无法使用:zsh: exec format error
Marco Marco

为了澄清起见,尽管我喜欢这种讨论,但我认为这不是一个有效的答案,因为它不是“实际上是几年前编写和编译的”。我问的是ABI兼容性。
nealmcb 2013年

2

那么Linux应用程序二进制接口到底向后兼容吗?

您可以在此处查看 Linux内核ABI的分析报告(2.6.36-4.4.5版本):

在此处输入图片说明

您可以在此页面上的多个Linux基本库(Glibc,Qt,cairo等)中找到相同的报告。估计每个版本的向后二进制兼容性(以百分比表示),因此您可以得出每个库的总体ABI兼容性的结论:

在此处输入图片说明

您可以在streaming.rosalinux.ru上找到有关700个Linux库的更多报告。不再支持此资源(请改用abi-tracker),但是您可以查看旧版本库的报告。


2
内部的“内核ABI”没有提及在Linux上运行的二进制应用程序的向后兼容性。最多说一点有关内核模块的向后源兼容性。我认为有一些保护措施可以防止您加载针对不同内核版本编译的模块。
DepressedDaniel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.