Glibc

소문자 https://www.gnu.org/software/libc/ 리눅스 API는 리눅스 커널의 시스템 콜 인터페이스, GNU C 라이브러리([[GNU), libdrm, libalsa 그리고 libevdev (freedesktop.org)에 의해 구성된다.]] **GNU C 라이브러리**는 리눅스 커널의 시스템 호출을 래핑한다. 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가 요구하는 기능을 거의 완벽하게 갖는다고 주장하였다.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. 1992년 이것은 구현된 ANSI C-1989와 POSIX.1-1990을 가졌으며 POSIX.2의 방식으로 동작하였다.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) 1995년 9월 Ulrich Drepper는 glibc 프로젝트에 대한 그의 첫 기여를 하였고 1990년대 들어 점차적으로 glibc의 핵심 기여자와 유지인이 되었다.glibc changelogurl=https://github.com/lattera/glibc/blob/master/ChangeLog.5 on GitHub. Drepper는 수 년동안 유지 관리를 하는 위치였으며 2012년 프로젝트의 전체 커밋 중 63%를 차지하였다.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.*
## "리눅스 libc"의 분기
1990년대 초반 리눅스 커널의 개발자들은 glibc로 분기하였다. "리눅스 libc"로 불리는 이 분기는 릴리즈 버전 2부터 5까지 독립적으로 유지되었다. FSF가 glibc 2.0을 릴리즈하였을 때 이것은 더 많은 완전한 POSIX 표준과 더 나은 국제화와 지역화, 다중언어 함수, IPv6 역량, 64비트 데이터 접근, 멀티스레드 애플리케이션을 위한 기능을 가졌으며 코드는 더 이식가능해졌다.url-status = dead 이 시점에서 리눅스 커널 개발자들은 자신들의 분기를 중단하고 다시 FSF의 glibc로 돌아왔다.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 리눅스 libc의 최신 버전은 내부 이름(soname) `libc.so.5`를 가진다. 이 이후로 리눅스의 glibc 2.x는 soname `libc.so.6`를 사용한다.title=Fear of Forking essay, see "6. glibc --> Linux libc --> glibc" 리처드 스톨만에 따르면, 코드의 저자가 불분명하고 GNU 프로젝트가 저작권과 저자를 기록하는 것에 엄격하기 때문에 리눅스 libc에서 만들어진 변화는 다시 glibc로 병합될 수 없다고 한다.title=Fear of Forking, footnote on Stallman's merge comments
## 운영 위원회의 설치
2001년부터 라이브러리의 개발은 위원회에 의해 감독되며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., 특히 Ulrich Drepperaccessdate=2012-06-13가 주요 기여자와 유지인으로서 활동한다.
## git으로 전환
이전의 CVS 저장소 대신, 2009년 glibc는 *Sourceware*의 깃 저장소로 옮겼다.glibc repo on Sourceware.com
## 버전 역사
대부분의 시스템에서, 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) 인터페이스 등에서 요구하는 몇몇 기능들도 제공한다. 추가적으로 glibc는 또한 GNU 개발에 필요하다고 여겨지거나 유용한 확장들도 제공한다.
## 지원되는 하드웨어와 커널
Glibc는 수많은 여러 커널들과 여러 하드웨어 아키텍처에서 돌아간다. 그러나 가장 흔한 사용은 x86 하드웨어 상의 리눅스 커널에서의 사용이다. 공식적으로 지원되는 하드웨어는title=The GNU C Library machine maintainers. : ARM 아키텍처, 알파 프로세서, PA-RISC, IA-64, Motorola m68k, MicroBlaze, MIPS 아키텍처, Nios II, 파워PC, s390, SPARC, 타일64, 그리고 x86이다. 이것은 Hurd와 리눅스 커널을 지원한다.
## 작은 장치에서의 사용
glibc는 과거 리누스 토발즈date=9 January 2002와 임베디드 리눅스 프로그래머들에 의해 크고 느리다는 비판을 받아왔다. 이 이유로 여러 대체 C 표준 라이브러리들이 만들어졌다. 대체 libcs로 Bionic (안드로이드title=Bionic libc README에서 사용되는), dietlibc, uClibc, Newlib, Klibc, 그리고 musl이 있다.
# 대안
이것의 대안으로, 다른 C 표준 라이브러리는 다음과 같다: Bionic libc, dietlibc, EGLIBC, klibc, musl, Newlib, 그리고 uClibc.
# 호환성 계층
안드로이드와 윈도우 같이 다른 시스템을 위해 쓰여진 프로그램들을 시스템이 제공하는 glibc 인터페이스에서 돌아가게 하는 호환성 계층이 존재한다. 와인도 Win32 API/ABI에서 glibc로의 호환성 계층으로 여겨진다.