BlueZはなぜトラブルが起きやすいのか?技術的なリスク解説とその解決策

みなさん、はじめまして。東芝情報システムの椎名と申します。メーカーエンジニアの無線化を支援するため、ムセンコネクトの無線化講座で解説記事を掲載させていただくことになりました。
今回は以前も無線化講座で取り上げられている「BlueZ」のトラブル事例や、より詳しい技術的リスクについて解説します。

東芝情報システムについて

東芝情報システム株式会社は、組込み製品向けのハードウェアからソフトウェアにわたる開発・商品・サービスにおいて、『長年積み重ねた豊富な経験と実績』、『高度な技術力と強固な組織力』及び『組込み製品に特化した商品・サービス』により、最適なソリューションを提供することで、お客様のビジネスに貢献いたします。
導入:BlueZ採用によるトラブル事例
現在、Bluetooth通信は車載機器、医療機器、ネットワーク機器、オフィス機器など幅広い分野で利用されています。それらの機器ではBluetoothを利用するためにプロトコルスタックと呼ばれるミドルウェアを使用してBluetooth通信を制御します。広く普及しているプロトコルスタックの中でもLinux系OSで標準搭載されているのがオープンソースソフトウェア(OSS)のBlueZです。
BlueZは標準搭載であり、扱いやすく多くの利用者がいる一方で、認証取得や動作保証に関する課題が多いことがわかっています。Bluetooth機能を使用する製品は必ずBluetooth SIGによる認証を取得しなければいけません。しかしBlueZ自体はBluetooth認証を取得していないため、BlueZを使用して製品開発を行うメーカー独自でBluetooth認証を取得する必要があります。
弊社の顧客の中には製品開発終盤になってからBlueZがBluetooth認証を取得していないことに気づき、慌ててどうやって認証を取得するのか分からず相談に来られることがあります。
また、Bluetooth認証を取得するには使用する機能(プロファイル/プロトコル)に応じてBluetooth SIGで規定された試験を完了させる必要があり、使う機能が多くなればなるほど認証取得に多くのリソースが必要になります。

BlueZはOSカーネルの一部として実装されているため、カーネルバージョンを更新するとBlueZのソースコードも変更される可能性が高いのが現実です。せっかく多くのリソースを投入してBluetooth認証を取得しても、カーネルを更新するたびに再認証が必要になる可能性があります。
また、OSS全般に言えることですが、ソースコードが更新されるとBluetooth機能の動作検証を広範囲でやり直す必要が生じる場合があります。さらに、公開されているBlueZマニュアルは詳細な動作仕様が十分に記載されておらず、バージョンアップの影響範囲を正確に把握することが困難です。とはいえ、カーネルに脆弱性が見つかった場合は更新を避けられず、開発メーカーの負担は大きくなります。
こうした背景から、BlueZ採用による落とし穴に気づかないままトラブルに陥るケースが後を絶ちません。
技術的背景:なぜBlueZは認証に通りにくいのか(技術要因)
BlueZでBluetooth認証を通すことが困難な理由としては2つあります。
1つ目は、Bluetooth認証を通すこと自体に専門的な知識が必要となる点です。
Bluetoothはプロファイルと呼ばれる機能を規定することで異なるメーカーの機器同士でも互換性が担保されることはよく知られていますが、一つのプロファイルはHCI、L2CAP、RFCOMM、ATT、SMなどの下位レイヤーのプロトコルを用いてBluetooth通信を行うため、Bluetooth認証ではプロファイルで使用するプロトコル毎にも試験を実施する必要があります。
プロファイル、プロトコル毎の認証では数十項目~数百項目にわたる試験項目を実施しなければなりません。また、その試験項目はBluetooth SIGで用意された専用のツールを用いて行う必要があるものの、試験仕様どおりに操作をすれば良いというものでもなく、時にはBluetooth仕様を幅広く理解している前提で曖昧な指示を出される場合があります。
このようにBluetooth仕様に関する知識、試験のノウハウがないとBluetooth認証を通すまでに多大な労力が必要になります。

2つ目は、Bluetooth認証を通すためにはBlueZのソフトウェア仕様を把握する必要がある点です。プロトコル単体の試験を実施するためにはBlueZの下位レイヤーにあたるプロトコルを上位アプリケーションから直接制御しなければならず、BlueZのソフトウェア仕様についても詳しく把握しなければなりません。試験仕様を理解するためにはBluetooth SIGのHPから試験仕様書をダウンロードして精読するだけで良いのですが、BlueZのソフトウェア仕様を理解しようとした場合にBlueZのマニュアルは詳細な説明が少ないです。そのためマニュアルだけではソフトウェア仕様を理解することは難しく、直接BlueZのソースコードを見てソフトウェア仕様を理解しなければならないことがあります。
さらにはBluetooth認証で問題が発生した場合(試験が何らかの理由によりPASSしないなど)には、問題原因の解析には経験とBluetooth特有のノウハウが必要になります。そして問題を回避するためにソースコードを改変しなければならない場合、どのように修正すれば良いか判断が難しいことや、修正による影響範囲を把握することができず、動作保証することが難しいといった点も挙げられます。
このようにBlueZでBluetooth認証を通すためには多大なコスト・リソースが必要となるので簡単にBluetooth認証を取得することが難しいのが現実です。

