티스토리 뷰
*GPT 번역
📌 리눅스 커널의 ABI 안정성 수준
이 디렉터리에는 네 가지 수준의 ABI 안정성을 반영하는 서브디렉터리가 있습니다.
각 인터페이스는 아래의 규칙에 따라 안정성 수준이 변경될 수 있습니다.
1️⃣ stable/ (안정적인 인터페이스)
📌 설명
- 개발자가 안정적(stable) 이라고 정의한 인터페이스들이 포함됩니다.
- 사용자 공간 프로그램은 제한 없이 이 인터페이스를 사용할 수 있습니다.
- 최소 2년간의 하위 호환성(backward compatibility)이 보장됩니다.
- 대부분의 인터페이스(예: 시스템 호출(syscalls))는 변경되지 않으며 항상 유지됩니다.
2️⃣ testing/ (테스트 단계의 인터페이스)
📌 설명
- 대부분 개발이 완료되어 안정적일 가능성이 높지만, 공식적으로 완전히 안정적인 것은 아님.
- 새로운 기능이 추가될 수 있지만, 기존 기능은 보존됩니다.
- 보안 취약점이나 심각한 오류가 발견되지 않는 한, 인터페이스가 갑자기 변경되지 않음.
- 사용자 공간 프로그램은 사용할 수 있지만, 향후 변경 가능성에 대비해야 함.
- 개발자들은 이 인터페이스를 사용하는 프로그램 목록을 문서에 추가할 것을 권장함.
→ 이를 통해 커널 개발자가 변경 사항을 알릴 수 있음.
3️⃣ obsolete/ (폐기 예정 인터페이스)
📌 설명
- 현재 커널에 남아 있지만, 추후 제거될 예정인 인터페이스.
- 문서에서 폐기된 이유 및 제거 예상 시기를 확인할 수 있음.
- 가능하면 새로운 인터페이스로 대체할 것을 권장함.
4️⃣ removed/ (제거된 인터페이스)
📌 설명
- 과거에 커널에 존재했지만, 현재는 완전히 제거된 인터페이스 목록.
- 해당 인터페이스를 사용하는 프로그램은 더 이상 정상적으로 실행되지 않을 가능성이 높음.
📌 각 문서(파일)에 포함되는 정보
각 디렉터리 내부의 모든 문서는 다음 정보를 포함합니다.
- What: 인터페이스에 대한 짧은 설명
- Date: 인터페이스가 문서화된 날짜
- KernelVersion: 해당 기능이 처음 등장한 커널 버전
- Contact: 이 인터페이스에 대한 주요 연락처 (메일링 리스트일 수도 있음)
- Description: 인터페이스의 상세 설명 및 사용 방법
- Users: 해당 인터페이스를 사용하는 모든 사용자 목록
특히 testing 단계의 인터페이스는
변경 시 커널 개발자가 사용자 공간 개발자에게 통보할 수 있도록
이 정보를 작성하는 것이 매우 중요함.
📌 ABI 안정성 수준 변경 규칙
- stable 인터페이스는 obsolete 상태로 이동할 수 있음. (단, 적절한 사전 공지가 필요)
- obsolete 인터페이스는 일정 시간이 지나면 커널에서 제거될 수 있음.
- testing 인터페이스는 개발이 완료되면 stable 상태로 이동 가능.
- testing 인터페이스는 반드시 obsolete 과정을 거친 후 제거해야 하며,
바로 커널에서 삭제될 수 없음. - 새로운 인터페이스가 추가될 때 개발자가 초기 상태를 직접 결정함.
📌 ABI가 아닌 요소 (절대 안정성을 보장하지 않는 것)
다음 항목들은 ABI로 간주되지 않으며, 사용자 공간 프로그램이 절대 의존해서는 안 됩니다.
1️⃣ Kconfig (커널 설정 옵션, /proc/config.gz 파일 등)
- 특정 Kconfig 심볼(예: CONFIG_SCHED_CORE)의 존재 여부에 의존하면 안 됨.
- /proc/config.gz 또는 /boot/.config 같은 설정 파일을 사용해 커널 기능을 감지하는 것은 권장되지 않음.
2️⃣ 커널 내부 심볼 (Kernel-internal symbols)
- 커널 바이너리 내부 심볼(System.map 파일, 심볼 테이블 등)에 의존하면 안 됨.
- 예: 특정 커널 심볼(함수, 구조체 등)의 주소를 하드코딩하는 것
- 이러한 방식은 커널 버전에 따라 변경될 가능성이 매우 높음.
- 관련 문서: Documentation/stable_api_nonsense.txt
🚀 결론
- 리눅스 커널과 사용자 공간 간의 ABI(Application Binary Interface)를 설명하는 문서
- 인터페이스의 안정성 수준에 따라 4가지 디렉터리로 분류됨
- stable/ (안정적, 최소 2년 보장)
- testing/ (거의 안정적이지만 변경 가능성 있음)
- obsolete/ (폐기 예정)
- removed/ (완전히 제거됨)
- 사용자 공간 프로그램은 반드시 stable 또는 testing 인터페이스를 사용해야 함.
- Kconfig나 커널 내부 심볼에 의존하면 안 됨.
이 문서는 리눅스 커널과 사용자 공간 프로그램의 호환성을 유지하기 위한 규칙을 설명하는 중요한 문서입니다. 🚀
stable testing obsolete removed로 나눠져있음
'공부한거 > OS' 카테고리의 다른 글
커널빌드 오류들 (0) | 2025.02.14 |
---|---|
Linux Document - (1) (0) | 2025.02.08 |
Kernel Configuration 진입 (0) | 2025.02.08 |