ドライバーの不具合でプリンターがハングするとかなんで?&各社のLinux印刷状況ちょろっとまとめ
ご無沙汰しております。
最後のエントリーが入社報告ってのは仮にも技術ブログのつもりなのにどうなんよって話なんですけど、いやー、なんかこう、下書きにはいくつか記事が溜まってるんですが、忙しくなっちゃて時期を逸したり、書くのにエネルギーが必要だったり、なんだりかんだりで放置してます。
んでまあ、Twitter でちょこちょこ書いたネタってもしかして案外公の場で書かれたりしたことってないのかなって思ってまとめておくことにしました。ナウなヤングなら togetter とか使うのかもしれませんが、ぼくはロートルなのでああいうの苦手なんすよ。
プリンターってデータがおかしいぐらいで死ぬもんなの?
きっかけは Ubuntu ユーザーであるところのテラキン (@terakinizers) 先生が「C 社の IJ と Ubuntu との相性が最悪で結局電源ケーブル引きぬいた。なんでこんなことになるの?」的なことを書いてるのに対して「電源ぶっちんは壊れる可能性があるので、だましだまし使うより人に譲って、別の会社の製品を買ったほうがいいと思います」と私が書いたのが最初で、そこらへんはまあ省略して。
@terakinizers 多分コンシューマ機なので電ブチ対策は入ってるとは思いますが、異常処理になるんでメカ制御のバグ踏みそうなのが怖いところですね。一回二回ならともかく恒常的にはやりたくないです。つづく
2012-08-25 09:58:53 via TweetDeck to @terakinizers
@terakinizers 例えばあるデータの塊をプリンタに送るとき、サイズをヘッダにつけたり終わりにマークをつけるとかするわけですけど、例えばデータサイズ計算がバグってすごく巨大な値になってたり、終了マークがロストしてたりすると、プリンタはデータ完了待ちでかたまります。つづく
2012-08-25 10:02:12 via TweetDeck to @terakinizers
@terakinizers 普通はそこでタイムアウトとかするんですけど、インクジェットはコスト制約が厳しいのでファームをエラーケースまで細かく作りこむにはリソースが足りないとかなんか理由があるのかもしれません。あと、細切れのデータをちまちま送り続けられるって可能性もあります。
2012-08-25 10:03:46 via TweetDeck to @terakinizers
ここらへんは当然私が実装を知ってる訳じゃないので一般論です。たとえば USB の場合パケットサイズが固定なので、パケットサイズ未満のデータを送るとそこでデータ転送終了の意味になるって決まりがあるんですが*1、こういうハンドシェイクをタコってるとかの話ですね。今はコスト制約が厳しいから、潤沢にリソースがある PC 側でなんとかできれば、プリンター側は少ないリソースで処理できるようにシステム設計しようってアイディアもあるわけですけど、そういうシステム設計を引く奴というのは大抵 Windows のことしか考えてなくて、もう一回死んでこいよと思うことになるわけで、いや別に C 社さんの実装がそうとかぼくの前職がどうとかは知らないしそういうことではないのですが、さておき、「Windows ならうまくいくんだけど、それ以外の OS の場合はプリンターが元気かどうかをスプールサブシステムが知る手段がないから、なんかの不具合でハンドシェイクが成立しなくなったら終了」なんてことが起きても不思議ではありません。
あと最後にちょっとだけ書いた「細切れのデータをちまちま送り続けられる」というのは、プリンタードライバーなんてものをやってるとときどきぶち当たるイヤな感じのバグで、たとえばユーザーから見ると単純なパターン塗りつぶしなんだけど、なぜかアプリケーションが生成してくるデータは「超巨大なパターンのビットマップをちょこちょこクリッピングしたもの1000個に分割される」とかがあって、これを GS とか Poppler が処理するときに CPU 食いつぶして酷い目にあったりするとか、あるいはプリンターが受け取った巨大なビットマップをメモリに置けなくて死亡するとかですね。特にインクジェットはリソース厳しいからスワップアウトすらできないわけで、メモリに置けないというのは死を意味するです。
Windows の場合は当然こんなタコなデータを吐いてくる奴というのはもうブラリス扱いになってて (Windows 95の頃の花子とか)、ドライバーで抑えこむのがもう定跡化しているのですけど、Linux なんて誰がどんなデータ吐いてくるとかいうノウハウがいまんとこまったく多分なくて、しかも今印刷の中間データ形式を PostScript から PDF に変えてる最中だから中間レイヤーでなにがどうなるとか多分誰も把握できてなくて、そういう問題は起きそうだな、と。
Linux で使うこと前提でプリンターを買うならどれ?
もとベンダーにいた人間からすると、こういうバイヤーズガイド的なことを書くのはあんまり好きじゃないんですけど、その理由はまあ機会があれば書くとして、むしろ「私がプリンターベンダーの動向をみるときにどういうことに着目しているか」を感じてほしいなあと思ってまとめておくことにしました。
ぼくはどこの会社のどの製品が優れているとかそういうことをあまりいいたくはないのだけど、実際問題としてHPがLinuxの印刷に大きく投資しているし、ソフト的に見るとやっぱりよくできているのは事実なんだよね。でも、消耗品で利益を回収しようという姿勢はちょっと露骨だね
ちょっと補足。ソフトの出来うんぬんは、Linux 対応 (HPLIP) だけのことじゃなくて、Web スキャンとか管理画面とか e-Print とかそういうレベルがもう全然違う。事務機器ベンダーの複合機が100万でオプションごってりつけてもことがサラッとできるのがすごい(技術的にすごいというより、企画力とかシステム化とかそういうレベルの話で)。
ただインクの減りが異常に早いのはぼくの B110a という製品がそうなのかなーと思ってたら、どの商品も基本そうみたいですね*2。完全にそういうモデルで考えてる。想像だけど、メカ的な設計寿命とかもあんまり長く見込んでないんじゃないかな? せいぜい1〜2年。壊れたら買い換えてもらえばいいんだから*3。でもそれが行き過ぎちゃうと「インク買うよりプリンター買うほうが安くていいじゃん」ってなっちゃってあんまエコじゃないのが辛いところ。
ブラザーさんは今まさにということならドライバーもちゃんと出てるし商品コンセプトもいい感じなので注目株なんだけど、Linuxサポートにおいてはドライバーを継続的に(旧機種に対しても)リリースすることが大事で、始めるのはともかく継続できるかというのは今後注目したいところ
C社さんが辛いのはまさにここなんだよなあ。ディストロのバージョンアップで印刷出来なくなったりとか事故が多くて、もしかしたらそれはディストロ側のミドルウェア(CUPSそれ自体よりは、多分GSとかPoppler)の不具合なんだけど、それの対応が何ヶ月も放置されるのは辛い
内部のエンジニアは(聞いたわけじゃないけど)多分問題を認識してるし早くリリースしたいと思ってもいるだろうけど、そこはやっぱりいろいろ社内的な理由があるんでしょう。でも、せっかくLinuxサポートを謳っていても、実際そういうふうだとしょぼんぬだよね
ここらへんは私が繰り返し主張している「Linux 対応を謳うならショートサイクルでモノをデリバリーできる仕組みがないとダメ」「Linux 対応を始めるのはカンタンだけど継続は非常に大変」「だから、今このマシンに対応したドライバーがある、使える、ということだけでは判断できない」ってことなんですよね。
最後にサポートの話
正直ベース、今の Linux の市場規模において Linux のドライバーを Windows や OS X のようにサポートするというのはどのベンダーにも無理です。HP だって、日本のサポートに Linux で使ってるって相談したら、「HPLIP プロジェクトにバグレポしてくれ」っていわれたらラッキー、たいていは「は?」といわれて終了かもしれません(推測)。
そんなわけでサポートについても思うところをちょっと書きました。
メーカーが自社でサポートするのはコスト的に無理ゲーなので米OpenPrintingのフォーラム(前のLFサイトのクラック騒ぎで死んだまま復旧してないけど)みたいな互助会が大事だと思ってgoogle group作ったけど、結局実機がない不具合をぼくが追いきれなくて放置状態
米国R社のエンジニアは公式にはサポートしてなかったけど前述OpenPrintingのフォーラムで精力的に質問に答えたりしたって話は過去ブログに書いたけど、そういうサポートの方法もあると思うんだよねー。
説明する前にまずは最高の姿をいえば、やっぱり健全なオープン性を持ったプロジェクトで作られるオープンソースソフトウェアであること、だと思います。で、実はその姿に一番近いところにいるのは、実のところ米国 (というか日本以外) における R 社だと思います。そこらへんの話は d:id:naruoga:20120405:1333637462 の繰り返しになるので省略。
そして次善の姿は、プロジェクトにオープン性は乏しいけれども、オープンソースソフトウェアであり、ディストリビューションに取り込まれていることです。これは HP の HPLIP ですね。サポートについては昔は「FAQ 見て、そこで答えが得られなかったらメールしてね」とか割と酷い感じでしたが、今は Launchpad でバグ管理してるみたいなんで、それはよいことです。
まあ、もちろんどのように各社対応するかというのはベンダーのビジネス判断で我々がどうということもできないんですけど、それならベンダー独立な、OpenPrinting とかその上位組織の Linux Foundation がユーザーフォーラムをもってもいいじゃないかってぼくは思うんですけどね。そしたらディストリビューション横断で知恵を出し合えるし、もしかしたら(日本の会社の閉鎖性を考えると難しいかもしれないけど)ベンダー内の技術者やサポートエンジニアが回答をくれるかもしれない。
そういう場を作ろうと思ってさくっと挫折しちゃったんですが(だめじゃん)、誰かがやるぜおー、というならお手伝いしたいと思うので、考えてくれないかなー。