Linux 黑話解釋:什麼是 POSIX?
POSIX 簡介
與其說 POSIX 是一個東西,不如說是一個標籤。想像一下,有一個盒子,上面貼著標籤:POSIX,而盒子里是一個標準。該標準由 POSIX 所關注的規則和指令集組成。POSIX 是 可移植操作系統介面 的縮寫。它是一個 IEEE 1003.1 標準,其定義了應用程序(以及命令行 Shell 和實用程序介面)和 UNIX 操作系統之間的語言介面。
當 UNIX 程序從一個 UNIX 平台移植到另一個平台時,遵守該標準可以確保其兼容性。POSIX 主要關注的是 AT&T 的 System V UNIX 和 BSD UNIX 的特性。
該標準必須闡明並遵循如何實現操作系統之間互操作性的目標的規則。POSIX 涵蓋了以下內容:系統介面、命令和實用程序、網路文件訪問,這裡僅舉幾例(POSIX 的內容遠不止這些)。
為什麼有 POSIX?
一句話:可移植性。
60 多年前,如果程序員想讓他們的軟體在一個以上的系統上運行,就必須完全重寫代碼。由於所涉及的費用,這種情況並不經常發生,但在 1960 年代中期,可移植性成為一種特性 —— 不是通過 POSIX,而是在大型機領域。
IBM 推出了 System/360 系列的大型計算機。不同的型號有其獨特的規範,但硬體使得它們可以使用同一個操作系統:OS/360。
不僅操作系統可以在不同的型號上運行,應用程序也可以在它們上面運行。這不僅降低了成本,而且創造了「計算機系統」:可以跨產品線協同工作的系統。今天,這一切都很常見,比如網路和系統,但在當時,這是一個巨大的進步!
大約在同一時間,當 UNIX 出現的時候,它也做出了承諾,它可以在不同製造商的機器上運行。然而,當 UNIX 開始衍生出不同的流派時,在這些 UNIX 變體之間移植代碼變得很困難。UNIX 可移植性的承諾正在失去基礎。
為了解決這個可移植性問題,在 20 世紀 80 年代形成了 POSIX 標準。這個標準是在 AT&T 的 System V UNIX 和 BSD UNIX 的基礎上定義的,這是當時最大的兩個 UNIX 變體。值得注意的是,POSIX 的形成並不是為了控制操作系統的構建方式,任何公司都可以自由地以他們喜歡的方式設計他們的 UNIX 變體。POSIX 只關心應用程序與操作系統的介面是怎樣的。用程序員的話來說,介面是一個程序的代碼與另一個程序的通信方法。介面期望程序 A 向程序 B 提供特定類型的信息。同樣地,程序 A 期望程序 B 用特定類型的數據來回答。
例如,如果我想用 cat
命令讀取一個文件,我會在命令行上輸入類似這樣的內容:
cat myfile.txt
我不想說很多程序員的術語,簡單的來說,cat
命令調用操作系統來獲取文件,以便 cat
能夠讀取它。cat
讀取它,然後在屏幕上顯示文件的內容。在應用程序(cat
)和操作系統之間有很多的相互作用。這種相互作用如何工作是 POSIX 所關心的。如果這種相互作用在不同的 UNIX 變體中是相同的,那麼可移植性,無論操作系統、製造商和硬體如何,就可以重新獲得了。
關於如何實現這一切的具體細節,在該標準中作了規定。
合規是自願的
我們所有人都至少見過這樣的信息:「如需幫助,請輸入:XXXX -help」。這在 Linux 中很常見,但是這不符合 POSIX 標準。POSIX 從來沒有要求雙破折號,他們希望用一個破折號。雙破折號來自 GNU,然而,它並沒有損害 Linux,而且還為其增加了一點特性。同時,Linux 大部分都是兼容 POSIX 的,特別是在涉及到系統調用介面時。這就是為什麼我們能夠在 Linux、Sys V UNIX 和 BSD UNIX 上運行 X、GNOME 和 KDE 應用程序。各種命令,如 ls
、cat
、grep
、find
、awk
等,在不同的變體中操作相同。
作為一項規則,合規是一個自願的步驟。當代碼符合要求時,移到另一個系統上就比較容易,很少有必要或根本不需要重寫代碼。當代碼可以在不同的系統上工作時,它的使用範圍就會擴大。使用其他系統的人可以從使用該程序中受益。對於初出茅廬的程序員來說,學習如何編寫符合 POSIX 標準的程序,就能對他們的職業生涯有所幫助。對於那些對 Linux 領域的合規性感興趣的讀者,可以在以下網站找到很多好的信息: Linux 基本標準(LSB)。
但我不是程序員或系統設計師...
許多從事計算機工作的人並不是程序員或操作系統設計師。他們是醫院的文員,是寫信件、任務清單、聽寫備忘錄的秘書,等等。其他人則是將數字製成表格,收集和整理數據,經營網上商店,寫書和文章(我們中的一些人還會閱讀這些文章)。幾乎在每一個工作中,附近都可能有一台計算機。
POSIX 也影響著這些用戶,不管他們是否知道。用戶不一定要遵守這個標準,但他們確實希望他們的計算機能夠工作。當操作系統和程序符合 POSIX 標準時,他們就獲得了互操作性的好處。他們將能夠從一個系統轉移到另一個系統,併合理地期望這些機器能夠像另一個系統那樣工作。他們的數據仍然可以訪問,他們仍然能夠對其進行修改。
POSIX,以及其他標準,都在不斷發展。隨著技術的發展,標準也在發展。標準實際上是人們、製造商、組織等用來以有效的方式執行任務的商定系統。一個製造商的設備能夠與另一個製造商的設備一起工作。想一想吧。你的藍牙耳機可以在蘋果手機上使用,也可以在安卓手機上使用。我們的電視可以連接到不同網路的視頻和節目,如 Amazon Prime、BritBox、Hulu —— 僅舉幾例。現在,我們甚至可以用我們的手機監測心率。所有這些在很大程度上都是通過遵守標準而實現的。
好處多多。我喜歡這樣。
那麼 「X」 是什麼?
我承認,我還沒說過 POSIX 中的 「X」 是什麼意思。在一篇很好的文章中,Richard Stallman 解釋了 POSIX 中的 「X」 是什麼意思。用他的話來說就是這樣:
IEEE 已經完成了規範的制定,但沒有簡潔的名稱。標題是 「可移植的操作系統介面」,雖然我不記得確切的字眼了。委員會把 「IEEEIX」 作為簡寫。我不認為這是個好的選擇。它的發音很難聽 —— 聽起來就像恐怖的尖叫聲,「Ayeee!」 —— 所以我預計人們會把這個規範叫為 「Unix」。
由於 GNU 不是 Unix,而它的目的是取代 Unix,我不希望人們把 GNU 稱為 「Unix 系統」。因此,我提出了一個人們可能真正使用的簡潔的名字。在沒有特別靈感的情況下,我用了一種很笨的方式取了一個名字。我取了 「可移植操作系統」 的首字母並加上 「ix」。IEEE 馬上就採用了這個名字。
結論
POSIX 標準允許開發者使用大部分相同的代碼在許多操作系統上創建應用程序、工具和平台。不管怎麼說,按照標準寫代碼並不是一個要求,但當你想把你的代碼移植到其他系統時,它確實有很大的幫助。
基本上,POSIX 是面向操作系統設計者和軟體開發者的,但作為系統的使用者,無論我們是否意識到,我們都受到 POSIX 的影響。正是因為有了這個標準,我們才能夠在一個 UNIX 或 Linux 系統上工作,並把工作帶到另一個系統上,而且工作起來毫無障礙。作為用戶,我們在可用性和跨系統的數據重複使用方面獲得了許多好處。
via: https://itsfoss.com/posix/
作者:Bill Dyer 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive