맨위로가기

Glibc

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Glibc는 GNU C 라이브러리의 약자로, 다양한 운영 체제에서 사용되는 핵심 C 표준 라이브러리이다. 1980년대 초 롤랜드 맥그라스에 의해 개발이 시작되었으며, ANSI C, POSIX 표준을 지원하며 꾸준히 기능을 확장해 왔다. 1990년대 초 리눅스 커널 개발자들에 의해 분기되기도 했으나, glibc 2.0 버전의 개선으로 다시 통합되었다. 2001년부터 운영 위원회 체제로 개발이 진행되다가, 2012년 커뮤니티 주도 개발로 전환되었다. Glibc는 다양한 하드웨어 아키텍처와 커널을 지원하며, Bionic, musl 등과 같은 대안 라이브러리도 존재한다. 2015년에는 보안 취약점이 발견되어 패치가 이루어지기도 했다.

더 읽어볼만한 페이지

  • 리눅스 커널 인터페이스 - 장치 파일
    유닉스 및 유닉스 계열 운영 체제에서 하드웨어 장치 접근을 위해 사용되는 특수 파일 시스템 객체인 장치 파일은 문자 장치와 블록 장치로 나뉘며 주 번호와 부 번호로 식별되고, 물리 장치 외에 가상 장치도 존재하며 다른 운영 체제에서도 유사한 개념으로 특정 포트와 장치에 접근하는 데 사용된다.
  • 리눅스 커널 인터페이스 - 리눅스 기본 규격
    리눅스 기본 규격(LSB)은 리눅스 배포판 간 호환성 증진을 목표로 하는 표준으로, 다양한 발전을 거쳤으나 비판과 제한적인 적용 사례가 있다.
  • 리눅스 API - 와인 (소프트웨어)
    와인(Wine)은 유닉스 계열 운영체제에서 윈도우 응용 프로그램을 실행하기 위한 호환성 계층으로, 윈도우 API를 직접 구현하여 윈도우 프로그램이 리눅스, macOS 등에서 실행되도록 지원하며, 여러 기업의 후원을 받아 꾸준히 발전해왔다.
  • 리눅스 API - OpenAL
    OpenAL은 3차원 오디오를 위한 크로스 플랫폼 API로, 소스 객체, 오디오 버퍼, 리스너를 사용하여 3차원 공간에서 소리를 구현하며 다양한 운영 체제와 하드웨어를 지원한다.
  • C 표준 라이브러리 - 파일 끝
    파일 끝(EOF)은 데이터 소스에서 더 이상 읽을 데이터가 없음을 나타내는 조건이다.
  • C 표준 라이브러리 - C 자료형
    C 자료형은 C 언어에서 데이터 형태를 정의하는 기본 요소로, 다양한 크기와 속성을 가진 산술, 부울 자료형과 구조체, 공용체 등을 제공하며, 컴파일러 및 시스템 아키텍처에 따라 크기와 동작 방식이 달라질 수 있다.
Glibc - [IT 관련 정보]에 관한 문서
기본 정보
이름GNU C 라이브러리
개발자GNU 프로젝트
최초 출시1987년
최신 안정 버전2.36
최신 안정 버전 출시일2022년 8월 2일
프로그래밍 언어C
운영 체제유닉스 계열
종류런타임 라이브러리
라이선스GNU 약소 일반 공중 사용 허가서
웹사이트GNU C 라이브러리 공식 웹사이트
개발
개발자Roland McGrath
기여자Ulrich Drepper (주요 기여자)
기타
관련 프로젝트Gnulib (구뉼립)

2. 역사

glibc 프로젝트는 1980년대에 자유 소프트웨어 재단(FSF)에서 일하던 롤랜드 맥그라스(Roland McGrath)를 중심으로 시작되었다.[9][10] 1988년 2월, FSF는 glibc가 ANSI C에서 요구하는 기능을 거의 완료했다고 발표했다.[11] 1992년까지 ANSI C-1989 및 POSIX.1-1990 함수가 구현되었고 POSIX.2 작업이 진행 중이었다.[12]

1990년대 초, 리눅스 커널 개발자들이 glibc 개발을 포크하여 "Linux libc"라는 이름으로 독자적인 개발을 진행했다. 이 포크는 수년간 지속되었으며, 버전 2부터 5까지 릴리스되었다.

1996년, FSF는 glibc 2.0을 릴리스했다. 이는 완전한 POSIX 표준 지원, 뛰어난 국제화/다국어 지원, IPv6 지원, 64비트 데이터 액세스, 멀티 스레드 지원, 향후 버전과의 호환성 지원 등의 개선이 이루어졌으며, 동시에 코드는 이식성이 뛰어났다.[50] 이 시점에서 리눅스 커널 개발자들은 포크를 중단하고 다시 FSF의 glibc를 사용하게 되었다.[51]

