리눅스에서 가장 오래된 바이너리?


34

Alan Cox 는 Linux 커널 및 GUI ABI의 하위 호환성에 대한 논의에서 " 3.6rc 커널은 여전히 ​​1992 년에 구축 된 Rogue 바이너리를 계속 실행합니다. X는 Linux보다 훨씬 오래된 앱과 호환됩니다. "

그렇다면 Linux Application 바이너리 인터페이스 는 이전 버전과 어떻게 호환 됩니까?

실제로 몇 년 전에 작성되고 컴파일 된 가장 오래된 바이너리 실행 파일은 현대 주식 범용 Linux 배포에서 계속 실행될 것입니까?

나는 그 모든 단어들이 해석의 대상이라고 확신합니다. 내 주요 개념은 에뮬레이터 또는 특수 가상 컴퓨터 또는 이진 번역기를 통해 실행하는 것이 공정하지 않다는 것입니다. 그러나 그러한 일부는 아마도 현대의 일부 배포판에 내장되어 있으며 여기서 배우는 것이 재미의 일부입니다.

하드웨어 아키텍처, 실행 파일 형식 , 언어 및 주요 라이브러리 동적로드 종속성에 따른 변형 도 중요합니다.

규칙이 완화되면 다시 되돌아가는 예제가 있습니다. 최신 Red Hat Linux에서 2002 웹 페이지 실행 a.out 실행 파일은 수행 및 획득 후 실제로 이전 Linux pre-ELF a.out 형식 실행 파일을 사용하는 것에 대해 이야기 하고 다시이 질문에 대한 주변 관심 분야입니다. 더 깊이 파고들 때 관여 할 수 있습니다.modprobe binfmt_aout/lib/ld.solibc.so.4

BSD 팬들을위한 업데이트 로, iBCS2가 이전 Xenix 앱 (1990 년의 zork / dungeon-2.5.6과 같은) 및 NetBSD 4.0.1 (2008 년부터)과 같은 SCO OpenServer 5.0.x 앱을 지원하고 있음을 알게되어 기쁩니다 : iBCS2 & NetBSD | 가상화를 통한 재미 . 그러나 NetBSD 5.0.x에서도 마찬가지입니다.

업데이트 2 : 1 년 후이 질문에 대한 "아나운서"배지를받은 후에도 여전히 답을 찾고 있습니다. 분명히 말하면, 이것은 API에 관한 것이기 때문에, 적어도 대부분 원래의 방식으로 작동하는 "실제"바이너리 (0이 아닌 길이) 여야합니다.


6
IBCS 를 사용하면 Linux보다 몇 년 더 오래된 바이너리를 실행할 수 있습니다.
Gilles 'SO- 악마 그만'

"ABI"태그가 보이지 않아서 아직 태그를 만들 수 없었습니다. 이해가된다면 추가하십시오.
nealmcb

@Gilles iBCS가 오래된 것 같습니다. 예를 들어, 아마도 10 년 전에 "Linux ABI"(Linux ABI- Linux에서 다른 유닉스 바이너리 사용) 로 대체되었고 linux-abi의 최신 버전은 2002 년 2.4.18 버전 인 것 같습니다 : kernel.org/pub/linux /kernel/people/hch/linux-abi/v2.4
nealmcb

1
Zork의 1981 바이너리는 IBM의 VM / 370에서 실행되므로 아마도 현재 z / VM 인 Zork-Computer History Wiki 입니다. 그리고 만약 그것을 찾을 수 있다면 1978 년 Zork 바이너리는 RT-11에서 실행됩니다 ....
nealmcb

3
+1 나는 지난주에도이 인용문을 읽었고, 그것이 여기에 나타날지 궁금했다.
Michael

답변:


11

/ bin / true가 가장 오래된 작업이어야한다고 생각합니다.

음, 0 바이트 파일을 이진이라고 부를 수 있습니까?

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

1
귀엽다. / bin / true가 길이가 0 인 파일로 배포되었는지, 그렇다면 언제 어디에서 배포되었는지 알고 있습니까? grins에 대해서는 Solaris / bin / true-TDWTF 포럼
nealmcb를

3
@nealmcb- go.com로드 된 마지막 COM 파일을 다시 실행하는 CP / M 및 DOS를위한 0 바이트 프로그램이있었습니다 . 그래서 심지어 팔렸다. 따라서 실제로 Linux보다 우선합니다. 플랫폼을 뛰어 넘었을 때의 방식이 바뀌 었습니다. 이전 버전과의 호환성에 대해 이야기하십시오! CP / M, DOS 및 * nix 프로그램이 모두 한 번에 실행됩니다.
Jeremy J Starcher

무슨 이상한 행동-마지막 COM 파일을 실행하십시오 ... 어쨌든, 나는 여전히 적어도 원래 방식으로 작동하는 "진짜"바이너리 (0이 아닌 길이)를 찾고 있습니다.
nealmcb

흥미롭게도 이것은 POSIX 쉘과 csh에서 작동하지만 zsh에서는 실패합니다.zsh: exec format error
Marco

명확히하기 위해, 나는이 부류 토론을 좋아하지만, "실제로 몇 년 전에 쓰여지고 컴파일되지 않았기 때문에"이것이 올바른 답이라고 생각하지 않습니다. ABI 호환성에 대해 묻고 있습니다.
nealmcb

2

그렇다면 Linux Application 바이너리 인터페이스는 이전 버전과 어떻게 호환됩니까?

Linux 커널 ABI에 대한 분석 보고서는 여기 (2.6.36-4.4.5 버전)에서 확인할 수 있습니다.

여기에 이미지 설명을 입력하십시오

이 페이지 에서 여러 Linux 기본 라이브러리 (Glibc, Qt, cairo 등) 에 대해 동일한 보고서를 찾을 수 있습니다 . 각 바이너리의 하위 바이너리 호환성은 퍼센트 단위로 추정되므로 각 라이브러리의 전반적인 ABI 호환성에 대한 결론을 내릴 수 있습니다.

여기에 이미지 설명을 입력하십시오

upstream.rosalinux.ru에서 찾을 수있는 약 700 개의 Linux 라이브러리에 대한 훨씬 더 많은 보고서 . 이 리소스는 더 이상 지원되지 않지만 ( 대신 abi-tracker 사용) 이전 릴리스의 라이브러리에 대한 보고서를 볼 수 있습니다.


2
내부 "커널 ABI"는 리눅스에서 실행되는 바이너리 응용 프로그램의 이전 버전과의 호환성에 대해서는 아무 것도 말하지 않습니다. 기껏해야 커널 모듈의 하위 소스 호환성에 대해 말합니다. 다른 커널 버전으로 컴파일 된 모듈을로드하지 못하게하는 안전 조치가 있다고 생각합니다.
DepressedDaniel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.