TSFはin-process serverである

 MSDNのドキュメントにも書いてあるのだが、TSFにおいて、テキストサービスはin process serverであり、アプリケーションと同一のプロセス空間で動作する。Google Techtalk Tokyoで工藤さんの話を聞いた方には、ATOKはほぼ全部がアプリと同一プロセスで動作してんのにクラッシュしないのはすごい、という話を覚えている人もいるかもしれない。Google日本語入力では変換サーバーが別プロセスだよという主張を裏返せば、他の変換エンジンでは同一プロセスで動いているよ、という事だしね。
 Windows95が出てきたころ、FEPIMEの違いの説明として、FEPはキーボードドライバだけどIMEはプロセスとして動くんだよ、というのを読んだような気がするのだが、実際には、これまでのかな漢字変換エンジンはアプリケーションと同一プロセスで動作していたという事になる。キーボードドライバだと辞書が壊れやすいけどプロセスを分けたら辞書が壊れにくいね、みたいな話を読んだ気もするのだが、Windows時代になって辞書が壊れないようになったのは単独プロセスとして動作するようになったとかそういう理由ではなく、単なる開発者の努力だったのではないか、という気がしてきた。
 そう考えると、一時期Office IMEのユーザ辞書が壊れまくってたのとも符号が取れる。あの時は単にマルチスレッドまわりのバグなのかなーとか思ってたんだけど、マルチプロセスでのファイルロックまわりのバグだったのだろう。マルチスレッドならIOスレッドを一つ用意すればいいけど、マルチプロセスだと書き込み時にファイルロックを取る必要があってプログラミングの難易度が上がるので、ユーザ辞書が壊れやすくなるのも理解できる。
 ちなみにMac OS XではLeopardあたりでIMKitという仕組みが導入され、これは別プロセスで動く仕様になっている。Linuxの場合は…(省略されました)