Glibc

섬네일|300x300픽셀|GNU C 라이브러리는 리눅스 커널의 시스템 호출을 래핑한다.
섬네일|리눅스 커널과 GNU C 라이브러리는 함께 리눅스 API를 형성한다. 컴파일 이후 바이너리는 ABI를 제공한다.
GNU C 라이브러리(GNU C Library)는 일반적으로 glibc로 알려진, GNU 프로젝트가 C 표준 라이브러리를 구현한 것이다. 이름과는 달리 현재는 C++도 지원한다. 이것은 1990년대 초반 자유 소프트웨어 재단(FSF)이 자신의 GNU 운영 체제를 위해 시작되었다.

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

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

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

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

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

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

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

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

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

 git으로 전환 
이전의 CVS 저장소 대신, 2009년 glibc는 Sourceware의 깃 저장소로 옮겼다.glibc repo on Sourceware.com

 버전 역사 
대부분의 시스템에서, glibc의 버전은 lib 파일을 실행함으로써 획득할 수 있다(예를 들면, /lib/libc.so.6).
 버전  날짜  설명  채택 0.1 – 0.6  1991/10 – 1992/2   1.0  1992/2   1.01 – 1.09.3  1992/3 – 1994/12   1.90 – 1.102  1996/5 – 1997/1   2.0  1997/1   2.0.1  1997/1   2.0.2  1997/2   2.0.91  1997/12   2.0.95  1998/7   2.1  1999/2   2.1.1  1999/3   2.2  2000/11   2.2.1  2001/1   2.2.2  2001/2   2.2.3  2001/3   2.2.4  2001/7   2.3  2002/10   2.3.1  2002/10   2.3.2  2003/2   데비안 3.1 (Sarge) 2.3.3  2003/12   2.3.4  2004/12  리눅스 기본 규격 (LSB) 3.0 표준  RHEL 4 (업데이트 5) 2.3.5  2005/4   SLES 9 2.3.6  2005/11   데비안 4.0 (Etch) 2.4  2006/3  LSB 4.0 표준, 초기 inotify 지원  SLES 10 2.5  2006/9  전체 inotify 지원  RHEL 5 2.6  2007/5   2.7  2007/10   데비안 5 (Lenny), 우분투 8.04 2.8  2008/4   2.9  2008/11   2.10  2009/5   2.11  2009/10   SLES 11, 우분투 10.04, 데비안 6 (Squeeze)에서 사용되는 eglibc 2.12  2010/5    RHEL 6 2.13  2011/1   데비안 7 (Wheezy)에서 사용되는 eglibc 2.13 2.14  2011/6   2.15  2012/3   우분투 12.04와 12.10 2.16  2012/6  x32 ABI 지원, C11 컴플라이언스, SystemTap  2.17  2012/12  ARMv-A 지원  우분투 13.04, RHEL 7 2.18  2013/8  향상된 C++11 지원.  페도라 20 2.19  2014/2   우분투 14.04, 데비안 8 (Jessie)에서 사용되는 eglibc 2.19, 오픈수세 13, SLES 12 2.20  2014/9  파일 서술 잠금 지원  페도라 21 2.21  2015/2  새로운 세마포어 구현  우분투 15.04, 페도라 22 2.22  2015/8  구글 네이티브 클라이언트 (NaCl) 지원, 유니코드 7.0  페도라 23 2.23  2016/2  유니코드 8.0 

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

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

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

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

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

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

 같이 보기 

 Gnulib
 리눅스 커널 API

 각주 

 외부 링크 
 GNU libc 홈페이지
 GNU libc 개발자 페이지

분류:C 표준 라이브러리
분류:GNU 프로젝트 소프트웨어
분류:리눅스 커널 인터페이스
분류:C로 작성된 자유 소프트웨어
분류:크로스 플랫폼 자유 소프트웨어
분류:자유 라이브러리
분류:리눅스 API