POSIX 是規定性的還是描述性的?

POSIX 是規定性的還是描述性的?

POSIX 是對過去應用程式如何實現 UNIX 每個特定部分的描述,還是對 UNIX 必須如何實現的規定性規範?

如果是描述性的,則只有所有包含的實作所共有的功能才是有效的。雖然任何實作都沒有實現某個功能,但該功能是「未定義的」。

如果是規定性的:它是基於哪個理論架構?數學? C語言?經驗?

答案1

這是規定性的法律上的,但主要是描述性的事實上的

POSIX 是一組可以匹配實現的規範,包括文件發佈時已經存在的實現和未來的實現。所以這是規定性的。

實際上,POSIX 一開始主要是作為現有實現的公共子集。所以從這個意義上來說,它主要是描述性的。但 POSIX 有時會強制要求新的行為。最常見的是,對於許多實作中存在但具有不同介面(函數名稱、命令列選項等)的功能,POSIX 引入了多個函數和實用程序,例如paxtar(和的替代品cpio,它們在 Unix 變體中非常不同)和各種posix_xxx功能。 POSIX 也引進了新的常數和命令列選項;例如,對於ps,「該-A選項相當於BSD-g和SVID -e。由於兩個系統不同,因此選擇了一種助記符折衷方案。基本原理部分通常解釋為什麼包含這個或那個功能,經常提到哪些實作已經具有某個功能,或者為什麼在不相容的實作之間做出或不做出選擇。

答案2

POSIX 的目的是描述現有行為,而不是破壞歷史行為(不是使歷史 UNIX 不相容),除非歷史行為已經可以被視為明確的歷史錯誤。

POSIX 的進一步目的不是要引入自己的發明。如果事實證明需要所謂的自己的發明(因為現有的實現對於標準化沒有用),則 POSIX 委員會的想法將與各種 UNIX(或程序)版本的作者進行討論,以便獲得最好的解決方案。這樣的討論經常會產生新的實現,這些實現在最終提案被寫下來時支持它們。

有一些例外,例如 POSIX 的定義方式getpgrp()setpgrp()10 年前就已經存在的 BSD 介面相衝突。 POSIX 的定義方式getline()fexec()在 GNU libc 引入不相容介面之前已存在近 30 年的實作完全不相容。

如果發現現有實作不匹配,則決定使用哪個變體(或是否引入現有不同實作的混合)並引入 posix 特定名稱。例如,線程介面就發生了這種情況,其中posix_xxx()引入的函數與 Roger Faulkner(Sun Microsystems)之前的參考實作非常相似。

相關內容