POSIX中心主義
POSIX中心主義(POSIXちゅうしんしゅぎ)とは高い互換性と長い持続性を得られる可能性があるソフトウェア開発のためのガイドラインである。ユニケージ開発手法の普及を行っているUSP研究所所属の松浦 智之、當仲 寛哲と金沢大学総合メディア基盤センター所属の大野 浩之らが提唱している。POSIX原理主義[1]とも呼ばれ、2015年発行の「すべてのUNIXで20年動くプログラムはどう書くべきか」にて書籍として初めて言及された。POSIX規格(IEEE Std. 1003)の中のシェルスクリプトとコマンドだけを極力使いながらプログラムを書くことを最大の特徴とする。そして明示的・暗示的にPOSIX規格に準拠しているOSが多いという背景により、このガイドラインに基づいて書かれたプログラムは移植性や持続性が高まると主張している。
概要[編集]
ソフトウェアを含む多くの技術(或いは製品やサービス)には、実用上の寿命がある。プロプライエタリなソフトウェアの開発やサポートが終了したり、修正不可能な不具合や脆弱性が発見されたり、といったことが原因となり得る。そのような何らか別の技術に依存している技術の実用性を維持するには、定期的または不定期に保守(あるいは別環境への移植)をしなければならず、コスト負担が発生する。突然依存できなくなる事態への対応では特に重大なコストになる。そこでこのようなコストを避けるにはどうすればよいかを考える。
すると、例えば次の二つの対策が考えられる。
- 普遍性の高い技術のみに依存する。
- 普遍性の低い技術に依存せざるを得ない場合は、同等の機能を実現する別の実装にも依存できるように作り置く。
この二つの対策を実施することで、依存している技術の寿命によるコストの発生(保守コストや移植コスト)が低減されるだろうという仮説を立てた。
そこでUNIX系OSが最低限満たすべきとした仕様をまとめた国際規格であるPOSIXに着目し「このような性質を持つ規格に極力準拠しながらプログラミングすることで,ソフトウェアは高い互換性と長い持続性を得られる可能性がある」(原文ママ)とし、POSIXの仕様に極力準拠しながらプログラミングをするガイドラインをPOSIX中心主義と名付けた。
論文「ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング」[2]ではガイドラインの提案と互換性と長期持続性の取り組みに活動について報告されているが、比較実験等は行われておらず検証結果については長年に渡る検証が必要であると現状報告をするに留まっている[3]。論文内容は根拠が書かれていない筆者の主張が目立ち、POSIXの非互換性や使いづらさを指摘していながら互換性が高いと主張するなど矛盾も多く見られるものとなっている。
ガイドライン[編集]
POSIX中心主義は、上記の仮説を元に次の三つのガイドラインを提唱した。
- POSIX準拠
- 交換可能性担保
- W3C勧告準拠
1番目のガイドラインにあるPOSIX規格は、1990年代に標準化されて以降、2010年代現在でも現存する多くのUNIX系OSが設計上の規範としており、普遍性において高い実績があることから選ばれた。2番目の「交換可能性担保」のガイドラインは、POSIXで明記されたコマンドだけでは実現不可能な事例に対処する方法として提唱された。3番目のガイドラインにあるW3C勧告は、Webアプリケーション分野においてPOSIXと同様に高い普遍性の実績から選ばれた。
POSIX準拠[編集]
1番目のガイドラインはPOSIX規格に準拠しながらプログラミングするというもので、POSIX中心主義での原則的なガイドラインとされる。POSIX中心主義によるPOSIX準拠の定義とは、POSIX文書で明記されているシェルスクリプト文法、コマンド(およびそこで明記されているオプションや動作)を原則として使い、副次的にC言語(C99)を用いてプログラムを書くことであり、その他のソフトウェア、ミドルウェア、ライブラリ、プログラミング言語等はそれ自体が例えPOSIX環境で動作するものであっても、POSIX文書に明記されていないという理由でPOSIX準拠を満たしたものではないとみなしている。特にRDBMSは米国の大学で聞いた話を元に「データ管理術を知らないプログラマーの発明品」と考えておりミドルウェアを使わずにシェルスクリプトで実現可能なファイルを使った管理手法を用いることとしている。またバージョン管理ソフト(git)もPOSIXで明記されていないため、シェルスクリプトを使って自分で管理することを推奨している。単独のUNIXホストで動かすプログラムやクライアント・サーバー構成のサーバー側(CGI)が対象であり、クラスタ環境やクラウドなどの複数のUNIXホストで動かすプログラムやクライアント側は対象としていない。
交換可能性担保[編集]
2番目のガイドラインは1番目のPOSIXで明記されたコマンドだけを使うというガイドラインの欠点を回避するために作られた。POSIXで明記されているコマンドだけでは実現の難しい機能、あるいは全く不可能な機能を実現する場合POSIXで規定されているコマンドは、テキストデータを主な処理対象としているものが多く、バイナリーデータの処理に適したものが少ない。POSIXで規定されているコマンドにはメール送受信を除き、HTTPアクセスはじめ、INETドメインへの接続を実現するものが存在しない。は、POSIX規格にない依存ソフトウェアを使用せざるを得ない。しかし、POSIX規格にないソフトウェアの利用を無制限に認めてしまえば保守や移植のコストは増大してしまう。そこで、使用する場合には次の性質を満たすことという例外条件を作った。
今利用している依存ソフトウェア(A)と同等機能を有する別の実装(B)が存在し,何らかの事情によりAが使えなくなったときでも,Bに交換することでAを利用していたソフトウェアを継続して使える性質
例えば、Web APIにアクセスするためのコマンドがPOSIX規格では規定されていない。そこでPOSIX中心主義ではcURLコマンドを使いたいと思った場合には、同等との機能を有する例えばWgetコマンドにも対応したコードにし、かつ独自拡張の利用を禁止し共通に実装されている機能のみを使用することで、どちらかのサポートが終了して使えなくなったとしても直ちに影響を受けないように予め対処すべしとしている。
W3C勧告準拠[編集]
3番目のガイドラインは1番目のシェルスクリプトとコマンドだけを使うというガイドラインではWebアプリケーションを開発できないという欠点を回避するために作られた。具体的には、W3C勧告で標準化された規格に準拠すべきというガイドラインである。POSIX中心主義ではブラウザで使えるプログラミング言語はJavaScriptだけであると考えており、W3Cによって規定されていない各種ウェブブラウザの独自拡張は使ってはならないとしている。またjQueryやReact等のJavaScriptライブラリもそれらのライブラリが一部のブラウザの独自機能を呼び出している恐れがあるという理由で原則として使わないとしており、自作のプログラムにそういうライブラリの混入を許すと長寿命という特徴を失う恐れがあると主張により、ライブラリを自力で1から書くことを推奨している。クライアント・サーバー構成でクライアントにブラウザを用いるアプリケーション開発を対象としている。
応用事例[編集]
Twitterデータ収集・分析[編集]
2000万以上の大量のツイートを(2020年当時の)一般的なPCで収集し、分析する応用事例が報告されている[4]。筆者らはこの目的でPOSIX中心主義を用いた理由として次の事柄を上げている。
- ツイート収集期間中に収集プログラムを動かす環境(OSなど)のバージョンアップによって収集プログラムが動かなくなり、収集作業ができなくなるリスクを回避するため。
- 取集されたデータを、RDBMSミドルウェアに依存に依存しないプレーンテキスト形式で格納することにより、後世の研究者が収集当時の世論を研究する貴重な情報源として利用しやすくするため。
倒立振子制御[編集]
倒立振子の機体制御を、リアルタイムOSやマイコンボードを用いずにマルチユーザー・マルチタスクのPOSIX準拠OSで実装する事例を報告している(ただしセンサー・アクチュエーターとの通信のためマイコンボードの利用は完全には排除できていない)[5][6]。特徴は、UNIXホストから見た場合のセンサー・アクチュエーターデバイスとの通信をプレーンテキストで行い、ワンボードマイコンは特定のバイナリー形式ベースの授受しかできない実際のセンサー・アクチュエーターとのデータ変換に徹することで、既存のコマンド(AWK等)を含めたUNIXコマンドで制御ロジックの実装を実現している点である。 筆者らは、このような形でPOSIX中心主義を活用した利点として次の事柄を挙げている。
- 制御ロジックの実装をPOSIX互換OS上に移すことにより、組み込み機器におけるベンダー依存を低減でき、コードの寿命を現在利用している組み込み機器のプラットフォームの寿命から分離できる。
- UNIX系OSのコマンドやパイプは、制御工学における各種フィルター、およびそれを繋ぎ合わせたブロック線図と概念が似ており、UNIXのコマンドやシェルスクリプトは制御ロジックの実装に有効な可能性がある。
脚注・出典[編集]
- ↑ 松浦智之(著)、USP研究所(監)「Windows/Mac/UNIXすべてで20年動くプログラムはどう書くべきか」、C&R研究所、2016年11月4日。ISBN 978-4-86354-209-9。
- ↑ 松浦智之、大野浩之、當仲寛哲 「ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング」、『情報処理学会 デジタルプラクティス』Vol.8 No.4(通巻32号)、2017年10月、352頁。ISSN 2188-4390。
- ↑ 実際にソフトウェアの互換性や持続性向上にどの程度の効果があるか結論(特に長期持続性)を得るには長年に渡る検証が必要ではあるが,実践から約2年が経過した現時点での状況を報告する。
- ↑ 松浦智之、當仲寛哲、大野浩之 「大量ツイートの収集・分析を個人で手軽に実現可能にする方法の提案」、『情報処理学会 デジタルプラクティス』Vol.11 No.1(通巻41号)、2020年1月、173頁。ISSN 2188-4390。
- ↑ 松浦智之、當仲寛哲、大野浩之 「シェルスクリプトを用いたUNIX哲学に基づくリアルタイム制御」、『ソフトウェア・シンポジウム 2021 論文集』、2021年5月、73頁。ISBN 978-4-916227-27-0。
- ↑ 松浦智之、當仲寛哲、大野浩之 「UNIX機におけるIoT機器制御のためのタイミング管理」、『ソフトウェア・シンポジウム 2021 論文集』、2021年5月、82頁。ISBN 978-4-916227-27-0。
関連項目[編集]
- まつらリッチ研究所
- POSIX原理主義に関する情報を集約することを目的としたサイト
- リッチー大佐(著) 「初めてのPOSIX原理主義 」