glibc 대신 libc를 사용하여 Linux 배포판을 구축할 수 있나요?

glibc 대신 libc를 사용하여 Linux 배포판을 구축할 수 있나요?

나는 최근 고도로 숙련된 소프트웨어 엔지니어인 친구와 대화를 나누었는데, 그는 나에게 libc가 glibc보다 훨씬 낫다는 사실을 설명하는 몇 가지 기사를 보여주었습니다.

대신 libc를 사용하는 것이 가능한지, 이 방법을 사용하면 어떤 문제가 발생하게 되는지 궁금합니다.

답변1

맥락: 위의 설명에서 BSDish가libc 의미한다고 가정합니다.

나는 그것이 조사되었다고 생각하지만 libc주어진 커널에 밀접하게 묶여 있는 경향이 있으며( glibc추상화 계층이 있어 이식성을 허용하지만 추상화 계층이 일으키는 일반적인 문제를 일으킴) libcLinux 커널과 BSD를 작동하려면 다음이 필요합니다. 거의 완전히 다시 작성되었습니다. 주요 시스템 서비스는 두 시스템 간에 매우 다릅니다(예: BSDlibc 대신 소켓 쌍을 사용하기 때문에 BSD는 파이프/FIFO가 없다고 가정합니다. 반대로 Linux는 파이프 호환 소켓 쌍을 지원하지 않습니다).

다른 방향으로 가는 것(데비안은 FreeBSD 커널에 실험적인 Linux 사용자 공간을 가지고 있다고 생각합니다) glibc은 의 이식성 계층으로 인해 가능합니다.

답변2

많은 libc 구현이 있습니다. 다음을 사용하여 시스템을 구축하는 것이 가능하며 매우 일반적입니다.유클리브또는EGLIBC. 특별히 어렵지도 않습니다. 시도해 보세요.루트 빌드.

답변3

많은 소프트웨어는 glibc자체나 glibc매크로 또는 glibc스타일에 의존하므로 빌드가 실패합니다. glibc내부에서 알면 어떤 소프트웨어든 쉽게 고칠 수 있습니다 . 예를 들어 여기서 볼 수 있습니다리눅스 헤더을 위한 musl. 헤더는 완료되지 않았지만 커밋을 체크아웃하고 이 작업이 어떻게 보이는지 확인할 수 있습니다.

glibc모든 개발자는 기반 시스템을 사용하여 소프트웨어를 테스트합니다 . 모든 라이브 소프트웨어 개발을 수정하고 libc풀 요청과 같은 올바른 솔루션을 사용하여 다른 소프트웨어와 호환되도록 만드는 것은 불가능합니다 . 따라서 범용 시스템은 gentoo무한한 고통 없이 대체 libc를 사용하여 구축할 수 없습니다.

예 를 들어 임베디드 개발자는 openwrt소프트웨어 버전을 수정하고 이를 해결하기 위해 많은 노력을 기울이고 있습니다. 따라서 임베디드 시스템(예: openwrt)은원천musl또는 와 같은 대체 libc를 사용하여 빌드할 수 있습니다 uclibc.

glibcother로 대체하는 고통스럽지 않고 올바른 유일한 방법은 other를 사용하여 libc모든 동작을 시뮬레이션하는 특수 래퍼를 구현하는 것입니다 . 오늘날에는 그러한 프로젝트가 없습니다.glibclibc

관련 정보