BlueZは万能ではない:BlueZを使用する際のリスク
BlueZはLinux系OSに標準搭載されている点とOSSということで、無料で手軽に利用できるメリットがある一方、Bluetoothの認証を取得していないというデメリットがあります。
カーネルが対応しているBluetoothモジュールとUSB接続して数個のコマンドを実行するだけBlueZを使うとBluetooth制御が簡単にできてしまいます。BlueZを制御するAPIもそれほど複雑でないため、BlueZのAPIに合わせてフィジビリティスタディを行うためのBluetoothアプリケーションを開発することが良くあります。
そのフィジビリティスタディ用に開発したBluetoothアプリケーションをそのまま流用して製品化をしてしまいたいとどうしても考えてしまいますが、量産寸前になってBlueZがBluetooth認証を取得していないことが判明すると今まで開発したアプリケーションが使えず、全て無駄になってしまいます。
また、量産までBluetooth認証を取得していないことに気づかずに製品化してしまうと開発費用が無駄になる以上のリスクを抱える可能性も出てきます。
Bluetooth技術はBluetooth SIGとの間の契約(商標ライセンス/知財使用契約)を遵守する必要があり、そのため必ずBluetooth認証を取得することを考慮して製品開発を行わなければなりません。

このようにBlueZを使用することでソフトの再開発やBluetooth認証取得などで想定よりもコスが上がることやリスクを抱える可能性があります。さらにOSS全般に当てはまることですが、誰かがコミットした修正により既存機能に傷がついてデグレードするリスクも無視できません。BlueZをアップデートする際にはどの部分を更新したか影響範囲などを把握する必要がありますが、上述したように詳細に把握することは難しいことがあるので、この点でも製品を開発する上で懸念事項となります。
またソースコードの取り扱いについても注意が必要です。認証試験をパスしなかった場合や不具合などでBlueZのソースコードを修正した場合には、OSSライセンスがGPLv2 のため修正したソースコードは公開する必要があります。また製品のノウハウも含めて秘匿したい場合にも、OSSを使うことのデメリットについてよく検討していく必要があると思います。
解決策の提示:まとめ (「BlueZは万能ではない」+「認証対応の正しい選択を」)
上述したようにBlueZは気軽に使用できる反面、BlueZの認証取得が多大な労力が必要だということやBlueZを使用することでのリスクがあることを理解していただけたのではないかと思います。
そしてBlueZ自体がOSSだからといって必ずしも製品開発全体でみるとコストが下がるわけでもなく、開発期間も長くなる可能性があります。そのためBlueZを使用するかどうかはBlueZのメリット・デメリットを踏まえて開発する製品に合致するものかどうかをよく考える必要があります。

弊社でBluetoothプロトコルスタックを組み込んだBluetooth SDK(商品名:NetNucleus Bleutooth)を販売しており、このBluetooth SDKをBlueZのかわりにお使いいただくことで上述のようなトラブル事例が発生することなく製品開発を行うことが可能になります。また、弊社のBluetooth SDKはBluetooth認証取得済みの東芝製Bluetoothプロトコルスタックを使用しているため、認証試験は不要です。車載システム、プリンタ、ヘルスケア製品、ネットワーク機器などの幅広い分野で使われており、累計3000万台以上の販売実績があるので安心してご使用いただけます。
そして、Bluetoothを制御するためのアプリケーション開発を行うための様々なAPIを用意しており、簡易的なアプリケーションから細かい制御が必要なアプリケーションまで幅広い用途で使うことが可能です。お客様の製品仕様やBluetoothモジュールの動作仕様に合わせるためのカスタマイズも可能であり、BlueZと比較して低リスクで製品開発を行うことが可能です。さらに東芝独自のリソース管理により起動時に必要なメモリをすべて確保し動的にメモリ使用量が増減しないため、安全に製品設計が行えるのもBlueZにはない魅力となります。サポートに関しても日本人技術者による日本語による対応が可能なので安心して弊社Bluetooth SDKをお使いになっていただけると思います。


BlueZを選択した後で開発終盤になってからBlueZを使用することを断念せざるを得ないようなことにならないよう製品開発前に弊社に相談していただければ、無駄なコストをかけることなく製品開発を行うことができると考えます。
ぜひBluetooth製品を開発する際には気軽にご相談していただければと思います。
※Bluetooth®のワードマークおよびロゴは、Bluetooth SIG, Inc.が所有する登録商標です。
※「NetNucleus」は、 東芝情報システム株式会社の登録商標です。
