Thư viện (máy tính)

Minh họa của một ứng dụng sử dụng libvorbisfile để phát file Ogg Vorbis
Trong khoa học máy tính, thư viện là tập hợp các tài nguyên không biến động được sử dụng bởi các chương trình máy tính, thường để phát triển phần mềm.  Chúng có thể bao gồm dữ liệu cấu hình, tài liệu, dữ liệu trợ giúp, mẫu thông báo, mã được viết sẵn và chương trình con, lớp, giá trị hoặc thông số kỹ thuật loại.  Trong OS / 360 của IBM và những người kế nhiệm của họ, chúng được gọi là các tập dữ liệu được phân vùng.
Một thư viện cũng là một tập hợp các triển khai hành vi, được viết bằng ngôn ngữ, có giao diện được xác định rõ ràng theo đó hành vi được gọi.  Chẳng hạn, những người muốn viết chương trình cấp cao hơn có thể sử dụng thư viện để thực hiện các cuộc gọi hệ thống thay vì thực hiện các cuộc gọi hệ thống đó nhiều lần. Ngoài ra, hành vi được cung cấp để tái sử dụng bởi nhiều chương trình độc lập.  Một chương trình gọi hành vi do thư viện cung cấp thông qua cơ chế của ngôn ngữ. Ví dụ, trong một ngôn ngữ mệnh lệnh đơn giản như C, hành vi trong thư viện được gọi bằng cách sử dụng chức năng gọi bình thường của C.  Điều phân biệt lời gọi là chức năng thư viện, so với chức năng khác trong cùng một chương trình, là cách mã được tổ chức trong hệ thống.
Mã thư viện được tổ chức theo cách có thể được sử dụng bởi nhiều chương trình không có kết nối với nhau, trong khi mã là một phần của chương trình được tổ chức chỉ được sử dụng trong một chương trình đó.  Sự khác biệt này có thể đạt được một khái niệm phân cấp khi một chương trình phát triển lớn, chẳng hạn như một chương trình hàng triệu dòng. Trong trường hợp đó, có thể có các thư viện nội bộ được sử dụng lại bởi các phần phụ độc lập của chương trình lớn. Đặc điểm nổi bật là một thư viện được tổ chức cho các mục đích được sử dụng lại bởi các chương trình hoặc chương trình phụ độc lập và người dùng chỉ cần biết giao diện chứ không phải chi tiết bên trong của thư viện.
Giá trị của một thư viện nằm trong việc tái sử dụng hành vi. Khi một chương trình gọi một thư viện, nó có được hành vi được thực hiện bên trong thư viện đó mà không phải thực hiện chính hành vi đó. Các thư viện khuyến khích việc chia sẻ mã theo kiểu mô đun và dễ dàng phân phối mã.
Hành vi được thực hiện bởi một thư viện có thể được kết nối với chương trình gọi ở các giai đoạn vòng đời chương trình khác nhau. Nếu mã của thư viện được truy cập trong quá trình xây dựng chương trình gọi, thì thư viện được gọi là thư viện tĩnh. Một cách khác là xây dựng chương trình thực thi của chương trình gọi và phân phối nó, độc lập với việc triển khai thư viện.  Hành vi thư viện được kết nối sau khi thực thi đã được gọi để được thực thi, như là một phần của quá trình bắt đầu thực thi, hoặc ở giữa thực thi.  Trong trường hợp này, thư viện được gọi là thư viện động (được tải trong thời gian chạy).  Một thư viện động có thể được tải và liên kết khi chuẩn bị một chương trình để thực thi, bởi trình liên kết.  Ngoài ra, ở giữa thực thi, một ứng dụng có thể yêu cầu rõ ràng rằng một mô-đun được tải.
Hầu hết các ngôn ngữ được biên dịch đều có thư viện chuẩn mặc dù các lập trình viên cũng có thể tạo thư viện tùy chỉnh của riêng họ. Hầu hết các hệ thống phần mềm hiện đại cung cấp các thư viện thực hiện phần lớn các dịch vụ hệ thống. Các thư viện như vậy đã thương mại hóa các dịch vụ mà một ứng dụng hiện đại yêu cầu. Như vậy, hầu hết các mã được sử dụng bởi các ứng dụng hiện đại được cung cấp trong các thư viện hệ thống này.