특정 Linux 버전용으로 컴파일된 애플리케이션이 ABI 호환성을 보장하지 않고 어떻게 모든 버전에서 실행될 수 있습니까?

특정 Linux 버전용으로 컴파일된 애플리케이션이 ABI 호환성을 보장하지 않고 어떻게 모든 버전에서 실행될 수 있습니까?

다운로드할 수 있는 일부 Linux 버전(예: 4.18)용으로 컴파일된 JDK 애플리케이션이 있다고 가정합니다. 동일한 애플리케이션을 다양한 Linux 버전(예: 3.10)에서 어떻게 실행할 수 있나요? Linux가 주요 버전 간의 ABI 호환성을 보장할 수 없는 경우. 아래 그림과 같이 사용자 프로그램과 커널의 바이너리가 동일한 커널 버전에 대해 생성된 경우에만 사용자 프로그램과 커널 간의 ABI 호환성이 보장됩니다. 여기에 이미지 설명을 입력하세요.

위에서 Linux 버전 간의 ABI 비호환성에 대해 제가 이해한 것이 맞다면 애플리케이션 개발자가 바이너리가 생성되는 Linux 버전을 언급하지 않는 이유는 무엇입니까? 하드웨어 아키텍처(x86, x64, ARM)와 마찬가지로 애플리케이션에서 호환되는 애플리케이션을 언급합니다.

답변1

사용자 공간에 노출된 커널 ABI안정적이어야 한다즉, 특정 커널에서 실행 중인 프로그램이 이후 커널에서 실행을 중지하면 심각한 버그로 간주되어 일반적으로 수정됩니다. 버그가 커널 안정 시리즈의 릴리스에 영향을 미치는 경우 해당 수정 사항도 백포트됩니다.

RHEL 커널 ABI에 대한 참조와 이전 커널로 백포트하는 기능을 보면 이는 업스트림 커널 개발자가 "약속한" 커널 ABI 안정성을 뛰어넘는 것입니다.

애플리케이션의 경우 라이브러리는 커널보다 더 중요하며 지원은 배포판마다 다릅니다. 예시 보기RHEL 7 호환성 가이드(커널에 대해서는 언급하지 않습니다.) 이게 뭐야?최하위 비트가장 흥미로운 점은 응용 프로그램이 의존할 수 있는 라이브러리(LSB 호환 배포판)와 해당 이름을 나열한다는 것입니다.

관련 정보