# Linux용 C/POSIX 표준 라이브러리 구현 비교

> Clean Markdown view of GeekNews topic #20849. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20849](https://news.hada.io/topic?id=20849)
- GeekNews Markdown: [https://news.hada.io/topic/20849.md](https://news.hada.io/topic/20849.md)
- Type: news
- Author: [baeba](https://news.hada.io/@baeba)
- Published: 2025-05-12T10:05:09+09:00
- Updated: 2025-05-12T10:05:09+09:00
- Original source: [etalabs.net](https://www.etalabs.net/compare_libcs.html)
- Points: 17
- Comments: 0

## Summary

Eta Labs는 **musl**, **uClibc**, **dietlibc**, **glibc**의 기능성과 경량성을 중심으로 상세히 비교하였습니다. **musl**과 **dietlibc**는 매우 작은 **실행 파일 크기**와 메모리 사용량을 특징으로 하며, **glibc**는 광범위한 **기능 지원**과 최고의 **메모리 연산 성능**을 제공합니다. **ABI 호환성**에서는 glibc가 유일하게 심볼 버전 관리까지 지원하며, **빌드 환경**과 **아키텍처 지원**에서는 glibc와 musl이 가장 폭넓게 대응합니다. **dietlibc**는 기능 구현이 미흡하고, **성능**과 **호환성** 모두에서 제한적입니다.

## Topic Body

##### 1. **프로젝트 개요 및 목적**  
  
Eta Labs는 리눅스용 C/POSIX 표준 라이브러리 구현체들을 기능성과 경량성(“bloat”) 중심으로 비교했다. 비교 대상은 musl, uClibc, dietlibc, glibc이며, 향후 bionic 및 BSD libc들도 추가될 예정이다.  
    
##### 2. **메모리 사용 및 경량성 비교 (Bloat)**  
  
* `musl`과 `dietlibc`는 매우 가볍고 작은 실행 파일을 만들 수 있다 (static hello: 13k vs glibc의 662k).  
* `glibc`는 전체 `.so` 크기가 7.9M에 달해 가장 무겁지만, iconv 등 많은 기능을 포함한다.  
* uClibc는 선택적 기능을 많이 포함한 상태로 테스트됨.  
    
##### 3. **리소스 부족 상황 대응**  
  
* `musl`은 실패를 명확히 보고하고 비정상 종료 없이 처리하는 경우가 많다.  
* `glibc`와 `uClibc`는 메모리 부족 시 abort하거나 예외를 제대로 처리하지 못하는 경우가 있다.  
* `dietlibc`는 일부 기능이 아예 구현되지 않았거나, 매우 미약한 처리 수준이다.  
    
##### 4. **성능 비교**  
  
* glibc는 메모리 연산(strchr, memset 등)과 I/O(`putc/getc`)에서 최상의 성능을 보임.  
* musl은 균형 잡힌 성능과 낮은 오버헤드를 보이며 경쟁력 있음.  
* dietlibc는 `strstr`, `putc/getc`, `thread` 관련 연산에서 압도적으로 느림.  
    
##### 5. **ABI 안정성 및 버전 호환성**  
  
* `musl`과 `glibc`는 ABI의 안정성과 호환성을 제공하지만, `glibc`만 심볼 버전 관리를 지원한다.  
* `dietlibc`와 `uClibc`는 전반적으로 ABI 호환성과 버전 호환성에서 미흡하거나 비공식적이다.  
    
##### 6. **알고리즘 및 내부 구현**  
  
* `musl`과 `glibc`는 고급 substring 검색(twoway), DFA 기반 정규표현식, 성능 중심 malloc 사용.  
* `dietlibc`는 naive quicksort와 backtracking regex 등으로 성능 및 안정성에서 취약하다.  
* 정렬과 메모리 할당 알고리즘은 glibc가 `introsort`, `ptmalloc` 등으로 고급화되어 있음.  
    
##### 7. **기능/표준 지원 범위**  
  
* `glibc`는 거의 모든 C99/C11 및 POSIX 기능을 지원하며, 로케일, 아이콘브(iconv), 디버깅 기능까지 폭넓다.  
* `musl`은 필수 기능을 준수하면서도 작은 크기로 구현됨.  
* `dietlibc`는 대부분 기능이 불완전하거나 미비하며, POSIX 호환도 낮다.  
    
##### 8. **아키텍처 및 빌드 환경 지원**  
  
* `musl`은 대부분의 주요 아키텍처(x86, ARM, MIPS 등)를 폭넓게 지원하고, non-MMU 환경까지 고려함.  
* glibc는 전통적으로 가장 광범위한 지원을 하며, 배포가 널리 되어 있음.  
* `dietlibc`는 최소 아키텍처만 지원하며, 이식성과 빌드 유연성이 떨어진다.

## Comments



_No public comments on this page._
