製品レビュー
Microsoft Windows Services for UNIX 3.0
日本語版

3.Interixプロセスと、Win32プロセスのシームレスなプロセス間通信も可能

デジタルアドバンテージ
2002/11/20


 Interixサブシステム内で実行されるUNIXコマンドなどのプロセスは、それを実行する環境サブシステムが異なるというだけで、OSから見れば、Win32サブシステム内で動くWindowsアプリケーションなどと対等のプロセスである。例えば、Windows環境にSFU 3.0をインストールし、ksh(Korn Shell)を起動して、manコマンドを実行したところで、おなじみのタスク・マネージャでプロセス一覧を表示したのが次の画面である。

SFU 3.0をインストールし、kshを起動し、manコマンドを実行したときのプロセス一覧
Interixサブシステム内で実行されるプロセスも、Win32サブシステム内で実行されるWindowsアプリケーションのプロセスも、OSから見れば対等なプロセスでしかない。従ってプロセス間通信など、OSがサポートする機能をいずれのプロセスからでも利用できる。
  kshのプロセス。
  manコマンドのプロセス。

 従ってInterixサブシステム内のプロセス(およびスレッド)も、Win32サブシステム内のプロセス(スレッド)とまったく同じように、プロセス間通信など、OSがサポートする機能を利用できる。つまりWin32アプリケーションと、Interixアプリケーションの間で、シームレスなプロセス間通信を行えるのである。

Win32アプリケーションとInterixアプリケーションのプロセス間通信
異なるサブシステム間であっても、プロセス間通信によって協調動作することができる。これによりWin32アプリケーションとInterixアプリケーションをシームレスに統合し、連携して動作することが可能になる。

 これを発展させて、InterixアプリケーションをCOMオブジェクトとしてアクセス可能にするCOMラッパ(wrapper)を作れば、Win32アプリケーション(例えばOfficeなど)からCOMインターフェイスを通してInterixアプリケーションを呼び出すことができるようになる。これにより例えば、従来のUNIXカスタム・アプリケーションをInterix上に移植し、これに対してOfficeアプリケーションからデータを渡したり、カスタム・アプリケーションからの結果をOfficeアプリケーションで受け取ったりすることが可能になる(例えば、結果をExcelでグラフ化するなどが可能)。

 InterixアプリケーションをCOMオブジェクトとしてアクセスできることから、その気になれば、Webサービス・インターフェイスを開発して、COMインターフェイスを通してバックエンドでInterixアプリケーションを呼び出すようにすれば、UNIXカスタム・アプリケーションをWebサービスとして公開することも可能である。

InterixアプリケーションのCOMラッパを使って、Webサービス・インターフェイスを実装する
前述したCOMラッパがあれば、Win32アプリケーションからInterixプロセスをCOMオブジェクトとして扱えることから、その気になれば、Visual Studio .NETを使って最新のWebサービス・インターフェイスを実装することも可能である。

シェル環境、UNIXコマンド/ユーティティ環境

 SFU 3.0では、Interix向けのksh(Kornシェル)とcsh(Cシェル)のコマンドシェルの両方がサポートされる。従来のSFU 2.0でも互換シェルはサポートされていたが、シェル・スクリプトからのファイルシステムへのアクセスでは、Windowsのドライブ文字を指定しなければならなかった。例えばSFU 2.0では、使用中のユーザーに対するbuild.kshファイルを次のようにドライブ文字を使って指定する必要があった。

U:/bin/build.ksh

 これに対しSFU 3.0では、同じファイルを次のように指定できる。

/dev/fs/U/bin/build.ksh

 このようにSFU 3.0では、単一のルート・ファイルシステムとしてパスを指定できるようになり、スクリプトやプログラムの移植性や互換性は大幅に向上した。さらにシンボリック・リンクを使えば、次のように指定することも可能である。

