✨GNU C Library

GNU C Library

thế=|nhỏ|300x300px|[[Giao diện nhân Linux|Linux API được cấu thành từ System Call Interface của nhân Linux, GNU C Library (của GNU), libdrm, libalsa và libevdev (củafreedesktop.org).]] thế=|nhỏ|300x300px|GNU C Library là một trình bao bọc xung quanh các [[lời gọi hệ thống của nhân Linux kernel.]] thế=|nhỏ|300x300px|[[Hạt nhân Linux|Nhân Linux và glibc cùng nhau tạo thành API Linux. Sau khi biên dịch, các mã nhị phân cung cấp một ABI.]] GNU C Library (gọi tắt là glibc) là thư viện C chuẩn đuợc viết bởi Dự án GNU. Dự án đuợc bắt đầu vào đầu những năm 1980 bởi Quỹ Phần mềm Tự do (FSF) cho hệ điều hành GNU của họ, và vẫn đuợc tiếp tục phát triển cho tới ngày nay.

Glibc là phần mềm tự do nguồn mở, được phát hành với Giấy phép Công cộng Hạn chế GNU. Dự án cung cấp các thư viện cốt lõi cho các hệ thống GNU và GNU/Linux, cũng như nhiều hệ thống khác sử dụng nhân Linux. Các thư viện này cung cấp các API quan trọng bao gồm bao gồm các chức năng ISO C11, POSIX.1-2008, BSD dành riêng cho hệ điều hành và nhiều hơn nữa. Các API này bao gồm các chức năng cơ bản như open, read, write, malloc, printf, getaddrinfo, dlopen, pthread_create, crypt, login, exit...

Lịch sử

Glibc ban đầu được viết chủ yếu bởi Roland McGrath, người đã làm việc cho Free Software Foundation (FSF) trong những năm 1980 khi ông còn thiếu niên.

Tháng 2 năm 1988, FSF cho biết các chức năng của ANSI C gần như đã được triển khai hoàn toàn. Đến năm 1992, các chức năng của ANSI C-1989 và POSIX.1-1990 đã được triển khai và việc hỗ trợ POSIX.2 đang được tiến hành.

Tháng 9 năm 1995, Ulrich Drepper đã có đóng góp đầu tiên của mình cho dự án, và trong những năm sau đó của thập niên 1990, ông đã dần trở thành người đóng góp và duy trì chính của glibc. Drepper giữ vai trò duy trì dự án trong nhiều năm và cho đến năm 2012, ông là người thực hiện 63% số lượt đóng góp cho dự án.

Chuyển sang Git, một phân phối VCS

Trong khi trước đó lưu trữ qua CVS, từ 2009 glibc đã chuyển sang lưu trữ qua Git (một hệ thống kiểm soát phiên bản phân tán) trên Sourceware

Các phiên bản khác

Đầu những năm 1990, các nhà phát triển nhân Linux đã phân nhánh glibc. Nhánh của họ, "Linux libc", đã được duy trì riêng biệt. Tuy nhiên, do sự khác biệt về giấy phép, các thay đổi được thực hiện với Linux libc đã không thể được đưa vào glibc.

Khi FSF phát hành glibc 2.0 vào tháng 1 năm 1997, các nhà phát triển nhân Linux đã ngừng phát triển Linux libc do sự tương thích tốt hơn của glibc 2.0 với chuẩn POSIX. Ngoài ra glibc 2.0 cũng có khả năng quốc tế hóa và biên dịch tốt hơn, IPv6, truy cập dữ liệu 64-bit, tiện ích cho các ứng dụng đa luồng, khả năng tương thích với các phiên bản trong tương lai và bộ mã có khả năng cơ động cao hơn.

Phiên bản Linux libc được sử dụng cuối cùng đã sử dụng tên (soname) libc.so.5. Từ đây, glibc 2.x trên Linux sử dụng tên libc.so.6 (kiến trúc Alpha và IA64 dùng libc.so.6.1 thay thế). Tên file *.so thường được viết tắt là libc6 (ví dụ trong tên gói trong Debian) theo như quy tắc thông thường cho các thư viện.

