O binário mais antigo trabalhando no Linux?


34

Em uma discussão sobre compatibilidade com versões anteriores no kernel do Linux e ABI da GUI , Alan Cox observa que " meu kernel 3.6rc ainda executará um binário do Rogue criado em 1992. O X é compatível novamente com aplicativos muito mais antigos que o Linux " .

Então, quão compatíveis são as interfaces binárias de aplicativos Linux ?

Qual é o executável binário mais antigo, realmente escrito e compilado anos atrás, que ainda será executado em uma moderna distribuição Linux de uso geral?

Tenho certeza de que todas essas palavras estão sujeitas a interpretação. Minha noção principal é que não é justo executá-lo por meio de um emulador ou máquina virtual especializada ou tradutor binário, mas algumas dessas coisas provavelmente estão embutidas em algumas distribuições modernas, e aprender sobre isso faz parte da diversão aqui.

Variações por arquitetura de hardware, formato de arquivo executável , idioma e principais dependências de carregamento dinâmico da biblioteca também são interessantes.

Observe que, quando as regras são flexíveis, eis um exemplo de como voltar mais longe. A página web 2002 Correndo a.out executáveis em modernas Red Hat Linux fala sobre o uso realmente velha Linux pré-ELF a.out formato executáveis depois de fazer modprobe binfmt_aout e obter /lib/ld.soe libc.so.4 novamente, é de interesse periférico para esta pergunta, mas ilustra os tipos de coisas que pode estar envolvido ao cavar mais para trás.

Atualizando para os fãs do BSD, é ótimo ver que o iBCS2 estava suportando aplicativos antigos do Xenix (como zork / dungeon-2.5.6 de 1990) e aplicativos do SCO OpenServer 5.0.x tão recentemente quanto o NetBSD 4.0.1 (de 2008): iBCS2 e NetBSD Diversão com virtualização . Mas a mesma coisa parece quebrada no NetBSD 5.0.x.

Atualização 2 : um ano depois, depois de receber o selo "Anunciador" para esta pergunta, ainda estou procurando uma resposta. E para esclarecer, como se trata de APIs, ele deve ser um binário "real" (comprimento diferente de zero), que ainda funciona pelo menos principalmente da maneira original.


6
O IBCS deve permitir que você execute binários alguns anos mais antigos que o Linux.
— Gilles 'SO- stop be evil'

Fiquei surpreso ao não ver uma tag "ABI" e ainda não consegui criar uma. Então acrescente que, se você acha que faz sentido.
— Nealmcb

@Gilles Parece que o iBCS está bastante desatualizado. Por exemplo, foi substituído por "Linux ABI", talvez uma década atrás ( Linux ABI- Usando outros binários Unix no Linux ) e a versão mais recente do linux-abi parece ser de 2002 para 2.4.18: kernel.org/pub/linux /kernel/people/hch/linux-abi/v2.4
— nealmcb

11
Um binário de Zork de 1981 é executado na VM / 370 da IBM e, portanto, presumivelmente no z / VM atual: Zork - Computer History Wiki . E um 1978 binário de Zork é executado em RT-11 se você pode achar que ....
— nealmcb

3
+1 Eu li essa citação na semana passada também e me perguntei se ela apareceria aqui.
— Michael

Respostas:


11

Eu acho que / bin / true deve ser o trabalho mais antigo ..

Bem, você pode chamar um arquivo de zero byte de binário?

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

11
Fofa. Você sabe se / bin / true foi distribuído como um arquivo de tamanho zero e, se sim, quando e onde? Para sorrisos, consulte Solaris / bin / true - Fóruns do
— TDWTF

3
@nealmcb - Havia um programa de 0 byte chamado go.compara o CP / M e o DOS que executaria novamente o último arquivo COM carregado. Então, foi vendido. Então, de fato, é anterior ao Linux. Apenas mudou o que fez quando pulou de plataforma. Fale sobre compatibilidade com versões anteriores! Temos um programa CP / M, DOS e * nix, todos em execução ao mesmo tempo.
— Jeremy J Starcher

Que comportamento estranho - execute o último arquivo COM ... De qualquer forma, ainda estou procurando um binário "real" (comprimento diferente de zero), que ainda pelo menos funcione da maneira original.
— Nealmcb 28/09/2013

Curiosamente isso funciona em um shell POSIX e csh, mas falha em zsh:zsh: exec format error
— Marco

Apenas para esclarecimento, apesar de adorar essa discussão lateral, não considero uma resposta válida, pois ela não foi "realmente escrita e compilada anos atrás". Estou perguntando sobre compatibilidade com ABI.
— Nealmcb 3/10

2

Então, quão compatíveis são as interfaces binárias de aplicativos Linux?

Você pode consultar o relatório de análise para a ABI do kernel Linux aqui (versões 2.6.36-4.4.5):

insira a descrição da imagem aqui

O mesmo relatório que você pode encontrar para várias bibliotecas base Linux nesta página (Glibc, Qt, cairo, ...). A compatibilidade binária reversa é estimada para cada versão em porcentagem, para que você possa concluir sobre a compatibilidade ABI geral para cada biblioteca:

insira a descrição da imagem aqui

Muito mais relatórios para cerca de 700 bibliotecas Linux podem ser encontrados no upstream.rosalinux.ru . Esse recurso não é mais suportado (use o abi-tracker ), mas é possível consultar os relatórios das versões antigas das bibliotecas.


2
O "kernel ABI" interno não diz nada sobre compatibilidade com versões anteriores de aplicativos binários em execução no linux. No máximo, diz algo sobre a compatibilidade com versões anteriores dos módulos do kernel. Eu acho que existem salvaguardas para impedir que você carregue módulos compilados para uma versão diferente do kernel.
— DepressedDaniel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.