{{위키데이터 속성 추적}}
{{소문자}}
{{소프트웨어 정보
| 이름                 = GNU C 라이브러리
| logo                 = Heckert GNU white.svg|125px
| 저자               = Roland McGrath
| 개발자            = [[GNU 프로젝트]]
| 상태               = 활성화
| 프로그래밍 언어 = [[C (프로그래밍 언어)|C]]
| released             = {{시작 날짜와 나이|1987}}<ref>{{웹 인용
 | url       = https://lwn.net/Articles/488847/
 | title     = A turning point for GNU libc
 | last      = Corbet
 | first     = Jonathan
 | date      = 28 March 2012
 | publisher = LWN.net}}</ref>
| latest release version = {{wikidata|property|preferred|references|edit|Q856089|P348|P548=Q2804309}}
| latest release date    = {{wikidata|qualifier|preferred|single|Q856089|P348|P548=Q2804309|P577}}
| latest preview version = {{wikidata|property|preferred|references|edit|Q856089|P348|P548=Q51930650}}
| latest preview date    = {{wikidata|qualifier|preferred|single|Q856089|P348|P548=Q51930650|P577}}
| 운영체제     = [[유닉스 계열]]
| 장르                = [[런타임 라이브러리]]
| 라이센스              = [[GNU 약소 일반 공중 사용 허가서]]
| 웹사이트              = {{url|https://www.gnu.org/software/libc/}}
}}

[[파일:Linux_API.svg|섬네일|[[리눅스 API]]는 리눅스 커널의 시스템 콜 인터페이스, GNU C 라이브러리([[GNU]]), libdrm, [[고급 리눅스 사운드 아키텍처|libalsa]] 그리고 libevdev ([[freedesktop.org]])에 의해 구성된다.]]
[[파일:Linux_kernel_System_Call_Interface_and_glibc.svg|섬네일|300x300픽셀|'''GNU C 라이브러리'''는 리눅스 커널의 시스템 호출을 래핑한다.]]
[[파일:Linux_API_and_Linux_ABI.svg|섬네일|[[리눅스 커널]]과 '''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가 요구하는 기능을 거의 완벽하게 갖는다고 주장하였다.<ref>{{웹 인용
 |url=https://www.gnu.org/bulletins/bull4.html
 |title=GNU's Bulletin, vol. 1 no. 4, February, 1988
 |quote=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.
}}</ref> 1992년 이것은 구현된 ANSI C-1989와 POSIX.1-1990을 가졌으며 POSIX.2의 방식으로 동작하였다.<ref>{{웹 인용
 |url=https://www.gnu.org/bulletins/bull12.html
 |title=GNU's Bulletin, vol. 1 no. 12
 |quote=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)
}}</ref>

1995년 9월 Ulrich Drepper는 glibc 프로젝트에 대한 그의 첫 기여를 하였고 1990년대 들어 점차적으로 glibc의 핵심 기여자와 유지인이 되었다.<ref>[https://github.com/lattera/glibc/blob/master/ChangeLog.5 glibc changelog]{{깨진 링크|url=https://github.com/lattera/glibc/blob/master/ChangeLog.5 }} on [[깃허브|GitHub]].</ref> Drepper는 수 년동안 유지 관리를 하는 위치였으며 2012년 프로젝트의 전체 커밋 중 63%를 차지하였다.<ref>{{웹 인용
 |url=https://lwn.net/Articles/488847/
 |title=A turning point for GNU libc
 |last=Corbet
 |first=Jonathan
 |date=28 March 2012
 |publisher=LWN.net
 |quote=''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.''
}}</ref>

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

FSF가 glibc 2.0을 릴리즈하였을 때 이것은 더 많은 완전한 POSIX 표준과 더 나은 [[국제화와 지역화]], 다중언어 함수, [[IPv6]] 역량, 64비트 데이터 접근, 멀티스레드 애플리케이션을 위한 기능을 가졌으며 코드는 더 이식가능해졌다.<ref>{{웹 인용
 |url          = http://people.redhat.com/~sopwith/old/glibc-vs-libc5.html
 |title        = A Technical Comparison of glibc 2.x With Legacy System Libraries
 |last         = Lee
 |first        = Elliot
 |year         = 2001
 |archiveurl   = https://web.archive.org/web/20040411191201/http://people.redhat.com/~sopwith/old/glibc-vs-libc5.html
 |archivedate  = 2004년 4월 11일
 |확인날짜 = 2008년 8월 28일
 |url-status = dead
}}</ref> 이 시점에서 리눅스 커널 개발자들은 자신들의 분기를 중단하고 다시 FSF의 glibc로 돌아왔다.<ref>{{웹 인용
 |url=http://www.linux.com/archive/feature/3874
 |title=Forking: it could even happen to you
 |quote=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
}}</ref>

리눅스 libc의 최신 버전은 내부 이름([[soname]]) <code>libc.so.5</code>를 가진다. 이 이후로 리눅스의 glibc 2.x는 soname <code>libc.so.6</code>를 사용한다.<ref>{{웹 인용
 |url=http://linuxmafia.com/faq/Licensing_and_Law/forking.html
 |title=Fear of Forking essay, see "6. glibc --> Linux libc --> glibc"
}}</ref>

[[리처드 스톨만]]에 따르면, 코드의 저자가 불분명하고 GNU 프로젝트가 저작권과 저자를 기록하는 것에 엄격하기 때문에 리눅스 libc에서 만들어진 변화는 다시 glibc로 병합될 수 없다고 한다.<ref>{{웹 인용
 |url=http://linuxmafia.com/faq/Licensing_and_Law/forking.html#foot25
 |title=Fear of Forking, footnote on Stallman's merge comments
}}</ref>

=== 운영 위원회의 설치 ===
2001년부터 라이브러리의 개발은 위원회에 의해 감독되며<ref>{{웹 인용
 |url=https://www.gnu.org/software/libc/
 |title=glibc homepage
 |quote=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.
}}</ref>, 특히  Ulrich Drepper<ref>{{웹 인용
 |url=http://www.linkedin.com/in/ulrichdrepper
 |title=Ulrich Drepper
 |publisher=LinkedIn
 |date=
 |accessdate=2012-06-13
}}</ref>가 주요 기여자와 유지인으로서 활동한다.<span class="cx-segment" data-segmentid="157"></span>

=== git으로 전환 ===
이전의 [[CVS]] 저장소 대신, 2009년 glibc는 ''Sourceware''의 [[깃 (소프트웨어)|깃]] 저장소로 옮겼다.<ref>[https://sourceware.org/glibc/wiki/GlibcGit glibc repo] on Sourceware.com</ref>



=== 버전 역사 ===
대부분의 시스템에서, glibc의 버전은 lib 파일을 실행함으로써 획득할 수 있다(예를 들면, /lib/libc.so.6).
{| class="wikitable sortable collapsible collapsed"
|-
! 버전 !! 날짜 !! 설명 !! 채택
|-
| 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|버클리 유닉스]] (BSD) 인터페이스 등에서 요구하는 몇몇 기능들도 제공한다.

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

=== 지원되는 하드웨어와 커널 ===
Glibc는 수많은 여러 커널들과 여러 하드웨어 아키텍처에서 돌아간다. 그러나 가장 흔한 사용은 x86 하드웨어 상의 리눅스 커널에서의 사용이다. 공식적으로 지원되는 하드웨어는<ref>{{웹 인용
 |url=https://sourceware.org/glibc/wiki/MAINTAINERS#Machine_maintainers
 |title=The GNU C Library machine maintainers.
}}</ref> : [[ARM 아키텍처]], [[알파 프로세서]], [[PA-RISC]], IA-64, Motorola m68k, MicroBlaze, [[MIPS 아키텍처]], Nios II, [[파워PC]], [[IBM 시스템 z|s390]], [[SPARC]], [[타일64]], 그리고 [[x86]]이다. 이것은 [[GNU 허드|Hurd]]와 [[리눅스 커널]]을 지원한다.

=== 작은 장치에서의 사용 ===
glibc는 과거 [[리누스 토발즈]]<ref>{{웹 인용
 |last=Torvalds
 |first=Linus
 |url=http://ecos.sourceware.org/ml/libc-alpha/2002-01/msg00079.html
 |title=Posting to the glibc mailing list
 |date=9 January 2002<!-- 19:02:37-->
}}</ref>와 임베디드 리눅스 프로그래머들에 의해 크고 느리다는 비판을 받아왔다. 이 이유로 여러 대체 C 표준 라이브러리들이 만들어졌다. 대체 libcs로 Bionic ([[안드로이드 (운영 체제)|안드로이드]]<ref>{{웹 인용
 |url=https://github.com/android/platform_bionic/tree/master/libc
 |title=Bionic libc README
}}</ref>에서 사용되는), [[dietlibc]], [[uClibc]], Newlib, [[Klibc]], 그리고 musl이 있다.

== 대안 ==
이것의 대안으로, 다른 C 표준 라이브러리는 다음과 같다: Bionic libc, [[dietlibc]], [[임베디드 GNU C 라이브러리|EGLIBC]], [[klibc]], musl, Newlib, 그리고 [[uClibc]].

== 호환성 계층 ==
[[안드로이드 (운영 체제)|안드로이드]]와 [[마이크로소프트 윈도우|윈도우]] 같이 다른 시스템을 위해 쓰여진 프로그램들을 시스템이 제공하는 glibc 인터페이스에서 돌아가게 하는 [[호환성 계층]]이 존재한다. [[와인 (소프트웨어)|와인]]도 [[윈도우 API|Win32 API]]/ABI에서 glibc로의 호환성 계층으로 여겨진다.

== 같이 보기 ==
{{위키공용분류}}
* Gnulib
* [[리눅스 커널 API]]

== 각주 ==
{{각주|30em}}

== 외부 링크 ==
* [https://www.gnu.org/software/libc/ GNU libc 홈페이지]
* [https://web.archive.org/web/20151203204332/http://www.gnu.org/software/libc/development.html GNU libc 개발자 페이지]

{{GNU}}
{{C 프로그래밍 언어}}

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