Кіріспе

GNU C кітапханасы, көбінесе glibc деп аталады, GNU жобасының C стандартты кітапханасын іске асыру болып табылады. Бұл Linux ядросының жүйелік шақырулары арқылы қолданбалар пайдалануы үшін жасалған интерфейс. Атына қарамастан, ол енді C++ тілін тікелей (ал басқа бағдарламалау тілдерін жанама түрде) қолдайды. Ол 1980-ші жылдары GNU операциялық жүйесі үшін Free Software Foundation (FSF) ұйымымен бастамаға асырылды. glibc – GNU Lesser General Public License лицензиясы бойынша таратылатын ашық кодты бағдарламалық жасақтама.

| 2.30 | 2019 жылдың тамызы | Unicode 12.1.0, динамикалық байланыстырғыш ортақ нысандарды алдын ала жүктеу үшін preload аргументін қабылдайды, gettid функциясы Linux жүйесіне қосылды, Minguo (Қытай Республикасы) күнтізбесіне қолдау, ja JP локаліне жаңа жапондық дәуір қосылды, жадты бөлу функциялары жалпы нысан көлемі PTRDIFF_MAX-тан үлкен болғанда қате береді; түзетілді.
|---|---|---|
| 2.31 | 2020 жылдың ақпаны | C23 стандартына бастапқы қолдау
| 2.32 | 2020 жылдың тамызы | Unicode 13.0, GCC 10-да жақсырақ ескертулер үшін 'access' атрибуты, яғни "буфер ағып кетуін және басқа да шекарадан тыс қол жеткізуді анықтауға көмектесу"
| 2.33 | 2021 жылдың ақпаны | HWCAPS қолдауы қосылды.
| 2.34 | 2021 жылдың тамызы | libpthread, libdl, libutil, libanl кітапханалары libc-ге біріктірілді.
| 2.35 | 2022 жылдың ақпаны | Unicode 14.0, C. UTF-8 локалі, қайта басталатын тізбектер. Intel MPX қолдауы алынып тасталды.
| 2.36 | 2022 жылдың тамызы |
| 2.37 | 2023 жылдың ақпаны |
| 2.38 | 2023 жылдың тамызы | strlcpy және strlcat функциялары қосылды. ARM64 үшін libmvec қолдауы.
| 2.39 | 2024 жылдың қаңтары | ISO C2X-тен stdbit.h бас файлы қосылды. x86-64 архитектурасындағы көлеңкелі стектерге қолдау, жаңа қауіпсіздік мүмкіндіктері және libcrypt кітапханасы алынып тасталды.

glibc жобасы бастапқыда 1987 жылы жасөспірім шақта Free Software Foundation (FSF) үшін жұмыс істеген Роланд Макгратпен жазылған. 1988 жылдың ақпанында FSF glibc ANSI C стандартының талаптарын орындауға жақын деп сипаттады. 1992 жылға қарай ол ANSI C 1989 және POSIX.1 1990 функцияларын іске асырды, ал POSIX.2 стандарты бойынша жұмыстар жүргізілуде болды. 1995 жылдың қыркүйегінде Ульрих Дреппер glibc жобасына алғашқы үлесін қосты, ал 1997 жылға қарай көптеген өзгерістер оның есебінен жасалды. Дреппер көп жыл бойы жобаны қолдаушы болып қызмет етті және 2012 жылға дейін жобаға жасалған барлық өзгерістердің 63% оның үлесінде болды. 2009 жылдың мамырында glibc Git репозиторийіне көшірілді. 2014 жылы glibc s390 архитектурасында ABI бұзу қатесіне тап болды. 2017 жылдың шілдесінде glibc жобасын бастағаннан кейін 30 жыл өткен соң Роланд Макграт жобадан кететінін жариялады, "өзін зейнеткер деп жариялап, жобаға тікелей қатысудан бас тартты. Соңғы бірнеше ай, тіпті жылдар көрсеткендей, сіздерге мен қажет емеспін". 2021 жылы жобаға авторлық құқық беру талабы Free Software Foundation ұйымынан алынып тасталды.

Шеңбер және нұсқа

1994 жылы Linux ядросын жасаушылар glibc-ті тармақтады. Олардың «Linux libc» деп аталған тармағы 1998 жылға дейін жеке күйінде сақталды. Авторлық құқық туралы мәлімет жеткіліксіз болғандықтан, өзгерістерді GNU Libc-ге қайта қосу мүмкін болмады. 1997 жылдың қаңтар айында FSF glibc 2.0-ді шығарғаннан кейін, ядро жасаушылар glibc 2.0-нің POSIX стандарттарына жақсы сай келуіне байланысты Linux libc-ді қолдануды тоқтатты. glibc 2.0 сонымен қатар жақсартылған халықараздандыру және терең аударма, IPv6 мүмкіндігі, 64 биттік деректерге қол жеткізу, көп жіпті қолданбаларға арналған мүмкіндіктер, болашақ нұсқалармен үйлесімділік және кодтың көшірілгіштігі сияқты артықшылықтарға ие болды. Linux libc-тің соңғы қолданылған нұсқасы ішкі атауды (soname) пайдаланды. Осыдан кейін Linux-тағы glibc 2.x soname-ді қолданады. 2009 жылы Debian және оның көптеген туындылары glibc-ден eglibc нұсқасына көшті. Eglibc-ті Freescale, MIPS, MontaVista және Wind River компанияларынан құралған консорциум қолдады. Ол кіріктірілген жүйелерде пайдалануға ыңғайлырақ болды және glibc қолдамайтын, мысалы PowerPC e500 сияқты архитектураларды қолдау мүмкіндігін қосты. Eglibc коды 2.20 нұсқасында glibc-ге қайта біріктірілді. 2014 жылдан бастап eglibc қолдаудан тоқтатылды. Yocto жобасы және Debian Debian Jessie нұсқасы шыққаннан кейін glibc-ге қайта оралды.

