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 시스템을 설정하려는 경우 이식 가능한 경향이 있습니다(확실히 간단하지는 않지만 지원되고 가능합니다!).