/home/$username/bin/build.ksh

 なおInterixでのシンボリック・リンクは、NTFSファイルシステムに対してだけでなく、NFSのファイルシステムに対してもサポートされるようになった。

 SFU 3.0では、例えばawkやgrep、sed、tr、cut、at、cron、ps、nice、killなど、Interixに対応した350種類を超えるUNIXコマンド/ユーティリティが提供されている。またSFU 3.0にはSDKも同梱されており、ユーザーが自分自身でプログラムを移植したり、新規開発したりできる。このSDKには、1900種類を超えるUNIX API、gccやg++、g77コンパイラに加え、make、rcs、yacc、lex、cc、c89、nm、strip、gbdなどのツールも含まれる。国内でも、これらの開発環境を使って、UNIXソフトウェアのInterix対応が進む可能性がある。

 さらに、Interop Systemsという米国のソフトウェア会社が、UNIXソフトウェアのInterixへの移植や、最新バージョンへの更新などを積極的に行っている。

 SFU 3.0のInterix環境には、Xクライアントは提供されているものの、Xサーバは提供されない。しかしInterop Systems社は、Xサーバ開発で著名なHummingbird社が開発したXサーバをInterix向けにカスタマイズして販売している。

 Interop Systemsが移植したプログラムの一覧ページを見ると、Apacheやautoconf、atk、bash、bison、OpenSSH、PostgreSQLなど、主要なソフトウェアが続々とInterix向けに移植されていることが分かる(emacsもあるが、残念ながらこちらはInterix向けではなく、Win32に移植されたものである。UNIXとSFUの内部的なアーキテクチャの違いから、emacsはそのままでは簡単に移植することができない)。

 Interop Systemsは、日本語環境向けのツール移植も行っている。原稿執筆時点(2002年11月)では、日本語対応版のviが公開されている。

Interixの日本語対応

 米国版のSFU 3.0が発表されたのは2002年5月ごろであるが、日本語版の発売はそれから約半年も遅れることとなった。これは、Interixの日本語化(厳密には東アジアの各国語対応)を行っていたためだ。米国版のSFU 3.0に同梱されるInterixは、国際化対応は考慮されていなかった。このため日本語版では、ロケール・データベース(各国語別の情報をまとめたデータベース)や、ワイド・キャラクタとマルチバイトの変換関数、ロケール設定を行う関数などを新たに用意してInterixに組み込んだ。

 日本語版では、文字コードとしてShift-JIS(コードページ932)とEUC-JPの2種類をサポートする。デフォルトはコードページ932である。各コマンドの実行時に適用されるコードセットは、ロケール設定によって変更される。特にロケール設定を行わなければ、デフォルトのコードページ932が使用される。システム側のロケール対応に加え、コマンド側にもロケール対応が追加されている。例えば米国版SFU 3.0に同梱のgrepは、ロケールなど参照しないが、日本語版に同梱のgrepは、ロケールを参照して処理を行うように改良された。これ以外にも、主要なコマンドについては同様のロケール対応が追加されている(ただしすべてではなく、主要なもののみ対応)。

 ただし、Windows環境やコンソールAPIではEUC-JPはサポートされないので、プログラムからEUC-JPでコンソールに文字を出力すると、文字が化けて表示されてしまう。EUC-JPは、プログラムの内部だけで使うか、標準出力を使わず、EUC-JPをサポートするX対応プログラムなど外部にリダイレクトすることになる。

 なお、オンライン・マニュアルとしては、UNIXでおなじみmanコマンドとWindowsヘルプの双方が利用可能である。ただし、ドキュメント自体は英語のままで、日本語化はされていない。

 後編では、オープン・ソース・プログラムのいくつかを実際にSDKを利用してInterixに移植し、互換性の実際や、移植時の注意点などを探ってみることにする。


 INDEX
  [製品レビュー] 
  Microsoft Windows Services for UNIX 3.0 日本語版
    1.SFUとは何か?
    2.SFU 2.0から3.0へのバージョンアップでの変更点
  3.Interixプロセスと、Win32プロセスのシームレスなプロセス間通信も可能
    4.SFUのインストールとユーザー環境
    5.wgetの移植
    6.bashの移植
 
 製品レビュー


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間