Linux có tuân thủ POSIX không?

Is Linux Posix Compliant



Phần mềm được viết bởi nhiều nhà phát triển với nhiều nền tảng khác nhau. Các thuật toán chung có sẵn theo giấy phép miễn phí hoặc đã được xuất bản khoa học và chúng cũng có thể được cung cấp miễn phí cho các mục đích nghiên cứu. Điều này dẫn đến việc triển khai khác nhau và các phiên bản phần mềm phù hợp với nhiều nhu cầu. Cần phải chuẩn hóa các giao diện và định dạng dữ liệu để làm cho các triển khai khác nhau này vừa có thể hoán đổi cho nhau vừa có thể hoán đổi cho nhau theo mô-đun.

Tóm lại, POSIX [1] thực hiện chính xác điều đó đối với các hệ thống giống UNIX và UNIX (xem bài viết của Zak H [4] để biết lịch sử chi tiết hơn về chủ đề này). Nó xác định các giao diện trao đổi, cơ chế gọi và dữ liệu được truyền cho phần mềm nhưng để việc triển khai nội bộ cho nhà phát triển hoặc người bảo trì phần mềm. Mục đích là để thống nhất tất cả các nhánh UNIX khác nhau và các hệ thống giống UNIX theo cách mà các triển khai phần mềm khác nhau có thể tương tác với nhau. Ưu điểm chính của POSIX là có một tài liệu ràng buộc cho các thành phần này - giao diện, cơ chế và dữ liệu - có sẵn dưới dạng văn bản.







Hệ điều hành tuân theo toàn bộ tiêu chuẩn POSIX được phân loại là tuân thủ POSIX. Trong bài viết này, chúng tôi giải thích POSIX là viết tắt của gì, xác định xem Linux có thuộc danh mục này hay không và liệt kê các thành phần Linux nào phải được loại trừ khỏi phân loại này.



Thuật ngữ POSIX viết tắt cho điều gì?

POSIX là tên viết tắt của Giao diện Hệ điều hành Di động. Như đã giải thích ngắn gọn ở trên, POSIX là tên của một tập hợp các tiêu chuẩn được yêu cầu để duy trì khả năng tương thích giữa các hệ điều hành. Như đã nêu trong [1], [nó] xác định giao diện lập trình ứng dụng (API), cùng với các trình bao dòng lệnh và giao diện tiện ích, để tương thích phần mềm với các biến thể của Unix và các hệ điều hành khác. Phiên bản đầu tiên của POSIX được xuất bản vào năm 1988. Kể từ đó, POSIX liên tục được mở rộng và cập nhật bởi Nhóm sửa đổi tiêu chuẩn chung Austin (còn được gọi đơn giản là Nhóm Austin) [7].



Kể từ năm 2021, tiêu chuẩn POSIX bao gồm các phần sau:





  1. Dịch vụ cốt lõi (Kết hợp Tiêu chuẩn ANSI C) (IEEE std 1003.1-1988) - Tạo và kiểm soát quy trình, Tín hiệu, Hoạt động tệp và thư mục, Đường ống, thư viện C, Giao diện và điều khiển cổng I / O, Trình kích hoạt quy trình
  1. Tiện ích mở rộng (Liên kết tượng trưng)
  2. Thời gian thực và tiện ích mở rộng I / O (IEEE Std 1003.1b-1993) - Lập lịch ưu tiên, Tín hiệu thời gian thực, Đồng hồ và bộ hẹn giờ, Semaphores, Truyền tin, Bộ nhớ dùng chung, I / O không đồng bộ và đồng bộ, Giao diện khóa bộ nhớ
  3. Phần mở rộng chuỗi (IEEE Std 1003.1c-1995) - Tạo luồng, Kiểm soát và Dọn dẹp, Lập lịch luồng, Đồng bộ hóa luồng, Xử lý tín hiệu
  4. Nhiều tiện ích mở rộng thời gian thực hơn
  5. Tiện ích mở rộng bảo mật (Danh sách kiểm soát truy cập)
  1. Shell và Tiện ích (IEEE Std 1003.2-1992) - Trình thông dịch lệnh, Chương trình tiện ích

Tiêu chuẩn thường xuyên được xem xét để phản ánh những thay đổi và cải tiến kỹ thuật. Đôi khi có thể mất vài năm trước khi một phiên bản mới được xuất bản và các thay đổi được kết hợp. Điều này có thể là bất lợi, nhưng có thể hiểu được với phạm vi của tiêu chuẩn.

Trong những năm gần đây, các phần mở rộng để xử lý thời gian thực đã được thêm vào. Phiên bản hiện tại đã được phát hành vào đầu năm 2018 [3]. Các tác giả của SibylFS [5] cũng đã xuất bản nhiều chú thích cho tiêu chuẩn POSIX để xác định tương tác và logic bậc cao hơn.



Tuân thủ POSIX có nghĩa là gì?

Thuật ngữ tuân thủ POSIX có nghĩa là hệ điều hành đáp ứng tất cả các tiêu chí POSIX. Hệ điều hành có thể chạy các chương trình UNIX nguyên bản, hoặc một ứng dụng có thể được chuyển từ hệ thống UNIX sang hệ thống khác. Việc chuyển một ứng dụng từ UNIX sang hệ điều hành đích rất dễ dàng, hoặc ít nhất là dễ dàng hơn nếu nó không hỗ trợ POSIX. Để đạt được sự an toàn, hệ điều hành phải đạt được chứng nhận POSIX thành công [2]. Bước này đạt được (với chi phí) bằng cách vượt qua bài kiểm tra chứng nhận tự động. Bộ thử nghiệm tương ứng có thể được tìm thấy tại đây [11].

