GNU C 라이브러리

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
GNU C 라이브러리
Heckert GNU white.svg
개발자 GNU 프로젝트
개발 상태 활성화
프로그래밍 언어 C
운영 체제 유닉스 계열
웹사이트 www.gnu.org/software/libc/
리눅스 API는 리눅스 커널의 시스템 콜 인터페이스, GNU C 라이브러리(GNU), libdrm, libalsa 그리고 libevdev (freedesktop.org)에 의해 구성된다.
GNU C 라이브러리는 리눅스 커널의 시스템 호출을 래핑한다.
리눅스 커널과 GNU C 라이브러리는 함께 리눅스 API를 형성한다. 컴파일 이후 바이너리는 ABI를 제공한다.

GNU C 라이브러리는, 일반적으로 glibc로 알려진, GNU 프로젝트C 표준 라이브러리를 구현한 것이다. 이름과는 달리 현재는 C++도 지원한다. 이것은 1990년대 초반 자유 소프트웨어 재단(FSF)이 자신의 GNU 운영 체제를 위해 시작되었다.

GNU 약소 일반 공중 사용 허가서 하에 배포되는 glibc는 자유 소프트웨어이다.

역사[편집]

Glibc 프로젝트는 초기의 1980년대에 FSF에서 일하던 Roland McGrath에 의해 대부분 쓰여졌다.

1988년 2월 FSF는 glibc를 ANSI C가 요구하는 기능을 거의 완벽하게 갖는다고 주장하였다.[1] 1992년 이것은 구현된 ANSI C-1989와 POSIX.1-1990을 가졌으며 POSIX.2의 방식으로 동작하였다.[2]

1995년 9월 Ulrich Drepper는 glibc 프로젝트에 대한 그의 첫 기여를 하였고 1990년대 들어 점차적으로 glibc의 핵심 기여자와 유지인이 되었다.[3] Drepper는 수 년동안 유지 관리를 하는 위치였으며 2012년 프로젝트의 전체 커밋 중 63%를 차지하였다.[4]

"리눅스 libc"의 분기[편집]

1990년대 초반 리눅스 커널의 개발자들은 glibc로 분기하였다. "리눅스 libc"로 불리는 이 분기는 릴리즈 버전 2부터 5까지 독립적으로 유지되었다.

FSF가 glibc 2.0을 릴리즈하였을 때 이것은 더 많은 완전한 POSIX 표준과 더 나은 국제화와 지역화, 다중언어 함수, IPv6 역량, 64비트 데이터 접근, 멀티스레드 애플리케이션을 위한 기능을 가졌으며 코드는 더 이식가능해졌다.[5] 이 시점에서 리눅스 커널 개발자들은 자신들의 분기를 중단하고 다시 FSF의 glibc로 돌아왔다.[6]

리눅스 libc의 최신 버전은 내부 이름(soname) libc.so.5를 가진다. 이 이후로 리눅스의 glibc 2.x는 soname libc.so.6를 사용한다.[7]

리처드 스톨만에 따르면, 코드의 저자가 불분명하고 GNU 프로젝트가 저작권과 저자를 기록하는 것에 엄격하기 때문에 리눅스 libc에서 만들어진 변화는 다시 glibc로 병합될 수 없다고 한다.[8]

운영 위원회의 설치[편집]

2001년부터 라이브러리의 개발은 위원회에 의해 감독되며[9], 특히  Ulrich Drepper[10]가 주요 기여자와 유지인으로서 활동한다.

git으로 전환[편집]

이전의 CVS 저장소 대신, 2009년 glibc는 Sourceware의  저장소로 옮겼다.[11]


버전 역사[편집]

대부분의 시스템에서, glibc의 버전은 lib 파일을 실행함으로써 획득할 수 있다(예를 들면, /lib/libc.so.6).

기능[편집]

glibc는 단일 유닉스 규격POSIX (1c, 1d, 1j)가 요구하는 기능들을 제공하며, ISO C11, ISO C99, 버클리 유닉스 (BSD) 인터페이스 등에서 요구하는 몇몇 기능들도 제공한다.

추가적으로 glibc는 또한 GNU 개발에 필요하다고 여겨지거나 유용한 확장들도 제공한다.

지원되는 하드웨어와 커널[편집]

Glibc는 수많은 여러 커널들과 여러 하드웨어 아키텍처에서 돌아간다. 그러나 가장 흔한 사용은 x86 하드웨어 상의 리눅스 커널에서의 사용이다. 공식적으로 지원되는 하드웨어는[12] : ARM 아키텍처, 알파 프로세서, PA-RISC, IA-64, Motorola m68k, MicroBlaze, MIPS 아키텍처, Nios II, 파워PC, s390, SPARC, 타일64, 그리고 x86이다. 이것은 Hurd와 리눅스 커널을 지원한다.

작은 장치에서의 사용[편집]

glibc는 과거 리누스 토발즈[13]와 임베디드 리눅스 프로그래머들에 의해 크고 느리다는 비판을 받아왔다. 이 이유로 여러 대체 C 표준 라이브러리들이 만들어졌다. 대체 libcs로 Bionic (안드로이드[14]에서 사용되는), dietlibc, uClibc, Newlib, Klibc, 그리고 musl이 있다.

대안[편집]

이것의 대안으로, 다른 C 표준 라이브러리는 다음과 같다: Bionic libc, dietlibc, EGLIBC, klibc, musl, Newlib, 그리고 uClibc.

호환성 계층[편집]

안드로이드윈도우 같이 다른 시스템을 위해 쓰여진 프로그램들을 시스템이 제공하는 glibc 인터페이스에서 돌아가게 하는 호환성 계층이 존재한다. 와인도 Win32 API/ABI에서 glibc로의 호환성 계층으로 여겨진다.

같이 보기[편집]

각주[편집]

  1. “GNU's Bulletin, vol. 1 no. 4, February, 1988”. Most libraries are done. Roland McGrath […] has a nearly complete set of ANSI C library functions. We hope they will be ready some time this spring. 
  2. “GNU's Bulletin, vol. 1 no. 12”. It now contains all of the ANSI C-1989 and POSIX.1-1990 functions, and work is in progress on POSIX.2 and Unix functions (BSD and System V) 
  3. glibc changelog on GitHub.
  4. Corbet, Jonathan (2012년 3월 28일). “A turning point for GNU libc”. LWN.net. Of the nearly 19,000 commits found in the project's git repository (which contains changes back to 1995), over 12,000 were made by Ulrich. 
  5. Lee, Elliot (2001). “A Technical Comparison of glibc 2.x With Legacy System Libraries”. 2004년 4월 11일에 원본 문서에서 보존된 문서. 
  6. “Forking: it could even happen to you”. the split between GNU LIBC and the Linux LIBC -- it went on for years while Linux stabilized, and then the forks re-merged into one project 
  7. “Fear of Forking essay, see "6. glibc --> Linux libc --> glibc". 
  8. “Fear of Forking, footnote on Stallman's merge comments”. 
  9. “glibc homepage”. In 2001 The GNU C Library Steering Committee …, was formed and currently consists of Mark Brown, Paul Eggert, Andreas Jaeger, Jakub Jelinek, Roland McGrath and Andreas Schwab. 
  10. “Ulrich Drepper”. LinkedIn. 2012년 6월 13일에 확인함. 
  11. glibc repo on Sourceware.com
  12. “The GNU C Library machine maintainers.”. 
  13. Torvalds, Linus (2002년 1월 9일). “Posting to the glibc mailing list”. 
  14. “Bionic libc README”. 

바깥 고리[편집]