POSIX中心主義

出典: フリー百科事典『ウィキペディア(Wikipedia)』
Jump to navigation Jump to search

POSIX中心主義(POSIXちゅうしんしゅぎ)とは、ソフトウェア開発指針の一つである。POSIX原理主義[1]とも呼ばれる。POSIX規格(IEEE Std. 1003)に極力準拠しながらプログラムを書くことを最大の特徴とする。そして明示的・暗示的にPOSIX規格に準拠しているOSが多いという背景により、この指針に基づいて書かれたプログラムは移植性や持続性が高まるなどがある。[独自研究?]

原理[編集]

ソフトウェアを含む多くの技術(或いは製品やサービス)には、実用上の寿命がある。開発者がサポートを終了したり、不具合や脆弱性が発見されたり、といったことが原因となり得る。そのような何らか別の技術に依存している技術の実用性を維持するには、定期的または不定期に保守(あるいは別環境への移植)をしなければならず、コスト負担が発生する。ゼロデイ攻撃のように、突然依存できなくなる事態への対応では特に重大なコストになる。そこでこのようなコストを避けるにはどうすればよいかを考える。

すると、例えば次の二つの対策が考えられる。

  • 普遍性の高い技術のみに依存する。
  • 普遍性の低い技術に依存せざるを得ない場合は、同等の機能を実現する別の実装にも依存できるように作り置く。

この二つの対策を実施することで、依存している技術の寿命によるコストの発生(保守コストや移植コスト)を低減させようという考え方がPOSIX中心主義の原理である。

具体的な指針[編集]

POSIX中心主義は、上記の原理をソフトウェアの分野に応用し、次の三つの指針を提唱した[2]

  • POSIX準拠
  • 交換可能性担保
  • W3C勧告準拠

1番目の指針にあるPOSIX規格は、1990年代に提唱されて以降、2010年代現在でも現存する多くのUNIX系OSが設計上の規範としており[要出典]、普遍性において高い実績があることから選ばれた。2番目の「交換可能性担保」の指針は、原理の2番目を実践する方法として提唱された。3番目の指針にあるW3C勧告は、Webアプリケーション分野においてPOSIXと同様に高い普遍性の実績から選ばれた。

POSIX準拠[編集]

この指針はPOSIX規格に準拠しながらプログラミングするというもので、POSIX中心主義での原則的な指針とされる。主にPOSIX文書で明記されているシェルスクリプト文法、コマンド(およびそこで明記されているオプションや動作)、副次的にC言語(C99)を用いてプログラムを書く。

交換可能性担保[編集]

上記の指針では実現の難しい機能、あるいは全く不可能な機能を実現しなければならない場合[3][4]は、POSIX規格にない依存ソフトウェアを使用せざるを得ない。しかし、無制限に認めてしまえば保守や移植のコストは増大してしまう。[独自研究?]そこで、使用する場合には次の性質を満たすことという例外条件が2番目の指針である。

今利用している依存ソフトウェア(A)と同等機能を有する別の実装(B)が存在し,何らかの事情によりAが使えなくなったときでも,Bに交換することでAを利用していたソフトウェアを継続して使える性質

例えば、Web APIにアクセスするためのコマンドがPOSIX規格では規定されていない。そこでcURLコマンドを使いたいと思った場合には、同等との機能を有する例えばWgetコマンドにも対応したコードにし、かつ共通に実装されている機能のみを使用することで、どちらかのサポートが終了して使えなくなったとしても直ちに影響を受けないようにする。

W3C勧告準拠[編集]

具体的には、W3C勧告で標準化された規格に準拠する。JavaScriptにおける各種ウェブブラウザの独自拡張は用いないようにする。

脚注・出典[編集]

  1. ^ 松浦智之(著)、USP研究所(監)「Windows/Mac/UNIXすべてで20年動くプログラムはどう書くべきか」、C&R研究所、2016年11月4日。ISBN 978-4-86354-209-9
  2. ^ 松浦智之、大野浩之、當仲寛哲 「ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング」、『情報処理学会 デジタルプラクティス』Vol.8 No.4(通巻32号)、2017年10月、352頁。ISSN 2188-4390。
  3. ^ POSIXで規定されているコマンドは、テキストデータを主な処理対象としているものが多く、バイナリーデータの処理に適したものが少ない。[要出典]
  4. ^ POSIXで規定されているコマンドにはメール送受信を除き、HTTPアクセスはじめ、INETドメインへの接続を実現するものが存在しない。[要出典]

関連項目[編集]