Tính đến năm 2021, danh sách các hệ điều hành được chứng nhận POSIX bao gồm AIX từ IBM, HP-UX từ HP, IRIX từ SGI, EulerOS [6] từ Huawei, Mac OS X từ Apple (kể từ 10.5 Leopard), Solaris và QNX Neutrino từ Oracle, K-UX của Inspur [11] và TÍCH HỢP HĐH thời gian thực từ Green Hills Software [15]. Hiện tại vẫn chưa rõ liệu các phiên bản mới hơn của ba phiên bản kế nhiệm Solaris là OpenSolaris, Illumos và OpenIndiana có được phân loại là hoàn toàn tuân thủ POSIX hay không. Các hệ điều hành này tuân thủ POSIX cho đến POSIX 2001.

Các hệ điều hành khác được coi là hầu hết (nhưng không hoàn toàn) tuân thủ POSIX bao gồm Android, BeOS, FreeBSD, Haiku, Linux (xem bên dưới) và VMWare ESXi. Đối với Microsoft Windows, Cygwin cung cấp một môi trường thời gian chạy và phát triển tương thích với POSIX.

Linux có tuân thủ POSIX không?

Thuật ngữ Linux đề cập đến toàn bộ hệ điều hành Linux, bất kể hương vị, chẳng hạn như Debian GNU / Linux, RedHat Linux, Linux Mint, Ubuntu Linux, Fedora và CentOS, chẳng hạn. Nói một cách chính xác, Linux chỉ là tên của hạt nhân là thành phần cốt lõi của hệ điều hành miễn phí này.

Như Linus Torvalds đã mô tả trong cuốn sách Just For Fun [8], để phát triển nhân Linux, ông đã yêu cầu một bản sao của tiêu chuẩn POSIX. Điều này đã giúp anh ta thực hiện các cơ chế tương tự được sử dụng trong các hệ thống UNIX thương mại. Hơn nữa, điều này cho phép anh ta liên kết nhân Linux với các công cụ GNU chủ yếu theo cùng một cách tiếp cận. Công bằng mà nói, phần mềm trên hệ thống Linux được đóng góp từ nhiều nguồn khác nhau tuân theo tiêu chuẩn POSIX, nhưng đôi khi điều đó cũng thực hiện các khái niệm riêng của chúng. Tuy nhiên, đồng thời, điều này cũng cho thấy sự đa dạng tạo nên hệ điều hành Linux.

Một ví dụ về điều này là cách mà các đối số dòng lệnh được viết. Các đối số có hai dấu gạch ngang (ví dụ: –help) là các quy ước GNU, trong khi các lệnh POSIX không bao giờ sử dụng các đối số hai dấu gạch ngang mà chỉ sử dụng một đối số duy nhất (ví dụ: -help). Ngay từ đầu, Linux đã được thiết kế với GNU và đó là lý do tại sao các lệnh chứa kiểu GNU

tranh luận. Để đạt được sự tuân thủ POSIX, các đối số kiểu POSIX đã được thêm vào từng bước. Tuy nhiên, quyết định cuối cùng là do nhà phát triển đưa ra. Cho đến ngày nay, hầu hết các lệnh chấp nhận cả đối số ngắn và dài, hoặc thậm chí đối số không có bất kỳ dấu gạch ngang nào, chẳng hạn như lệnh find chẳng hạn. Công bằng mà nói, không có sự nhất quán giữa các lệnh trên một hệ thống và đây có thể là một vấn đề khi bạn định sử dụng cùng một lệnh trên một hệ thống dựa trên UNIX khác, đặc biệt là khi chuyển đổi giữa Linux, OS X và Solaris.

Hiện tại, Linux không được chứng nhận POSIX do chi phí cao, ngoại trừ hai bản phân phối Linux thương mại là Inspur K-UX [12] và Huawei EulerOS [6]. Thay vào đó, Linux được coi là hầu hết tuân thủ POSIX.

Đánh giá này là do các bản phân phối Linux chính tuân theo Cơ sở Tiêu chuẩn Linux (LSB) thay vì POSIX [9]. LSB nhằm mục đích giảm thiểu sự khác biệt giữa các bản phân phối Linux riêng lẻ [14]. Điều này đề cập đến cấu trúc hệ thống phần mềm, bao gồm Tiêu chuẩn phân cấp hệ thống tệp (FHS) được sử dụng trong nhân Linux. LSB dựa trên đặc điểm kỹ thuật POSIX, Đặc điểm kỹ thuật UNIX đơn (SUS) [10], và một số tiêu chuẩn mở khác, nhưng cũng mở rộng chúng trong một số lĩnh vực nhất định.

Các bản phân phối Linux dựa trên LSB bao gồm RedHat Linux, Debian GNU / Linux (2002-2015) và Ubuntu (cho đến năm 2015).

Phát triển với POSIX trong tâm trí

Để hiểu chi tiết hơn về POSIX, chúng tôi khuyên bạn nên lấy một bản sao của tiêu chuẩn POSIX và đọc đầy đủ. Bạn có thể lấy sách từ trang web của Nhóm Mở. Điều này yêu cầu phí đăng ký nhưng cung cấp cho bạn toàn quyền truy cập vào tài nguyên quý giá này. Các tiêu chuẩn trợ giúp vì chúng cho phép bạn phát triển phần mềm theo cách mà nó hoạt động theo cùng một cách trên tất cả các nền tảng UNIX.

Liên kết và tài liệu tham khảo

Cảm ơn

Tác giả xin chân thành cảm ơn Axel Beckert và Veit Schiele đã giúp đỡ và chỉ bảo trong quá trình chuẩn bị bài viết này.