Theo Richard Stallman, FSF không thể đưa những thay đổi trong Linux libc trở lại glibc do sự bất cập trong quyền tác giả. Dự án GNU khá nghiêm ngặt về bản quyền và tác quyền.

Năm 2009, sau nhiều tranh cãi về quá trình phát triển glibc, như Debian cùng với một số dự án phụ thuộc đã chuyển sang sử dụng Eglibc, một bản của glibc được hỗ trợ bởi một côngxoocxiom gồm Freescale, MIPS, MontaVista và Wind River, có sự hỗ trợ hệ thống nhúng cũng như hỗ trợ thêm một số kiến trúc phần mềm, cùng với nhiều sự cải tiến khác. Sau đó, mã từ Eglibc đã được đưa trở lại glibc phiên bản 2.20. Năm 2014, eglibc dừng hoạt động, Debian sử dụng trở lại glibc.

Thành lập ủy ban giám sát

Bắt đầu từ năm 2001, một ủy ban đã được thành lập để giám sát việc phát triển glibc, với Ulrich Drepper giữ vai trò là người đóng góp và duy trì chính. Việc thành lập ban chỉ đạo tạo ra một cuộc tranh cãi công khai, được Ulrich Drepper miêu tả như là một việc tranh quyền tiếp quản thất bại mang tính thù địch của Richard Stallman.

Tháng 3 năm 2012, ủy ban này đã loại Drepper ra khỏi vai trò phát triển cũng như tự giải tán, với mong muốn về một quá trình phát triển được quản lý trực tiếp bởi cộng đồng. Ryan Arnold, Maxim Kuvyrkov, Joseph Myers, Carlos O'Donell và Alexandre Oliva chịu trách nhiệm cho việc quản lý và duy trì của GNU, tuy nhiên họ không có quyền quyết định thêm.

Lịch sử phiên bản

Trong phần lớn trường hợp, phiên bản glibc có thể được xem bằng cách thực thi tệp thư viện (ví dụ, /lib/libc.so.6).

Chức năng

glibc cung cấp chức năng được yêu cầu bởi các tiêu chuẩn Single UNIX Specification, POSIX (1c, 1d, và 1j) và một số chức năng của ISO C11, ISO C99, Berkeley Unix (BSD), System V Interface Definition (SVID) và X/Open Portability Guide (XPG), Issue 4.2, với tất cả các phần mở rộng chung cho các hệ thống tuân thủ XSI (X/Open System Interface) cùng với tất cả các phần mở rộng X/Open UNIX.

Ngoài ra, glibc còn cung cấp các tính năng mở rộng cần thiết hay hữu ích cho các phần mềm GNU cũng như các phần mềm khác.

Phần cứng và nhân được hỗ trợ

glibc được sử dụng trên nhiều kiến trúc phần cứng và hạt nhân khác nhau. Nó được sử dụng phổ biến nhất trên các hệ thống sử dụng hạt nhân Linux trên phần cứng x86, tuy nhiên, các phần cứng được hỗ trợ chính thức bao gồm: ARM 32-bit và 64-bit (AArch64), C-SKY, DEC Alpha, IA-64, Motorola m68k, MicroBlaze, MIPS, Nios II, PA-RISC, PowerPC, RISC-V, s390, SPARC, và x86 (câc bản cũ hỗ trợ TILE). Nó chính thức hỗ trợ hạt nhân Hurd và Linux. Ngoài ra, còn có các phiên bản được chỉnh sửa để chạy trên nhân của FreeBSD và NetBSD (nhờ đó mà các dự án như Debian GNU/kFreeBSD ra đời), cũng như nhánh phát triển của OpenSolaris. Nó cũng được sử dụng (ở dạng đã chỉnh sửa), mang tên libroot.so trên BeOS và Haiku.

Sử dụng glibc trên các thiết bị cỡ nhỏ

