서로 다른 Linux/Unix 커널을 상호 교환할 수 있습니까?

서로 다른 Linux/Unix 커널을 상호 교환할 수 있습니까?

Linux 커널을 FreeBSD 등과 함께 사용할 수 있나요? 아니면 그 반대로도 사용할 수 있나요(예: Debian의 FreeBSD 커널)? 일반적인 대답이 있습니까? 제한 사항은 무엇입니까? 장벽은 무엇입니까?

답변1

ioctl아니요, 다양한 Unix 스타일 운영 체제 구현의 커널은 상호 교환이 불가능합니다. 특히 시스템 호출( 세부 정보 포함), 다양한 A 가상 파일 시스템 등 나머지 시스템(사용자 공간)에 서로 다른 인터페이스를 제공하기 때문입니다 . ..

어느 정도 소스 코드 수준에서 상호 교환 가능한 것은 커널과 C 라이브러리의 조합이거나 오히려 커널과 라이브러리에 의해 노출되는 사용자 수준 API입니다(본질적으로 POSIX에서 설명하는 계층의 보기, 여부를 고려하지 않고실제로 POSIX). 이에 대한 예는 다음과 같습니다.데비안 GNU/kFreeBSD, FreeBSD 커널 위에 데비안 시스템을 구축합니다.데비안 GNU/허드, Hurd 위에 데비안 시스템을 구축합니다.

이는 커널 상호 교환성 수준에는 미치지 못하지만, 재컴파일 없이 다양한 시스템에서 바이너리를 사용할 수 있도록 공통 애플리케이션 바이너리 인터페이스를 표준화하려는 시도가 있었습니다. 예는 다음과 같습니다인텔 바이너리 호환성 표준, 이는 iBCS 2 레이어가 있는 이전 버전의 Linux를 포함하여 이를 구현하는 모든 Unix 시스템에서 이를 준수하는 바이너리를 실행할 수 있도록 합니다. 나는 1990년대 후반에 Linux에서 WordPerfect를 실행하는 데 이를 사용했습니다.

당신은 또한 볼 수 있습니다Linux에서 FreeBSD chroot를 빌드하는 방법.

답변2

일부 커널에는 바이너리 호환성이 있어 사용자 공간 프로그램을 다른 ABI와 혼합할 수 있습니다(예: freebsd는 어느 정도 Linux 바이너리와 작동할 수 있습니다). 그러나 핵심 바이너리(예: init 프로그램, 모듈 로더, 장치 드라이버 설정 도구, C 라이브러리)는 파일 시스템을 설정하는 데 필요한 도구...) 실제로 외부 커널을 사용하여 시스템을 성공적으로 부팅하려면 커널 수준 인터페이스에 대해 알아야 할 것이 너무 많습니다.

또한 파일 시스템이 호환되어야 합니다. 또한 바이너리 호환성 옵션을 사용하려면 커널에 "하드" 컴파일이 필요합니다. 커널 모듈로 구현된 모든 항목은 모듈 로더를 실행할 수 없기 때문에 실패합니다.

앞서 언급했듯이 사용자 환경은 freebsd 기반 데비안 시스템을 다시 컴파일하거나 Linux에서 netbsd pkgsrc 시스템을 설정하려는 경우 이식 가능한 경향이 있습니다(확실히 간단하지는 않지만 지원되고 가능합니다!).

관련 정보