2009년 glibc는 Git 저장소로 마이그레이션되었다.[13]

2010년, glibc의 Sun RPC 구현이 GPL 호환되지 않아 라이선스 문제가 발생했다. 이는 BSD 라이선스로 Sun RPC 구성 요소를 재라이선스하여 해결되었다.[14][15]

2014년, glibc는 s390에서 ABI 손상 버그를 겪었다.[16]

2017년, glibc를 시작한 지 30년 후, 롤랜드 맥그라스는 명예 유지 관리자로 물러나고 프로젝트에 직접 참여하지 않겠다고 발표했다.[9]

2018년, 유지 관리자 레이먼드 니콜슨이 glibc 소스 코드에서 낙태에 대한 농담을 제거했으나, 리처드 스톨먼의 요구로 알렉상드르 올리바가 복원했다.[17]

2021년에는 자유 소프트웨어 재단에 대한 저작권 할당 요구 사항이 프로젝트에서 제거되었다.[18]

GNU C 라이브러리는 리눅스 커널의 시스템 콜을 감싼 것이다.


리눅스 커널과 GNU C 라이브러리는 함께 리눅스 API를 형성한다. 컴파일 후 바이너리는 ABI를 제공한다.

2. 1. 초기 개발 및 FSF 주도

glibc 프로젝트는 1980년대 초 자유 소프트웨어 재단(FSF)에서 일하던 롤랜드 맥그라스(Roland McGrath)가 주로 작성하였다.[9][10] 1988년 2월, FSF는 glibc가 ANSI C가 요구하는 기능을 거의 완벽하게 갖추었다고 발표했다.[60][11] 1992년에는 ANSI C-1989와 POSIX.1-1990 표준을 구현했으며, POSIX.2 표준을 위한 작업이 진행 중이었다.[61][12]

1995년 9월, 울리히 드레퍼(Ulrich Drepper)가 glibc 프로젝트에 처음 기여했으며,[62] 이후 glibc의 핵심 기여자 및 유지 관리자가 되었다.[62] 드레퍼는 수 년 동안 유지 관리자 역할을 맡았으며, 2012년에는 프로젝트 전체 커밋의 63%를 차지했다.[63]

2007년 Ulrich Drepper, glibc의 주요 저자

2. 2. "리눅스 libc" 분기 및 재통합

1990년대 초반, 리눅스 커널 개발자들은 glibc를 분기하여 "리눅스 libc"라는 독자적인 C 라이브러리를 개발했다. 이 분기는 버전 2부터 5까지 독립적으로 유지되었다.[64]

1996년, FSF는 glibc 2.0을 출시했는데, 이는 더 완전한 POSIX 표준, 향상된 국제화와 지역화 및 다중 언어 함수, IPv6 지원, 64비트 데이터 접근, 멀티스레드 애플리케이션 지원, 그리고 더 이식 가능한 코드를 제공했다.[50] 이 시점에서 리눅스 커널 개발자들은 "리눅스 libc" 개발을 중단하고 다시 FSF의 glibc를 사용하기 시작했다.[51]

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

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

2. 3. 운영 위원회 설치 및 커뮤니티 주도 개발

2001년부터 glibc의 개발은 운영 위원회가 감독했으며,[28] 울리히 드레퍼[29]가 주요 기여자이자 유지 관리자로 활동했다. 운영 위원회 설치는 울리히 드레퍼가 리처드 스톨먼의 실패한 적대적 인수 책략으로 공개적으로 묘사하면서 논란이 되기도 했다.[30][31][32][33]

2012년 3월, 운영 위원회는 해산을 결정하고 드레퍼를 제거하여 커뮤니티 주도 개발 프로세스로 전환했다. 라이언 아놀드, 막심 쿠비르코프, 조셉 마이어스, 카를로스 오도넬, 알렉상드르 올리바가 GNU 유지 관리 책임을 맡게 되었다.[34][35][36]

2009년, glibc는 이전의 CVS 저장소 대신 저장소로 이전했다.[70]

2021년, 자유 소프트웨어 재단에 대한 저작권 할당 요구 사항이 프로젝트에서 제거되었다.[18]

2. 4. 버전 역사 (주요 버전)

