다른 Linux / Unix 커널은 서로 바꿔 사용할 수 있습니까? 사용할 수 있습니까

Linux 커널을 가져 와서 FreeBSD와 함께 사용할 수 있습니까 (또는 그 반대) (FreeBSD 커널, 데비안)? 보편적 인 답변이 있습니까? 한계는 무엇입니까? 장애물은 무엇입니까?



답변

아닙니다. 서로 다른 Unix 스타일 운영 체제 구현의 커널은 서로 호환되지 않습니다. 특히 나머지 시스템 (사용자 공간) (시스템 호출 ( ioctl특정 포함 ), 사용하는 다양한 가상 파일 시스템)에 대해 서로 다른 인터페이스를 제공하기 때문입니다. ..

소스 레벨에서 어느 정도 교환 할 수있는 것은 커널과 C 라이브러리 또는 커널과 라이브러리가 노출하는 사용자 레벨 API의 조합입니다 (본질적으로 POSIX에 의해 기술 된 계층에서의 관점). 그것은 여부를 고려하고 있다 ) 실제로 POSIX. 그 예로는 FreeBSD 커널 위에 데비안 시스템을 구축하는 Debian GNU / kFreeBSDHurd 위에 데비안 시스템을 구축하는 Debian GNU / Hurd가 있습니다.

이것은 커널 상호 호환성 수준은 아니지만 일반적인 응용 프로그램 이진 인터페이스를 표준화하여 재 컴파일하지 않고도 다양한 시스템에서 이진을 사용할 수 있도록 시도했습니다. 예를 들어 , Intel Binary Compatibility Standard 는 iBCS 2 레이어가있는 이전 버전의 Linux를 포함하여이를 준수하는 바이너리가이를 구현하는 모든 Unix 시스템에서 실행될 수 있도록합니다. 나는 이것을 90 년대 후반에 Linux에서 WordPerfect를 실행하기 위해 사용했습니다.

Linux 내부에서 FreeBSD chroot를 빌드하는 방법 도 참조하십시오 .


답변

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

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

언급했듯이 사용자 환경은 freebsd 기반 데비안 시스템과 같이 재 컴파일하거나 Linux에서 netbsd pkgsrc 시스템을 설정하려는 경우 다소 이식성이 좋은 경향이 있습니다 (절대적이지 않지만 지원 및 가능합니다!).