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.

nealmcb
fonte
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 $?
Jeremy J Starcher
fonte
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.

linuxbuild
fonte
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