Басқару комитеті

2001 жылдан бастап кітапхананың дамуын комитет қадағалап келді, Ульрих Дреппер жетекші үлескер және күтуші ретінде сақталды. Басқару комитетінің құрылуы көп дау тудырды, себебі Ульрих Дреппер бұл Ричард Столлманның сәтсіз, жаулап алу әрекеті деп ашық айтты. 2012 жылдың наурызында басқару комитеті тарап, Дрепперді қоғамдық бастамамен даму процесіне алмастыруға дауыс берді, ал Райан Арнольд, Максим Кувирков, Джозеф Майерс, Карлос О'Доннелл және Александр Олива GNU кітапханасын күтуге жауапты болды (бірақ қосымша шешім қабылдау құқығы болған жоқ).

Функционалдылығы

glibc Single UNIX Specification, POSIX (1c, 1d және 1j) талаптарын, сондай-ақ ISO C11, ISO C99, Berkeley Unix (BSD) интерфейстері, System V Interface Definition (SVID) және X/Open Portability Guide (XPG) нұсқасы 4.2 талаптарының бір бөлігін қамтамасыз етеді. Бұл XSI (X/Open System Interface) стандарттарына сәйкес келетін жүйелерге ортақ барлық кеңейтулермен қатар, барлық X/Open UNIX кеңейтулерін де қамтиды. Одан әрі, glibc GNU әзірлеу барысында пайдалы немесе қажет деп танылған кеңейтулерді де ұсынады.

Қолдауы бар аппараттық жабдықтар мен ядролар

glibc әр түрлі ядролармен және әр түрлі аппараттық архитектуралармен жұмыс істейтін жүйелерде қолданылады. Оның ең көп таралған қолданылуы – x86 аппараттық құралдарында Linux ядросын пайдаланатын жүйелер, бірақ ресми түрде қолдау көрсетілетін аппараттық құралдарға мыналар кіреді: ARM, ARC, C SKY, DEC Alpha, IA 64, Motorola m68k, MicroBlaze, MIPS, Nios II, PA RISC, PowerPC, RISC V, s390, SPARC және x86 (ескі нұсқалары TILE-ді қолдайды). Ол Hurd және Linux ядроларын ресми түрде қолдайды. Бұған қоса, FreeBSD және NetBSD ядроларында (олардан Debian GNU/kFreeBSD және Debian GNU/NetBSD жүйелері құрастырылған) және OpenSolaris-тің тармақталған нұсқасында кеңінен түзетілген нұсқалары бар. Сондай-ақ, ол BeOS және Haiku жүйелерінде (өзгертілген түрінде) қолданылады және аталды.

Кіші құрылғыларда қолдану

glibc бұрын "көп көлемді" және басқа кітапханаларға қарағанда баяу деп сынға ұшыраған, мысалы, Линус Торвальдс және кіріктірілген Linux бағдарламашылары. Осы себепті, кішірек көлемге баса назар аударатын бірнеше балама C стандартты кітапханалары жасалды. Дегенмен, көптеген шағын құрылғы жобалары қолданбаларын қолдауы, стандарттарға сәйкес келуі және толықтығы себепті кішірек баламаларға қарағанда GNU libc-ті пайдаланады. Мысалдарға Openmoko және iPaq қолға ұсталатын құрылғылары үшін Familiar Linux (GPE дисплей бағдарламалық жасақтамасын пайдаланғанда) жатады.

Қауіпсіз тізбек функциялары

glibc C11 стандартында анықталған шекаралық тексеру интерфейстерін іске асырмайды және 2023 жылға дейін strlcpy және strlcat функцияларын іске асырмады, себебі "практикада бұл функциялар мәселе тудыруы мүмкін, олардың дұрыс қолданылуы деректердің жасырын түрде қысқаруына, күрделілікке және тиімсіздікке әкеледі, сондай-ақ, ақырғы пункттердегі буфер асып кетудің барлық жағдайларын болдырмайды". Көп қойылатын сұрақтарда ISO стандартында шекаралық тексеру интерфейстері міндетті емес екендігі және snprintf функциясының балама ретінде қолжетімді екендігі айтылған.

Үйлесімділік қабаттары

Басқа экожүйелер үшін жазылған бағдарламаларды glibc интерфейсін ұсынатын жүйелерде іске қосуға мүмкіндік беретін үйлесімділік қабаттары ("shims") бар. Олардың ішінде Android-тың Bionic жүйесіне арналған үйлесімділік қабаты – libhybris және Windows API-ларын glibc және Unix-тің сияқты жүйелерде қолжетімді басқа да түпнұсқа API-лерге аударуды қамтамасыз ететін Wine бар. Оны Windows API-ден glibc-ге үйлесімділік қабаты ретінде қарастыруға болады.