エンジニアを続けていると、所謂「中の人」になってしまう傾向にあり、世間一般には「不思議」「不可解」なことも、「日常」になってなにも違和感がない、ということもしばしばありますよね。
そんな中で今回と次回で「ミドルウェア、ファームウェアって何?」っと質問されたらなんと答える?というテーマで書いてみようと思います。
■ミドルウェアって何?
上司や非開発職の経理部などから、ミドルウェアって何ですか?と聞かれたことはありませんか?
本記事を書き進んでいくと、意外や意外。なかなか説明が難しいことに気づかされます。
ミドルウェアとは、ググるといろいろな説明が出てきますが、肝は「ミドル」(中間)という言葉でしょう。では、何と何の中間なのか?「OS」と「アプリケーション」の中間、というのが一般的ですね。ここで言う「OS」とは?WindowsやLinuxやVxWorksやITRONなども含むと、その規模や機能は雲泥の差がありますよね。ここで気づくのが、そもそも「中の人」が「ミドルウェア」として表現したい「モノ」も色々あるという事です。更に「アプリケーション」って何ぞや?っという感覚も残ります。Windowsのデスクトップやスマホの画面で、アイコンで表現されておりマウスでダブルクリックすると起動する「アプリ」の事でしょうか?いやいやそれも含んで「アプリケーション」なんでしょうね。
私は、ITRONを中心に活動しておりますので、OSと言えば、タスクやセマフォ、キューなどを機能とするマルチタスクを実現する基本ソフト、と言い切ってしまいます。そしてアプリケーションとは、前の記事(https://qiita.com/Cente_mw/items/09da1194761fc26698ab )でも書いた通り、最終的に制作するソフトウェアで「やりたいこと」を実現する、所謂 Main(メイン)の機能群です。その中間にあるミドルウェアは、ハードウェアデバイスの機能を抽象化するデバイスドライバであったり、特定のプロトコル通信を実現するスタックであったり、データベースであったり、描画モジュールであったり、、、これ自身は自らは何もしない(?)がアプリケーションから呼び出されて、ハードウェアを制御したり、通信機能を司ったり、データ格納を効率化したりという「機能ブロック」と表現できるかもしれません。
長くなりましたね。
では、同じ組み込みの業界に居ても、LinuxやWindowsをターゲットに構築している場合はどうでしょう。これらのOSの中に、先のITRONの例ではミドルウェアに分類された「機能モジュール」はほとんど含まれています。では、この場合のミドルウェアとは何かと言うと、ネットで集めた情報を総合すると、SQLなどのデータベースだったり、Webブラウザの特殊機能であったり、音声認識や画像認識などの機能を言うようです。アプリケーションはここでは不変ですね。
ここまで書いてきましたが、「ミドルウェアって何ですか?」と聞かれたときに、なんと回答すると「誤解」を与えないか?っという所にフォーカスしましょう。
先ほど「ミドル(中間)」だから、、ということで、その左右・上下は何か?を考えると定まらず、そもそもミドルウェア自身の中身もふらふらすることに気づかされます。ですから、組込開発が多様化した現在、ミドルウェアを表現するときに注目するのは「ミドル(中間)」ではない事に気づきます。
ではどのように表現するのが正しいか? 一般の(組込用途ではない)WindowsやLinuxやMacを所謂PCにインスト―ルして使っている一般ユーザが「ミドルウェア」を知らない、「ミドルウェア」という言葉を使わないことを加味するとこんな言い方が良い気がします。
組込ソフト開発では、一般の動作環境と違って、リソース(CPU性能やメモリ量、消費電力等)が限られているため、その組込機器で本当に必要な機能を最低限搭載するという事が必要なのです。ですから、オールインワン的な(一般の)Windowsの様にケーブルをつなげばディスプレイが、USBにメモリを指せばディスク領域が増え、マウスも使え、、、LANにケーブル指せば通信ができ、マイク端子にマイクをつければ音声が入力でき、、、、という「何でも来い!」という状況からのスタートでは無いんです!
場合によっては、OSも無い環境でTCP/IPミドルウェアを動かす場合もあるでしょう。その上で、LAN経由で相手とデータをやり取りする組込ソフトもあるでしょう。そう、OSとアプリケーションの中間と表現したいところですが、OSすらない場合もあるので、「挟まれない」こともあるんです。ミドル(中間)なんですが。
組み込みソフト開発は必要な機能をレゴブロックの様に必要な分だけ組み上げて環境を作って行くんです。その作り上げた環境の上で「アプリケーション」を書いて、機能するソフトとして提供するんです。その環境を作るときに必要なブロック1個1個がミドルウェアなんです。アプリケーションを作るうえで下地として必要な「機能モジュール」がミドルウェアです、、、と言えないでしょうか?
のページでそんなレゴブロックを表現した図があります。冒頭の右側「Centeの場合」をご覧ください。ITRONというOSの上に、それぞれがブロックを組み合わせるようにミドルウェア群が乗っかってます。その上にアプリケーションです。ミドルウェアは、「必要に応じて」積めばよいので、USBが必要ではない場合はUSBは積まなくて良いのです。Linuxの場合、USB機能が不要となって、USBを機能切り出ししてOSから外すことは可能ですが、言葉通り、元々入っているものを削るのです。
私たちがCenteでお付き合いいただいている数千のお客様は、すべて「積み上げ式」のソフトウェア構成で、その積み上げている1個1個がミドルウェアという事になります。
すっきりしたような、すっきりしない様な、、でしょうか?
次回、じゃあファームウェアって何?です。
■今日の閑話
この話題ですが、実際に「ミドルウェア」って何ですか?っと聞かれたのがきっかけで書いてみました。実は実は、何も助走なく答えられるだろうと話し始めたのですが、話していくと「おや?おや?」っと自分が言っている事のつじつまが合わなくなってきてしまって、最初に「この方向だよね」と思っていた説明と違う方向の結論となってしまったのです。(話している間に、答えが変わっていく、、そんな変な説明をしてしまいました。。。)なので、それを反省して、この記事を書いてみました。Cente:
https://www.cente.jp/
お問合せはこちら:
https://www.cente.jp/otoiawase/