glibc đã bị chỉ trích vì sự "cồng kềnh" của nó, điển hình là từ Linus Torvalds và các nhà phát triển embedded Linux. Vì lý do này, một số dự án cung cấp các thư viện chuẩn C thay thế gọn nhẹ hơn đã xuất hiện, điển hình là uclibc hay musl. Mặc dù vậy, nhiều dự án vẫn sử dụng glibc vì tính hoàn thiện cũng như sự hỗ trợ các tiêu chuẩn kỹ thuật của nó. Các ví dụ bao gồm Openmoko và Familiar Linux cho các thiết bị cầm tay iPaq (khi sử dụng phần mềm hiển thị GPE).

Lớp tương thích

Có các lớp tương thích ("shims") cho phép chương trình được viết cho các hệ sinh thái khác chạy trên chạy trên các hệ thống cung cấp giao diện glibc. Chúng bao gồm libhybris, một lớp tương thích cho Bionic của Android, và Wine, có thể được coi là lớp tương thích từ Windows API đến glibc và các API gốc khác có sẵn trên các hệ thống tương tự Unix.

👁️ 0 | 🔗 | 💖 | ✨ | 🌍 | ⌚
thế=|nhỏ|300x300px|[[Giao diện nhân Linux|Linux API được cấu thành từ System Call Interface của nhân Linux, GNU C Library (của GNU), libdrm, libalsa và libevdev (củafreedesktop.org).]] thế=|nhỏ|300x300px|GNU C Library là một trình bao bọc xung quanh
nhỏ|phải|Logo GPLv3 Biểu trưng "Heckert" của GNU **Giấy phép Công cộng GNU** (tiếng Anh: _GNU General Public License_, viết tắt **GNU GPL** hay chỉ **GPL**) là giấy phép phần mềm tự do được sử dụng
**Giấy phép Công cộng GNU Hạn chế** (tiếng Anh: _GNU Lesser General Public License_, viết tắt **LGPL**) là một giấy phép phần mềm tự do nguồn mở được phát hành bởi Quỹ Phần mềm Tự
**C** là một ngôn ngữ mệnh lệnh được phát triển từ đầu thập niên 1970 bởi Dennis Ritchie để dùng trong hệ điều hành UNIX. Từ đó, ngôn ngữ này đã lan rộng ra nhiều
**Unix** (; được đăng ký nhãn hiệu là **UNIX**) là một họ hệ điều hành máy tính đa nhiệm, đa người dùng được viết vào những năm 1960 và 1970 do một số nhân viên
[[KDE 3.5]] [[GNOME 2.12.0]] Trong khoa học máy tính, **Hệ thống X Window** (còn được gọi tắt là **X11** hay **X**) là một windowing system dùng để hiển thị đồ họa bitmap. Nó cung ứng
**Creative Commons** (viết tắt **CC**) (_Tài sản sáng tạo công cộng_) là một tổ chức phi lợi nhuận tập trung vào việc mở rộng số lượng tác phẩm có tính sáng tạo mà người khác
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
Đây là danh sách **Phần mềm mã nguồn mở**: là phần mềm máy tính được cấp phép giấy phép mã nguồn mở. Bài viết này không có tham vọng liệt kê tất cả những phần
**Object Pascal** chỉ đến một nhánh của phát sinh hướng đối tượng của Pascal, được biết đến chủ yếu với vai trò ngôn ngữ lập trình chính của Delphi. ## Lịch sử ban đầu tại
**NetBeans** là một môi trường phát triển tích hợp (IDE) cho Java. NetBeans cho phép các ứng dụng được phát triển từ một tập hợp các thành phần phần mềm được gọi là _modules_. NetBeans
**Enterprise Storage OS**, còn được gọi là **ESOS**, là bản phân phối Linux máy chủ lưu trữ SAN cấp độ khối (block-level). ESOS được phát triển trên dự án phần mềm nguồn mở, hoạt động
nhỏ|Biểu tượng của bản quyền thường được kí hiệu bằng chữ © **Quyền tác giả** hay **tác quyền** () là bản quyền hoặc độc quyền của một tác giả cho tác phẩm của người này.