組み込みソフトとOSの関係、そして我々技術者の目指す道
アプリケーション、カーネル、ドライバ、組み込み系ソフトウェア、ファームウェアとは
WindowsやUbuntu(Linux)の画面上で操作するWebブラウザ等のアプリケーションをGUI(Graphical User Interface)と呼びます。
これに対して、コマンドを入力してファイルを作ったりするコンパイラ等のアプリケーションをCUI(Character User Interface)と呼びます。
これらを支える基本ソフトウェアをOS(Operation System)と呼び、更にその中核に位置するのがKernel(カーネル)です。
そして、Kernelとハードウェアの間を取り持つソフトウェアをドライバやブートローダと呼びます。
ブートローダは、ハードウェアの起動に必要な処理を実行し、Kernelの起動に必要なデータをメモリに展開し、Kernelの実行に移行するまでの処理を行います。
ドライバは、各種ハードウェアデバイスを制御するモジュールであり、Kernel起動時や、何らかのデバイスを接続したときに実行されます。
基本的に、Kernelの担当範囲はOSを動かす機能のみであり、PCや機械の基本ハードウェアや追加デバイスを制御はドライバが担当します。
さて、ハードディスクやルータ等に入っているソフトウェアをファームウェア(Firmware)と呼びます。
主に、その機械を動かす為にあらかじめ組み込まれているソフトウェアのことを指します。
尚、プログラマブルなハードウェアであるFPGA等に書き込むデータも、ファームウェアと呼ばれる場合があります。
汎用OSの台頭とファームウェアの位置づけ
つい最近までは、携帯電話や家電製品のソフトウェアはまさにファームウェアでした。
しかし2017年現在、Linux等の汎用OSを用いたものが増えており、例えば、OS以下の滅多なことでは変更しない部分を指してファームウェア、OS周辺や機軸ソフトをOS、ユーザが加えたり外したりできるソフトウェアをアプリケーションと呼ぶ、といったケースがみられるようになってきました。
アップデートとそのバージョン表示の都合から、これら全てをひとまとめにするのも、より細かく分けるのも現実的ではない、というメーカの都合も伺えます。
設計する人間から見ると、ハードウェアに関わるソフトウェアはそれに応じた知識と技術が必要なので、ファームウェアもドライバもカーネルも同系統のものです。
一方で、OSその他の基盤の上で、よりユーザのニーズに沿ったものであったり、ネットワークや外部とのつながりが重要なソフトウェアを設計する場合は、各方面に合ったスキルが求められます。
基本的にこのサイトでは、ハードウェア寄りのソフトウェアのことを組込みソフトやファームウェアと呼び、ユーザ寄りのソフトウェアをアプリケーションと呼びます。
我々技術者の目指す道
技術の向上、高度化により、全ての方面を一人でカバーするのは難しい時代になってきました。
その為、開発作業は分担化され、開発者のスキルも専門化する傾向にあります。
しかし、専門家か各々責任を果たせばモノは出来上がるのでしょうか?
完璧なメンバーが揃い、各々が完璧に仕事をこなし、マネージャが完璧に舵をとれば、あるいはできるのかもしれませんが、そんな話は聞いたことがありません。
各々のミスもあれば、担当・専門部分と他方の間を繋ぐ取り決めに漏れや齟齬(そご)があるかもしれません。
そういったときに、いつも担当者だけで問題を解決できるでしょうか?専門知識だけで漏れに気づけるでしょうか?難しいでしょう。
しかし、少しでも分野を超えた知識や経験があれば、解決の一助(いちじょ)となるでしょう。
そう思います。
そして、何より、我々の知識欲と好奇心はそんなハコに収まるようなささやかなものではないはずです。
超えていきましょう。
難しいことではないはずです。
最初の「HelloWorld」の壁に触れたときの手探り感を思えば、分野を隔てる壁など隣の垣根程度でもありません。
でも、不法侵入はいけません。
ちゃんとルールを守りましょう。
ルールを知るためにも、モチベーションを上げるためにも、知識欲を萎えさせてはなりません。
情報を集める手を止めてはなりません。
想像以上に複雑で難しそうな仕様を目にしても、切り崩すことをあきらめてはいけません。
知らないものを避けてはなりません。
まだ、立ち止まるつもりがないのであれば。