버전날짜주요 내용
1.01992년 2월
2.01997년 1월POSIX 표준을 더 완벽하게 준수, 국제화/지역화 및 다국어 기능 향상, IPv6 지원, 64비트 데이터 접근, 멀티스레딩 지원, 코드 이식성 향상.[64]
2.42006년 3월LSB 4.0 표준 준수, 초기 inotify 지원
2.52006년 9월전체 inotify 지원
2.162012년 6월x32 ABI 지원, ISO C11 준수, SystemTap 지원
2.172012년 12월64비트 ARM 지원
2.182013년 8월향상된 C++11 지원, 인텔 TSX 락 엘리전(lock elision) 지원
2.222015년 8월Google Native Client (NaCl) 지원, 유니코드 7.0 지원
2.232016년 2월유니코드 8.0 지원
2.272018년 2월성능 최적화, RISC-V 지원
2.302019년 8월유니코드 12.1.0, 동적 링커의 `--preload` 인수 지원, Linux에 `gettid` 함수 추가, 민국력(중화민국) 달력 지원.[7]
2.342021년 8월libpthread, libdl, libutil, libanl을 libc에 통합
2.352022년 2월유니코드 14.0, C.UTF-8 로케일, 재시작 가능 시퀀스, 인텔 MPX 지원 제거
2.382023년 8월strlcpy 및 strlcat 함수 추가, ARM64용 libmvec 지원
2.392024년 1월ISO C2X의 stdbit.h 헤더 추가, x86_64에서 섀도우 스택 지원, 새로운 보안 기능, libcrypt 제거


3. 기능

glibc는 단일 유닉스 규격, POSIX (1c, 1d, 1j), 국제 표준화 기구 C11, 국제 표준화 기구 C99, BSD 인터페이스, SVID, XPG Issue 4.2 등 다양한 표준에서 요구하는 기능을 제공한다. 또한, GNU 개발에 유용하거나 필요하다고 여겨지는 확장 기능도 제공한다.[71]

3. 1. 지원되는 하드웨어 및 커널

glibc는 수많은 커널과 하드웨어 아키텍처에서 동작한다. 그러나 가장 흔하게 사용되는 것은 x86 하드웨어 상의 리눅스 커널에서이다. 공식적으로 지원되는 하드웨어는 다음과 같다.[71]

지원 하드웨어
ARM 아키텍처, 알파 프로세서, PA-RISC, IA-64, Motorola m68k, MicroBlaze, MIPS 아키텍처, Nios II, 파워PC, s390, SPARC, 타일64, x86



공식적으로 지원되는 커널은 Hurd리눅스 커널이다.

FreeBSDNetBSD 커널에서 실행되는 수정된 버전도 있으며 (각각 데비안 GNU/kFreeBSD 및 데비안 GNU/NetBSD 시스템이 구축됨), OpenSolaris의 포크 버전도 있다.[38] 편집된 형태로 BeOS 및 Haiku에서도 사용되며, libroot.so로 명명된다.[39]

4. 대안

glibc는 과거 리누스 토발즈[72]와 임베디드 리눅스 프로그래머들에게 크고 느리다는 비판을 받았다. 이러한 이유로 더 작은 공간을 강조하는 여러 대안 C 표준 라이브러리들이 만들어졌다.[40] 그러나 많은 소형 장치 프로젝트에서는 애플리케이션 지원, 표준 준수 및 완전성 때문에 더 작은 대안보다 glibc를 사용하는데, 예를 들어 Openmoko[41]GPE 디스플레이 소프트웨어를 사용하는 iPaq 휴대폰용 Familiar Linux가 있다.[42]

대표적인 대안 C 표준 라이브러리는 다음과 같다.


  • Bionic libc (안드로이드[73]에서 사용)
  • dietlibc
  • EGLIBC
  • klibc
  • musl
  • Newlib
  • uClibc

5. 호환성 계층

다른 시스템을 위해 작성된 프로그램들을 glibc 인터페이스에서 실행할 수 있도록 하는 호환성 계층("심")이 존재한다. 예를 들어 Wine은 윈도우 API를 glibc 및 유닉스 계열 시스템에서 사용 가능한 API로 변환하는 호환성 계층이며, libhybris는 안드로이드의 Bionic을 위한 호환성 계층이다.[1]

6. 취약점

2015년 1월 27일, 보안 관련 기업 퀄리스의 연구자가 glibc에서 심각한 보안 구멍을 발견했다.[54] 이 취약점은 GNU C 라이브러리 버전 2.2부터 2.17까지 영향을 미쳤다.

이 취약점은 2013년 5월 21일에 출시된 버전 2.18에서 수정되었지만, 많은 배포판에서는 이 수정 사항이 적용되지 않은 채 사용되었다. (현재는 많은 배포판에서 수정된 패키지를 사용할 수 있게 되어 업데이트가 용이하다.)

이 취약점으로 인해 이름 확인에 사용되는 함수에 조작된 호스트 이름을 전달하여 버퍼 오버플로우를 발생시키고, 임의의 코드를 실행하거나 서비스 거부 공격을 할 수 있는 가능성이 발생한다.

이 취약점은 GNU C 라이브러리의 gethostbyname 함수, gethostbyname2 함수를 사용하는 소프트웨어에서 문제가 발생한다. 2015년 1월 28일 현재, 메일 전송 에이전트 Exim이 원격에서 공격을 받을 가능성이 있는 것으로 확인되었다.[55]

참조

[1] 웹사이트 A turning point for GNU libc https://lwn.net/Arti[...] LWN.net 2012-03-28
[2] 웹사이트 sourceware.org Git – glibc.git/blob – Makefile https://sourceware.o[...] 2021-06-10
[3] 웹사이트 sourceware.org Git – glibc.git/commit – Update to LGPL v.2.1 https://sourceware.o[...] 2001-07-06
[4] 웹사이트 glibc-1.04.tar.Z https://www.nic.fune[...] 1992-09-04
[5] 웹사이트 sourceware.org Git – glibc.git/commit – Initial import: Makefile https://sourceware.o[...] 1995-02-18
[6] 웹사이트 sourceware.org Git – glibc.git/blob – NEWS https://sourceware.o[...]
[7] 웹사이트 sourceware.org Git – glibc.git/blob – NEWS https://sourceware.o[...]
[8] 웹사이트 The GNU C Library version 2.32 is now available https://sourceware.o[...] 2020-08-13
[9] 웹사이트 Roland McGrath bows out as glibc maintainer [LWN.net] https://lwn.net/Arti[...] 2017-07-07
[10] 뉴스 Roland McGrath steps down as glibc maintainer after 30 years https://www.theregis[...] Situation Publishing 2017-07-10
[11] 웹사이트 GNU's Bulletin, vol. 1 no. 4, February, 1988 https://www.gnu.org/[...]
[12] 웹사이트 GNU's Bulletin, vol. 1 no. 12 https://www.gnu.org/[...]
[13] 웹사이트 A turning point for GNU libc https://lwn.net/Arti[...] LWN.net 2012-03-28
[14] 웹사이트 Glibc finally free software – The H Open: News and Features http://www.h-online.[...] 2021-09-19
[15] 웹사이트 Gnu/Linux: Finally, it's really free software https://www.infoworl[...] 2010-09-02
[16] 웹사이트 The glibc s390 ABI break [LWN.net] https://lwn.net/Arti[...] 2022-03-17
[17] 웹사이트 Glibc 'abortion joke' diff tiff leaves Richard Stallman miffed https://www.theregis[...] 2023-01-17
[18] 웹사이트 Open-source projects glibc and gnulib look to sever copyright ties with Free Software Foundation https://www.theregis[...] 2023-01-17
[19] 웹사이트 History of glibc and Linux libc http://freesoftwarem[...] 2021-05-10
[20] 웹사이트 Forking: it could even happen to you https://www.linux.co[...] 2000-10-24
[21] 웹사이트 A Technical Comparison of glibc 2.x With Legacy System Libraries https://people.redha[...] 1998-07-09
[22] 웹사이트 Fear of Forking essay http://linuxmafia.co[...] 2021-05-20
[23] 웹사이트 EGLIBC: FAQ http://www.eglibc.or[...] 2021-09-16
[24] 서적 Linux : embedded development: leverage the power of Linux to develop captivating and powerful embedded Linux projects : a course in three modules https://books.google[...] Packt Publishing 2016
[25] 웹사이트 Debian wechselt zur Eglibc https://www.golem.de[...] 2009-05-06
[26] 서적 Mastering embedded Linux programming: unleash the full potential of embedded Linux https://www.worldcat[...] 2017
[27] 서적 Learning embedded Linux using the Yocto project: develop powerful embedded Linux systems with the Yocto project components https://www.worldcat[...] 2015
[28] 웹사이트 glibc homepage https://www.gnu.org/[...] 2014-04-16
[29] 웹사이트 Ulrich Drepper https://www.linkedin[...] LinkedIn 2012-06-13
[30] 웹사이트 Open-Source-Entwickler kritisiert Stallman https://www.heise.de[...] 2001-08-19
[31] 웹사이트 RMS is at it again https://sourceware.o[...] sourceware.org 2000-06-26
[32] 웹사이트 glibc 2.2.4 https://sourceware.o[...] sourceware.com 2001-08-15
[33] Webarchive rms-accused-of-attempting-glibc-hostile-takeover https://slashdot.org[...] 2001-08-19
[34] 웹사이트 The GNU C Library Steering Committee disbands – The H Open: News and Features http://www.h-online.[...] 2023-03-16
[35] 웹사이트 glibc steering committee dissolving https://sourceware.o[...] Sourceware.org 2012-03-26
[36] 웹사이트 GNU C Library development and maintainers https://sourceware.o[...] Sourceware.org 2012-03-26
[37] 웹사이트 The GNU C Library machine maintainers. https://sourceware.o[...] 2015-10-08
[38] 웹사이트 GNU/kOpenSolaris (GNU libc/base + OpenSolaris kernel) https://csclub.uwate[...] 2008-12-16
[39] 웹사이트 Haiku Source https://github.com/h[...] 2014-10-15
[40] 웹사이트 Posting to the glibc mailing list http://ecos.sourcewa[...] 2007-07-22
[41] 웹사이트 OpenMoko components http://wiki.openmoko[...] 2008-05-13
[42] 웹사이트 Re: [Familiar] Which glibc for Familiar 0.8.4  ? https://marc.info/?l[...] 2018-11-26
[43] 웹사이트 The ups and downs of strlcpy() https://lwn.net/Arti[...] 2023-12-09
[44] 웹사이트 Adding strlcpy() to glibc https://lwn.net/Arti[...] 2023-12-09
[45] 웹사이트 FAQ https://sourceware.o[...] 2023-12-09
[46] 웹사이트 glibc steering committee dissolving http://sourceware.or[...] Sourceware.org 2012-03-26
[47] 웹사이트 GNU C Library development and maintainers http://sourceware.or[...] Sourceware.org 2012-03-26
[48] 웹사이트 http://www.gnu.org/bulletins/bull4.html http://www.gnu.org/b[...] 2008-08-28
[49] 웹사이트 GNU's Bulletin, vol. 1 no. 12 http://www.gnu.org/b[...] 2008-08-28
[50] 웹사이트 A Technical Comparison of glibc 2.x With Legacy System Libraries https://web.archive.[...] 2008-08-28
[51] 웹사이트 Forking: it could even happen to you http://www.newsforge[...] 2008-08-28
[52] 웹사이트 Fear of Forking essay, see "6. glibc --> Linux libc --> glibc" http://linuxmafia.co[...] 2008-08-28
[53] 웹사이트 Fear of Forking, footnote on Stallman's merge comments http://linuxmafia.co[...] 2008-08-28
[54] 뉴스 Qualys Security Advisory CVE-2015-0235 https://www.qualys.c[...]
[55] 뉴스 Linuxに存在する脆弱性「GHOST」、システム管理者は落ち着いて対処を http://blog.trendmic[...]
[56] 간행물 Posting to the glibc mailing list http://ecos.sourcewa[...] Linus Torvalds 2002-01-09
[57] 문서 GNU/Linux Options - Using the GNU Compiler Collection (GCC) http://gcc.gnu.org/o[...]
[58] 웹사이트 Re: [Familiar] Which glibc for Familiar 0.8.4 ? http://marc.info/?l=[...] 2008-08-28
[59] 웹인용 A turning point for GNU libc https://lwn.net/Arti[...] LWN.net 2012-03-28
[60] 웹인용 GNU's Bulletin, vol. 1 no. 4, February, 1988 https://www.gnu.org/[...]
[61] 웹인용 GNU's Bulletin, vol. 1 no. 12 https://www.gnu.org/[...]
[62] Github glibc changelog https://github.com/l[...]
[63] 웹인용 A turning point for GNU libc https://lwn.net/Arti[...] LWN.net 2012-03-28
[64] 웹인용 A Technical Comparison of glibc 2.x With Legacy System Libraries http://people.redhat[...] 2008-08-28
[65] 웹인용 Forking: it could even happen to you http://www.linux.com[...]
[66] 웹인용 Fear of Forking essay, see "6. glibc --> Linux libc --> glibc" http://linuxmafia.co[...]
[67] 웹인용 Fear of Forking, footnote on Stallman's merge comments http://linuxmafia.co[...]
[68] 웹인용 glibc homepage https://www.gnu.org/[...]
[69] 웹인용 Ulrich Drepper http://www.linkedin.[...] LinkedIn 2012-06-13
[70] 문서 glibc repo https://sourceware.o[...]
[71] 웹인용 The GNU C Library machine maintainers. https://sourceware.o[...]
[72] 웹인용 Posting to the glibc mailing list http://ecos.sourcewa[...] 2002-01-09
[73] 웹인용 Bionic libc README https://github.com/a[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com