2012-06-30

Pythonのpymothoaが興味深い

pymothoa - A JIT extension to Python - Google Project Hosting

またPythonの新しい実装かというと、これは少し毛並みが違う。これは、CPythonのコードをそのまま流用している。トリックは、CPythonの出力するASTを、LLVMの中間コードに変換しているのだ。これにより、CPythonのパーサーを改変せずにそのまま使うことで高い互換性を維持しつつ、LLVMによるJIT実行などの恩恵が得られる。

まだまだ制限も多い。しかしもしこれが将来、完全なLLVMへの変換を実現できたとしたら、面白そうだ。

他のPythonでJITによる高速化を図るプロジェクトとしては、すでに実用的な段階に達しているPyPyや、unladen-swallowがある。ただし、PyPyはPython 3への対応がまだ行われておらず、unladen-swallowは、アクティブに開発されていない。

ところで、私の好きな色は青・・・じゃなくて黄アァー!

2012-06-27

xkcd : CIA(クラッキングに対する一般人とコンピューター技術者の反応)

xkcd: CIA

ハッカー集団がCIAのWebサイトを一時停止に追い込む事件が・・・

[一般人の印象]
誰かがCIAのコンピューターに侵入したぞ!!

[コンピューター技術者の印象]
誰かがCIAによって貼られた張り紙をはがしたぞ!!

titleテキスト:
その張り紙というのはCIAの求人ポスターで、地上から10フィートも上に貼られていたのであります! これはつまり、何とハッカー達はハシゴ技術を有しているという事であります! これからの我々は50ドル払って防弾ガラス付きのポスターカバーを使うしかないのでありましょうか。詳しくはCMの後。

普段、私はxkcdのtitle属性はあえて表に出さないが、今回は非常に面白かったので出すことにした。

2012-06-25

ジョージ・オーウェルの1984の冒頭を訳してみた

どうにも最近、C++の参考書をすすめる意欲がわかない。時間を無駄にするよりはと、今日はふと思い立って、1984の冒頭を訳して見ることにした。

ジョージ・オーウェルの1984は、戦時加算の939日と翻訳権六ヶ月延長を考慮しても、すでに著作権が切れている。

第一章

四月の、まぶしくも寒い日のことであった。時刻はついさきほど、十三時を打ったところだ。ウインストン・スミスは、寒さしのぎに顎を懐に埋めながら、ガラス戸を抜けて勝利豪邸に素早く滑り込んだ。だが、舞い上がる土ぼこりの侵入を防ぐほど素早くはなかった。

通路はゆでたキャベツと古びたボロ布マットの臭いがした。通路の先には、カラーのボスターが貼られている。部屋に貼るには大きすぎるポスターが、壁に貼りつけられている。ポスターには、巨大な顔だけが浮かんでいる。一メートル以上はある、年の頃四十五の、黒々とした口ひげをたくわえた、勇ましい男の顔だ。ウインストンは階段に足をかけた。エレベーターは使い物にならない。調子のいい時でさえ、たまにしか動かないのだ。ましてや憎悪週間の準備のために、日中の電力が制限されている最中なのだ。部屋は七階にある。膝を痛めている三十九歳のウインストンは、休み休みゆっくりと階段を登っていった。各階のエレベーターの向かい側には、ポスターの巨大な顔が壁を見つめている。このポスターには仕掛けがしてあり、周囲の人間の動きに合わせて、目が追いかける仕組みになっているのだ。「偉大なる同志は見張っているぞ」とポスターの下部に印刷されていた。

部屋に入ると、何やら銑鉄の生産に関することを読み上げる声がした。声は、右手側の壁一面の曇った鏡のような丸い金属面から発せられていた。ウインストンがスイッチをひねると、声は少し小さくなったものの、依然として聞こえる程度の音量は保たれていた。この望遠画面(テレスクリーン)と呼ばれている装置は、多少の調整はできるものの、完全に止める方法はないのだ。窓に向かうと、党の制服である青い作業服を来た姿は、背景に溶け込んでしまいそうであった。ふさふさとした髪、自然と笑みをふくむ顔、粗悪な石鹸と切れ味の悪いカミソリによって荒れた肌。冬の寒さが終わったのだ。

閉めきった窓越しからでも、外にみる世界は寒々としていた。通りでは、つむじ風がホコリや紙くずを巻き上げ、日が照らしているとはいえ、空は青寒く澄み渡り、世界には色彩というものが欠けていた。ただし、いたるところに貼られているポスターは別だ。黒口ひげの顔は、あらゆる四つ角を見下ろしていた。ちょうど向かいの家の前に貼られている。「偉大なる同志は見張っているぞ」と文字に言う。黒い目がウインストンの目を深く見つめていた。通りをひとつ下ったところで、別のポスターが、片側だけとめられ、風にひるがえされていた。裏側には、単にエイシャとのみ、書かれていた。遠くでヘリコプターが屋根から屋根へと見張りの目を向け、ハエのように浮かび、また急に向きを変えて急ぎ飛び去っていった。あれは警察の巡回で、人民の窓辺を見張っているのだ。巡回は関係がない。思想警察が重要なのだ。

ウインストンの背後では、望遠画面がまだ、銑鉄と、第九回三カ年計画の計画を大幅に上回る実績についてつぶやいていた。望遠画面は、受信と送信を同時に行う。ウインストンが発した音声はすべて、極めて小さなささやき以外は、検出される。しかも、金属面の見える場所にいれば、向こう側に聞こえもすれば見えもするのだ。もちろん、ある瞬間に監視されているかどうかを知るすべはない。いかなる頻度で、あるいはどのような仕組みで、思想警察が回線を監視しているかは、想像に頼る他はない。彼らが全員を常に見張っている可能性だってある。とはいえ、いつなん時でも、彼らは好きな時に回線をつなぐことができるのだ。我々はこのような状態、つまりおよそ発する音声はすべて傍受され、暗闇でなければあらゆる動きは監視されているという状態に慣れなければないのだ。

ウインストンは始終、望遠画面に背中を向けていた。この方が安全だ。とはいえ、もちろん了解しているように、背中ですら雄弁である。一キロ先には、彼の職場である真実省の偉大に白い建物が、地表に生えていた。「これが」と彼はやや不快感をともないながら思考する。これがロンドンだ。第一空除(エアストリップ・ワン)の大都市だ。大洋国(オセアニア)の三番目に人口の多い場所だ。子供の頃の記憶をたどってみる。果たして、ロンドンは常にこんな感じだっただろうか。いま眼の前に見える朽ち果てた十九世紀からある家々が、倒れぬよう裸の木材で支えられ、窓には破れを塞ぐためにダンボールが貼られ、屋根はトタン板で、塀は破れていただろうか。そして爆撃を受けた場所にチリがまい木々が倒れ、爆撃により一掃された場所には、ニワトリ小屋のようにアバラ小屋が立てられていただろうか。だが、無理だ。覚えているわけがない。かろうじて覚えている子供の頃の思い出といえば、なにかぼんやりとしたイメージだけなのだ。

真実省ー新語ではショーシン[1]ーは、目に映る他のものとはひときわ異なっている。巨大なピラミッド型で眩しいほどに白いコンクリート造りで三百メートルの高さにそびえ立つ。ウインストンが今いる場所からでも、見事な字体による党の三つの標語が、くっきりと読める。

戦争とは平和
自由とは奴隷
無知とは力

注:新語は大洋国の公用語である。その構造と語彙については、巻末資料を参照されたし。

話によれば、真実省には地上から数えて三千もの部屋があり、地下にも同様に部屋があるそうだ。ロンドン内には、後三つ、同じ形と大きさの建物がある。周囲から完全に突出していて、勝利豪邸の屋上から、四つの建物がどれも見えるのだ。これは政府を構成する四つの省の大本営である。真実省は、報道と娯楽と教育と芸術が専門である。平和省、これは戦争が専門だ。友愛省は法律と秩序を徹底させる。豊富省、これは経済や物資を取り扱う。新語ではそれぞれ、ショーシン、ショーヘイ、ショーユー、ショーホーとなる。

友愛省は恐ろしい建物である。まず窓が一切ない。ウインストンは友愛省の中に入ったことはなく、ましてやその五百メートル以内に立ち入ったことすらない。用事がなければ立ち入ることのできない場所なのだ。入るには、鉄条網の迷路を抜けて、鋼鉄のドアをくぐり、機関銃の銃眼を抜けなければならない。建物に続く道すら、黒い制服に身を包み警棒で武装したゴリラ顔の警備員が大勢配置されているのだ。

ウインストンはさっと振り返った。望遠画面に向かうときは、顔面を穏やかな楽観的表情にしておくのが望ましい。部屋を横切り、小さな台所に向かう。この時間に省の勤務を抜けてきたため、食堂での昼食は諦めねばならなかったのだ。台所に食物のない事は承知している。黒ずんだパンの塊があるきりだが、これは明日の朝食にとっておかねばならぬのだ。戸棚から無色透明の液体が入ったビンを手にとった。ラベルには、「勝利ジン」とある。中国の米から作られた蒸留酒のような、病的で油のような臭いが鼻につく。ウインストンはコップに一杯分ほど注ぐと、覚悟を決めて、薬のように飲み干した。

たちまちに顔が赤くなり目が乾く。まるでニトロのような効き目、背後から棒で殴られたような衝撃。次の瞬間、喉元の焼け付きが過ぎて、世界が楽しげに見え始めた。「勝利タバコ」と印刷されたタバコの箱から、一本取り出して高々と掲げた。勢い余って、タバコを取り落としてしまった。もう一度挑戦すると、こんどはうまくいったようだ。居間に戻って、望遠画面の左側にある小さな机に座った。机の引き出しから、ペン軸とインク壷と、分厚い無地の自由帳を取り出した。自由帳は赤黒で大理石模様の表紙が付いている。

どういうわけか、居間にある望遠画面の設置場所は、ちょっと変わっているのだ。普通ならば壁の隅に設置され、部屋全体を見渡せるようになっているはずなのだが、なぜか窓の向かいの長い方の壁に設置されている。その隅には、今ウインストンが座っている、くぼんだ小部屋がある。おそらく、この部屋が作られた時には、書斎にでもするつもりだったのだろう。このくぼんだ小部屋に座って、壁に背を向けることで、ウインストンは望遠画面の目視による監視範囲から外れることができる。もちろん、依然として音は聞こえるわけだが、この今の場所にいる限り、見られることはない。この不思議な部屋の配置は、ある事をするのに最適だ。

しかし、この事というのは、引き出しから取り出した自由帳があるからこそ、したくなったのだ。この自由帳は特別に美しい冊子であった。その滑らかな白い紙は経年劣化によりやや黄ばんでいる。このような品物は、もう四十年は製造されていないはずだ。いや、思うにこの冊子はもっと古いはずだ。この冊子は、スラム街の小さな骨董屋の窓に置いてあるのを見つけたのだ。どのスラム街だったのかは覚えていはない。とにかく、なぜだか無性に欲しくなったのである。党員はそのようなどこにでもある店には行くべきではない。それは「自由市場との取引」と呼ばれている行為だ。しかし、この規則はそれほど厳格に守られているわけでもない。というのも、たいてい何か、靴紐なりカミソリなり、他の手段では手に入らない品物があるのだ。彼は素早く通りに目をやると、店に滑りこみ、二ドル五十セントで冊子を買った。その時点では、特に何か目的があって買ったわけではなかった。かばんに入れて、後ろめたさを感じながら帰路についた。たとえ何も書かれていなくとも、このようなものを所有することは恥ずべきことなのだ。

今、彼が使用としている事とは、日記をつけることであった。これは違法ではない。今や法律は存在しないのだから、違法などというものはもとより存在しない。しかし、もし見つかれば、まず死刑か、少なくとも25年の強制労働所送りだ。ウインストンはペン軸にニブを差し込み、油を取るために舐めた。つけペンは、もはや署名にすら滅多に使われることのない、大昔の筆記用具である。つけペンを手に入れるのにも、こっそりと大変な骨折りをしなければならなかった。やはり、このような美しい真白の紙には、インクペンシルではなく、本物のニブがふさわしいと思う。実のところ、手で書くということには全く不慣れであった。ごく短いメモを除けば、およそ文章はすべて話し書き(スピークライト)で書かれているのだ。もちろん、今これから行う事に、話し書きを使うことはできない。ニブをインクに浸して、一瞬たじろいだ。恐怖がからだを駆け抜ける。紙に記述することは揺るがせぬ行為となって残る。小さくつたない字で、彼は書いた。

千九百八十四年、四月四日

彼は背をもたれた。どうしようもない感情がこみ上げてくる。そもそも、今年が千九百八十四年であるかどうか、定かではない。しかし、このぐらいの年であるはずなのだ。というのも、自分は三十九歳であるはずで、自分が生まれたのは、千九百四十四年か千九百四十五年あたりだからだ。しかしもはや、一年や二年ぐらいの日付の誤差は、どうにもならないのだ。

「そもそも」と彼は疑問に思う「一体誰の為に書いているのだ」と。未来の未だ生まれぬ世代のためか。紙に書かれた不確かな日付に思いを巡らし、そして、新語の言葉である「二重思考」に突き当たった。ここに来てはじめて、事の困難さを意識したのだ。どうやって未来に託すのだ。そもそも不可能ではないか。未来が現在を継承するのであれば、この声は届かないだろうし、違ったものになるとすれば、この現在の状況は無意味だ。

しばらく、ぼんやりと紙を眺める。望遠画面は勇ましい軍隊音楽に変わっていた。今、彼が自己を表現する力を失っているという状況は興味深いことであるが、そもそも何をすべきであったかということすら忘れているのは、さらに不思議な事態である。何週間も、彼はこの瞬間のために準備してきたのだ。彼はこの事を為すにあたり、勇気以外には何物も必要ないと考えていた。書くこと自体は簡単だろう。単に、頭の中に長年浮かんできた独白を書きつづればいいだけだろうと。しかし、こうなってみると、独り言すら浮かんでこない。しかも、足の腫物がかゆくて仕方がない。しかしひっかいてはならぬ。前にひっかいたところ、よりひどくなるだけだったからだ。時間のみが過ぎていく。彼は依然として何も書かれていないページを見つめている。かかとの上がかゆくて仕方がない。音楽がやかましい。ジンですこしほろ酔いだ。

急に、何かにとりつかれたかのように、何か自分でもよくわからぬものを書き始めた。小さくつたない手書きの文字がページを埋めていく。大文字に頓着せず、句読点も気にせず、

千九百八十四年、四月四日。きのうのばん、映画いった。ぜんぶ戦争もの。いっこいいのあって、なんかどっかの地中海だかの人間が爆撃されてるやつ。デブが追いかけるヘリから泳いで逃げてるとこが観客に大ウケ、そいつさいしょなんかイルカみたいに水んなかぷかぷかしてて、でそいつヘリの銃座から丸見え、でそのあとすぐそいつ穴だらけ、周り真っ赤で穴から浸水したみたいに沈んでくの、沈むとこ観客に大ウケ拍手喝采。で、子供満載のボート写ってヘリがその上飛んでた。そこにたぶんユダ公だと思うんだけどオバハンが三歳ぐらいのちっちゃな男の子抱きかかえてた。子供怖がって泣いててそれで隠れてるつもりなのかオバハンにしがみついててオバハンは大丈夫だよって腕回してるんだけどでも明らかにオバハンも震えてるのがまるわかり、オバハン自分の腕が防弾仕様みたく子供守ってた。でヘリが二十キロの爆弾投下ピカッと光ってボート粉々。んで、子供の腕が空高く吹っ飛んでくのを撮ったのが流れてたぶんヘリの先にカメラでもつけてたんだろうけど党員席からは大歓声だけど無産者の席の女がわめいててこんなのこどもの前でみせるべきじゃないこどもとかなんとかかんとか警察きて女連れてってまあたぶん大丈夫だろうけど誰も無産者のことなんか気にしないしだいたい無産者というのはいつもいつも

十分な需要があるならば、C++の参考書を書き終わった後に、1984の翻訳に取り掛かって、GFDLの元に販売するというのも面白いかもしれない。

Linuxにおけるマウントの不思議

Linuxのマウントは面白い。

まず、ひとつのデバイスやらファイルを、複数のディレクトリにマウントできる。複数のディレクトリにマウントされても正しく動くようになっている。

マウント先の場所は、既存のディレクトリである。この時、ディレクトリの下には他のディレクトリやファイルがあるかもしれない。そのようなディレクトリにマウントした場合、元々のディレクトリ下にはアクセスできず、マウント先のファイルシステムの中身にアクセスすることになる。ただし、マウントする以前にディレクトリやファイルを開いていたプロセスは、マウント以前のファイルを参照したまま動き続ける。

おなじディレクトリに、複数回マウント先に指定することができる。その場合、後からのマウントが前回のマウント結果を隠す。マウントを解除するとまた現れる。

マウントしたファイルシステム内のディレクトリに、自分自身をマウントすることもできる。たとえば、hogeというディレクトリとhageというファイルが存在するext4でフォーマットされた/dev/sdbを、/mokeにマウントして、/moke/hogeにふたたび/dev/sdbをマウントすることもできる。その場合、hageというファイルは、/moke/hageからも、/moke/hoge/hageからも参照できる。

なんとも奇妙な仕組みだ。

2012-06-23

映画の中のしゃくにさわる事実

24 Most Frustrating Movie Facts Of All Times | Mind Junker

  1. 敵に囲まれて格闘する場合、敵は囲んで脅すだけで、一人づつ戦う。
  2. 恐竜を殺すほど強力な電気フェンスは、八歳児には大して効果がない。
  3. 全てのコンピューターディスクは、ソフトウェアの如何にかかわらず、全てのコンピューター上で動作する。
  4. 女が一人でいるときに不審な物音がした場合、同女は下着姿で確かめに行く
  5. いかに写真が不鮮明であろうとも、拡大と補正によりくっきりとした詳細が得られる
  6. 警察官は性格テストによって、性格の正反対な二人がコンビを組むよう仕向けられている
  7. 道端で踊り始めた場合、周囲の通行人は皆、踊り方を知っている
  8. 寝るために電気を消しても、部屋は少し暗くなるだけで、すべてははっきりと認識可能である
  9. 映画では、あらゆる戦争のあらゆる戦闘に生き残るであろう。ただし、故郷にいる恋人の写真を見せるという失敗をしなければの話だが。
  10. アメリカのすべての電話番号は555から始まる。
  11. 訪問先のビルの真横に車を停めることができる
  12. 映画では、警察署長は一流の刑事の任を解き、あるいは事件解決に48時間しか与えない。
  13. ほぼ全員が、出身にかかわらず英語を話す。外宇宙からやってきた地球にも地球人にもいまだかつて積極せず、あるいは地球というものを知らなかった宇宙人でさえ、英語を話す。
  14. どんなに悪人を倒したと確信しても、後三回ぐらいは起き上がって悪あがきをする。
  15. 警察の捜査中において、必ず一度はストリップクラブを訪れる必要がある。
  16. 映画では、食品をいれた袋には、必ず一本はフランスパンが入っている。
  17. 犬は悪人を見分ける能力を有し、必ず悪人に向かって吠える。
  18. パリのどの窓からでも、エッフェル塔は見える。
  19. セキは、重病の証拠である。
  20. 一度つけた口紅は絶対に落ちない。たとえスキューバダイビング中であろうとも。
  21. 事故にあった車は必ず発火炎上する。
  22. 映画では、すべての建物の通気口は完璧な隠れ場を提供する。誰も通気口を確認せず、また通気口は建物内のあらゆる箇所につながっている。
  23. トイレを利用することはあまりない。利用する場合、たいていすぐに死ぬ。
  24. 全ての時計は秒単位で合っている。

Ubuntuのセキュアブートへの対応

[Phoronix] Ubuntu's Plans To Implement UEFI SecureBoot: No GRUB2

Canonicalは、UbuntuをプレインストールしたOEM品の販売も視野にいれているため、セキュアブートに使う秘密鍵を公開できないことは、GPLv3に抵触するのではないかと考えているそうだ。そのため、セキュアブート環境でのブートローダーは、GRUB2ではなく、Intelのefilinuxを改造して使うことを考えているそうだ。ブートローダーをMS鍵で署名して、そこから先は独自の鍵で署名する。

Fedoraのセキュアブート対応を振り返ると、まずMS鍵で署名された軽量のブートローダーをブートさせ、そのブートローダーから、GRUB 2をブートさせ、そこからLinuxカーネルをブートさせる。ただし、GRUB2は未署名のモジュールを読み込まないようにしておき、Linuxカーネルも未署名のドライバーは読み込まないようにする。

Canonicalは、Fedoraのような軽量ブートローダーという道は取らなかったようだ。

しかし、GPLv3に抵触するというのは解せない。

If you convey an object code work under this section in, or with, or specifically for use in, a User Product, ..., the Corresponding Source conveyed under this section must be accompanied by the Installation Information.

もし、この著作物であるオブジェクトコードを、この条項で定義するユーザープロダクトに、あるいは同梱して配布し、あるいはユーザープロダクトで特別に使うために配布した場合、[中略]、この条項による対応するソースは、インストール情報と共に提供されねばならない。

とある。だから、単にプレインストールのみではなく、MS鍵が同梱されているハードウェアでセキュアブートを使うためのソフトウェアは、すべてこの、「ユーザープロダクトで特別に使うため」に該当するはずだ。したがって、OEM生産によるUbuntuプレインストールかどうかにかかわらず、単にインストールディスクの配布だけでも、この条件には当てはまるはずだ。

さらに、「インストール情報」というのは、

“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

ユーザープロダクトに対する「インストール情報」とは、任意の手法、手続き、認証鍵、あるいは他の情報等で、改変版ソースによる改変版の配布物をユーザープロダクトで実行しするために必要なものである。この情報は、改変されたオブジェクトコードが、改変されたという事実だけで、機能を阻害し、あるいは影響してはならない。

とあるので、Fedoraのように、自前の鍵で署名する方法を提供すれば、十分ではないのか。そもそも、このユーザーブロダクトであるPCでは、セキュアブートを無効にする方法がある。それで十分だという気がしないでもない。

ユーザープロダクトとは、簡単に言えば、利用者に所有権や支配権が、無期限、あるいはある一定期間引き渡される物のことである。この場合はセキュアブートを実装したコンピューター。

ちなみに、GPLv3は、受け取り手により改変版のオブジェクトコードが使用された場合、サポートや保証、アップデートを打ち切っても良いとしている。

2012-06-22

xkcd: 迷宮パズル

xkcd: Labyrinth Puzzle

これなるは迷宮の守護兵なり。一人は必ず嘘をつき、一人は真実を伝え、一人は厄介な質問をした者を突き刺す。

僅かな挙動の変化も重大な影響を与える話

PHP :: Bug #50696 :: number_format when passed a 0 as first function argument, returns null

PHPで、number_format("",0)の戻り値が0ではなくNULLになったので、既存のコードが軒並みぶっ壊れたというバグ報告に対し、そんな変更は些細なことだと回答して、激しい応酬が起こっている。

そのコードは税金の計算に関するものであり、コードの変更には大変な承認やテストが必要であり、何ヶ月もかかる作業となる。。このままではPHP自体をパッチした方が早いなどと言っている。しかし、実行環境であるPHPの実装のパッチが認められるのに、PHPコードの変更の方が手間がかかるとは、不思議である。そもそも、number_formatの第一引数は、floatであるべきなので、文字列を渡すのは最初から間違っているなどという反論も。

HNでも議論されている。

We will try to stop fixing bugs in PHP | Hacker News

jDOSBoxをJavaScriptに移植したJsDOSBox

JavaScript Port of jDosbox

PCとその上で動くDOSのエミューレーターであるDOSBoxのJavaによる実装であるjDOSBoxをJavaScriptに移植したものらしい。

パフォーマンスはあまりよろしくない。

2012-06-21

テキストエディターの感想

GNU+Linux+Xで動くテクストエディターの感想。

GEditは、よくある平凡なGUIのテキストエディターである。一応、有名所のフォーマットのシンタックスハイライトを備えている。しかし、Ubuntu12.04のパッケージにあるものは、なぜかウインドウの再描画に問題がある。

それに、やはりGNU/Linuxを使う上では、vimかemacsのどちらかを使えるべきであると思う。そこで、先日、両エディターを試して見ることにした。

vimは、操作性が変わっていて、複数のモードを備えているが、まあ、すぐになれることができた。

emacsはアボミネーションと呼ぶべき、なんだかよくわからないカオスなものに成り下がっている。私はテキストエディターが欲しいのであって、それ以外の機能はいらないのだ。emacsでは、それ以外の機能が邪魔をする。まともに使うためには、多くの機能を無効化しなければならない。しかし、機能を無効化するには、膨大なドキュメントを読んで、このいらつく機能は一体どのような名称なのかというところから調べなければならない。これはダメだ。

結局、vimを覚えるべきであるとの結論に至った。

AMDはHSAスタックをオープンソース化するのか?

有名なPhoronixのフォーラムに、AMD社員のJohn Bridgemanが興味深い投稿をしている。

AMD Has No Plans To Suspend Catalyst For Linux - Page 2

I wasn't able to get out to AFDS this year so don't know the exact words Phil used (will try to find a video link tomorrow) but if you're familiar with FSA/HSA the announcement was basically about providing the full Linux execution stack (compiler/runtime/kernel drivers) in open source form, except for one commercial third party piece (the C++ parser front end). Slides and abbreviated transcript at :

http://www.slideshare.net/hsafoundat...m-architecture

Slide 30 IIRC. The presentation was basically a "heads up" for developers and ISVs. There was some media coverage but mostly summarized as "will also be available on Linux"

なんとAMDは、LinuxカーネルにおけるHSAの実行スタックを、商用サードパーティのC++パーサーフロントエンドを除いて、公開するというのだ。

スライドをみてみると、HSAのLinuxカーネルドライバも含まれている。

公開されない「商用サードパーティのC++パーサーフロントエンド」というのは、おそらくEDGのことであろう。それ以外には思いつかない。もちろん、標準委員会の誰にも知られることなく継承コンストラクターを実装していた、未公開のハードウェアで動くと自称するC++11コンパイラーなんてのもあったのだが。

もちろん、これは現在のAMDのグラフィックカードの制限ドライバーであるFglrxのオープンソース化ではない。したがって、まだIntelの内蔵グラフィックの方がマシだ。

さらに、AMDはDRMの実装を容易にするために、ARMを内蔵すると発表している。しかも、それをセキュリティ機能であるという誤った営業をしている。そんな企業のプレゼン発表がどこまで信じられるか疑問だ。

2012-06-20

あるエジプト人reditterの革命への感想

AIbrahem comments on Egyptian Military grants itself sweeping powers; effectively military coup.

Redditで、エジプト人を名乗る人間がコメントを書いていて面白い。

今エジプトで力を持っている勢力というのは複数ある。エジプト軍最高評議会、イスラム教徒、若い革命家とリベラル派である。

エジプト軍最高評議会は、ある程度は民主化に歩み寄っているものの、完全ではない。たとえば、エジプト軍最高評議会は、今作られた憲法に、軍の独立性を認めるようないくつかの項目を入れている。軍隊はイスラム教徒、憲法改正論者、また軍隊に戦争を命じる議員や大統領の命令を聞く必要はないことというのがそれだ。エジプト軍最高評議会は、若い革命家とリベラル達を、無政府主義者の烏合の衆であるとみなしている。そのような勢力はイスラム教徒の勢力に負けてしまう。イスラム教徒が権力を持てば、この革命は結果は、イランのような国に逆戻りということになる。

イスラム教徒。軍によって制定された新憲法は宗教の自由を制限するものであると考えている。リベラル派のことは全然信用していない。

若い革命家とリベラル派。自由を求める少数の若者。エジプト軍最高評議会は敵であると考えている。彼らは、まだ革命は終わっておらず、エジプト軍最高評議会は軍事政権の存続を図っていると考えている。イスラム教徒に対しては、それほど強い敵だとはみなしておらず、軍隊を何とかしたあとは、どうとでもなる存在だと考えている。

「座したるエジプト市民」は、この状況を静観している。平均的なエジプト市民は、何よりも安定を望んでいるし、ある程度の信仰があり、立候補して自分の意見を述べる権利が得られるべきだと考えている。

ちなみに、このコメント主は、今回の革命には反対の立場であるという。今の不安定な状況では、イスラム教徒が権力を握る可能性があり、そうなれば未来はイランのようになってしまうだろうと考えているそうだ。

実際、イランは革命が成功した結果、イスラム教徒が民主的に権力をとってしまい、結果として制限の多い宗教的な国に逆戻りしてしまったわけで、そういう実例がある以上、今回の革命は手放しで喜べない。なんだかんだ言っても、ムバラクの30年にも渡る非常事態宣言下で、それなりに安定していたわけだし。

これを考えると、明治政府は世界の平均的な革命に比較して、成功だったわけだが、いったいこの違いはどこから来るのか。

少なくとも、科学技術の発展は、健全で安定した政治とはあまり関係がないように思える。

2012-06-19

ヤマハの歴史と明治政府の音楽教育

ヤマハというとバイクやエンジンを作っている割に、楽器も作っている変な会社だ。ヤマハの社員だった親父は愛社精神あふれる人間で、よくヤマハの歴史の話をする。もともと車とバイク好きが高じてヤマハに入った人間だったので、わからないでもない。ちょっとヤマハの歴史が気になったので、資料を借りてみた。

資料というのは、2005年にヤマハが作って社員に配布していた社史だ。やたらと贅沢な製本をしている。タイトルは、「Times of YAMAHA 挑戦と感動の軌跡」とある。2005年というのは何かと景気が良かったらしい。

まず、山葉寅楠(やまはとらくす)(1851-1916)という人間がいた。この人は天文の家に生まれて、天体観測の機器に囲まれて暮らしていたので、幼くして機械への興味が強かった。

明治維新の後の1871年、長崎に赴いて時計や医療機械の技術を学んだ。その後は、大阪で医療機械の技師をしていたそうだ。

1884年、浜松病院で医療機械が壊れたため、招かれて修理した。しかしどうしたわけか、その後すぐに大阪には戻らず、しばらくは浜松にいて、時計を直したり、おもちゃをつくったりして過ごしていたらしい。

1887年7月15日、浜松尋常小学校でオルガンが壊れたために、山葉寅楠に修理を依頼した。当時のその日の公務日誌には、「本校備付オルガン破損せしにより機械師を招き之を修理せしむ」とある。

山葉寅楠は、オルガンの故障が2本のバネにあると見抜き、交換することで修理した。

ところで、なぜ尋常小学校にオルガンがあるのか。そもそも尋常小学校は、たった1年前の1886年、明治政府は小学校令を出して、全国に共通の尋常小学校を設置した。これは当時の明治政府としては非常によくやったことだ。教育は非常に重要であるし、全国に共通の教育機関を設けるというのは近代国家を作る上で非常に大事だ。その上で、明治政府は音楽教育にも力を入れていた。それも、西洋の音楽を取り入れようと努力していたのだ。今も残る多くの文部省唱歌が作られたことからも力の入れようが分かる。

しかし、日本国内にオルガンを作れるところなどなく、オルガンは輸入していた。役人の給料が2,3円の時代に、輸入オルガンは一台45円もする。相当に高い代物である。この輸入オルガンを各地の尋常小学校に設置したらしい。

ここで気になるのは、サポート体制だ。機械である以上、当然故障が発生する。山葉寅楠に修理の依頼がきた以上、故障を修理する体制が整っていなかったに違いない。一年で浜松のオルガンが故障するぐらいだから、故障は各地で起こっていたはずである。当時の明治政府というものも、よほど見切り発車で物事を進めたとみえる。しかし、全国に尋常小学校を作るのは、当然、早急に行うべき事業であり、そんなこまかいことまで気にして遅らせることはできなかったのだろうし、結果的にうまくいったわけだ。

実際、明治政府は郵便網の構築も行なっている。これは、当時の地方の名主などに命じて、給料も円ではなく米で支払い、仕事に当たらせたらしい。少し前の郵便改革で、事実上の世襲であるとして問題になった特定郵便局は、明治時代に早急に郵便網を構築する必要があった時代には妥当性のあった仕組みなのだ。

さて、オルガンの修理を終えた山葉寅楠は、その仕組みに興味を持ち、自分で作ってみたいと思うようになった。資金は浜松病院の院長である福島豊策に援助してもらい、医療機械やオルガンの修理での協力を受けたカザリ職人の河合喜三郎から仕事場に部屋を貸してもらい、作業にかかった。手作業による加工の困難さと、使っている材料の代替品を探す苦労に悩まされたという。

音を発する金属片のリードは真鍮板を切り、弁は自分で合金したものを1枚ずつヤスリにかけてつくる。鍵盤に張るセルロイドの代わりには、三味線のバチや裁縫用の牛骨へらを磨いて使った。

Times of YAMAHA 挑戦と感動の軌跡 49ページ

1887年9月に、オルガンを完成させた。なんと、オルガンに出会ってから、たったの二ヶ月で複製したというのだ。

さっそく弾かせてみるが、評判が悪い。そこで、東京にある音楽取調所(今の東京芸術大学音楽学部)に持ち込んで審査してもらうことにした。このとき、山葉寅楠と河合喜三郎は、静岡から東京まで、作ったオルガンを天秤棒で担いで、箱根を超えて東京まで人力で持っていったという。

音楽取調所で審査したところ、「調律が不正確で、使用に堪えない」という評価になった。形はオルガンでも、調律がまるでダメだというのだ。山葉寅楠は当初、西洋音楽の音階に関する知識すら持たず、最初のオルガンを作ったから当然の結果だ。しかし、そこで山葉寅楠はあきらめない。調律について質問を浴びせた。その熱意によって、特別に音楽理論や調律の講義を受けることが認められた。

山葉寅楠は東京で一ヶ月みっちりと学んでから浜松に戻った。そして、1887年の年の暮れに、2台目のオルガンを作り上げた。再び音楽取調所に持ち込んだところ、今度は「舶来品に代わり得るオルガン」という高評価を受けた。

それにしてもこの行動力はすごい、7月に初めて目にしたオルガンを、2ヶ月で複製し、不具合が判明すると、1ヶ月で必要な知識である音楽理論や調律を学び、またまた2ヶ月以内に、完動品を作り上げる。早い。

プログラミング言語とおヒゲの相関性

たまに必要になるのでメモ。

Aspect and Subject Oriented programming: Why Microsoft can Blow-Off with C#?

Computer languages and facial hair – take two - Just code - Tamir Khason

不自由な電子書籍でも保存できるよう、法律を変えるべきだ

電子書籍の「オンライン納本」を義務化、改正国会図書館法が成立 -INTERNET Watch

ただし、有償またはDRM付きの電子書籍については、現在、費用補償に関する検討などを行なっていることから、当分の間、国会図書館への送信の義務を免除するとしている。

人類のあらゆる創作物は保存する価値がある。当然、電子書籍も保存されなければならない。しかし、保存にDRMは有害である。なぜか。DRMは電子情報をひとつの記録媒体に縛り付けたり、特定のハードウェアやソフトウェア上でしか利用出来なくしたりするからだ。

電子情報の記録媒体の寿命は短い。これは、現在の多くの記録媒体が、磁気変化によって情報を記録しているからである。記録された磁気変化は、数十年もしないうちに劣化して読めなくなる。したがって、電子情報を正しく保存するには、記録媒体をつねに新しいものに置き換えていかねばならない。光温度湿度を整えた環境に磁気テープやHDDを保管しても、寿命はせいぜい数年しか伸びない。そういう保存は意味がないのだ。正しい電子情報の保存方法とは、日々新しい記録媒体が追加される多数のコンピューター群に、常に物理的に異なる記録媒体に何重にも重複して記録されるように、追加された記録媒体に自動的に書きこんでいくシステムである。DRMはその障害となる。

特定のハードウェアやソフトウェアは、すみやかに消失する。ハードウェアは製造されなくなり、また製造方法も忘却されるし、ソフトウェアもハードウェアや他のソフトウェアの変化に伴って、動かなくなる。NASAの昔の磁気テープは、大半が読めなくなっている。これは磁気情報が劣化しているのではなく、読み込むための専用のハードウェアが残っていないからである。したがって、保存する電子情報は、仕様が公開されている自由なフォーマットで記述されねばならない。いつでも読み込むためのソフトウェアを新たに実装できる状態でなければならない。

DRMのかかった電子書籍は、存在自体が非人道的であり、利用してはならない。

しかし、先にも書いたように、あらゆる創作物は保存する価値がある。法律を変えて、情報の保存のためにDRMを違法にする必要がある。

2012-06-18

なぜLinus TorvaldsはnVidiaを史上最悪の企業だと罵ったのか、字幕と翻訳と解説

とりあえず話題になっていたので、問題の49分からの部分を自力で書き起こした。

Question:

Okay, Ah so short back story. I got myself two years ago. A laptop that had two graphic cards. It had an Intel and an nVidia. It had a famous Optimus chip that was difficult to operate from linux. I saw at the beggining, I was like expecting to get supported at some point. It was kinda difficult at the beggining and full supports came something like half years ago for one project that's on github[Bumblebee-Project/Bumblebee · GitHub] that's working pretty nice.

But what I saw that at some point I was expecting that maybe nVidia would kinda chip-in and do something for it. And they said flat out "No! We're not doing any support". And I was like "We're playing in the same sandbox why can't be nice to each other".

It's like... like... things like this that we cannot have the hardware producers think about the other stuff as well. They're like hard-set-on that you cannot truly think cooperate with them on.

What's your comment on this.

Linus:

Ah, I know exactly what you are talking about. And I'm very happy to say that it's... the exception rather than the rule.

And I'm also happy to very publicly point out that nVidia has been one of the worst troubled spot we've had with hardware manufactureres. And that is really sad. Because the nVidia tries to sell chips. A lot of chips into the Android market. And nVidia has been the single worst company we'd ever dealt with.

So nVidia! Fuck you! [Linus shows the finger to the camera]

[audience laughs and applauds]

翻訳

質問:

なんと言いますか。二年前、ふたつのグラフィックカードが載っているノートPCを持ってまして。IntelとnVidiaが入っていたんです。有名なOptimusというものでして、当時、Linux上で動作させるのに問題がありました。最初それをみて、私は、いずれサポートされるだろうと思っていたのです。結構難しくて、完全なサポートは、半年ぐらい前にようやく、あるGithub上のプロジェクト[Bumblebee-Project/Bumblebee · GitHub]で、まともに動くものがやっとできたんです。

でも、nVidiaがちょっとは協力するべきだと思うんですよね。nVidiaは全面的に、「弊社は一切協力しない」という態度だったんです。

で、私は「なんでもうちょっと優しくなれないのか」と思ったわけです。

この調子では、優しいハードウェア製造会社なんて存在しないのではないかと。彼らは凝り固まった考え方をしていて、全然協力的じゃないのです。

このことに対してどう思われますか。

Linus:

ああ、言いたいことはよく分かるよ。幸い、それは、唯一の例外みたいなもんだよ。私は声を大にして言うけどね、nVidiaはLinuxにとって一番厄介なハードウェア製造者だね。

これは非常に残念なことだと思うよ。だって、nVidiaはAndroid市場に対して、大量にチップを売ろうとしているんだから。nVidiaはLinuxにとって最悪だね。

nVidia、ファックユー![Linus、カメラに向かって中指を突き立てる]

[聴衆には大受け]

色々と考えたが、原文での、「我々にとって最悪」の「我々」とは、Linuxカーネルのことであると思うので、そのように訳した。

Linus Torvaldsがこのように言うのは、nVidiaは、ハードウェアの詳細を一切明かさないからだ。そのため、Linuxカーネルでサポートできない。ドライバーを書く能力がある者はいるが、どうやってnVidiaのハードウェアを操作するのかわからないので、書けないのだ。自由なソフトウェアによるnVidiaのGPUのドライバーであるNouvaeuは、解析結果を元に作られている。このような取り組みに対するnVidiaの態度は、「訴えない」というだけであり、一切協力することはない。

これに比べて、AMDは自社のGPUの情報を多少は出している。ただし、AMDの公式ドライバーは不自由である。

現時点で、一番マシなのはIntelのIvy Bridgeの内蔵GPUだろう。Intelは公式に自由なソフトウェアによるドライバーを出していて、積極的にLinuxカーネルに貢献している。

ただ、nVidiaの不自由なドライバーは、Windows版のドライバーと遜色ない出来で、それなりに安定していて、パフォーマンスも申し分ない。これがAMDとなると、まず新製品がLinux用ドライバーでサポートされるのに何ヶ月もかかり、5年ぐらい前の製品でも平気でドライバーサポートが打ち切られたりする。

もちろん、不自由なソフトウェアは非人道的なので、nVidiaがクソであることに変わりはないが。

追記:聞き取れなかった部分、改めて聞きなおしてみると、"on Github"と言っているようだ。なぜ昨日は聞き取れなかったのだろう。

ちなみに、このGithub上のプロジェクトというのは、Bumblebee-Project/Bumblebee · GitHubのことだ。

追記2: nVidiaの営業が、邪悪な制限されたバイナリブロブの言い訳をしている。[Phoronix] NVIDIA PR Responds To Torvalds' Harsh Words

二重思想の危険性

嘘か誠かはわからないが、ちょうど興味深い話題がある。

児童ポルノ法が私に及ぼした実害と、今後増えると予想される家宅捜索 - seraphyの日記

「P2Pは?」と問われたので、「ファイル共有ですよね? やりませんよ。」と答えると逆に真顔で「どうしてP2Pをやらないのですか?」と尋ね返されてしまって逆に困惑してしてしまいました。

実に清々しいまでの二重思想の使用だ。peer-to-peerとは、単に一対一の接続を意味する用語だ。これ自体は、ファイル共有という意味はない。ただ、一部のファイル共有に用いられるソフトウェアのプロトコルが、peer-to-peerの呼ばれるような仕組みなっているだけだ。そもそも、P2Pといったところで、古典的な多数のクライアントと少数のサーバーより、さらに一対一を重視した通信方法が、流行語としてpeer-to-peerと呼ばれているだけの話である。それ自体には何の意味もない。たとえば、スポーツ系オンラインFPSゲームに用いられるプロトコルは、とっくの昔にP2Pだった

したがって、P2Pをファイル共有という意味で用いるのは、ジョージ・オーウェルが1984年の中で描いた、二重思考である。二重思考は実に都合がいい。なぜならば、言葉の意味を曖昧にし、合法とも違法とも取れる状態にするからである。この曖昧性は、全体主義者には実に都合がいい。このような曖昧な言葉を使うことによって、厳密な思考が行えなくなる。さらに、思想犯罪を取り締まる際にも、合法とも違法とも取れる言葉があることは都合がいい。なぜならば、二重思考によって、あらゆる言葉は違法となりうるからだ。

我々は、このような二重思考を避けなければならない。二重思考を受け入れると、我々は思想の自由を失う。戦争とは平和である。自由とは奴隷である。無知は力である。

2012-06-16

我が国における二重思考の徹底ぶりはすさまじい

ジョージ・オーウェルの表した1984年では、二重思考が行われている。この世界では、主人公のウインストン・スミスは、ビクトリーマンション(勝利豪邸)に住んでいる。

現実のマンション(mansion)というのは、「豪邸」という意味である。あまりにも家が大きく、維持管理に人を何人も雇わなければならないような豪邸だ。専用の運転手が運転する車で屋敷に入ったら、使用人が総出で出迎えるような、そんな豪邸だ。

一方、ウインストン・スミスのすむ、勝利豪邸(ビクトリーマンション)は古臭くみすぼらしい集合住宅で、壁はひび割れ、窓はダンボール貼り、通路は茹でたキャベツと古びたボロ布マットの臭いがする。そんな集合住宅だ。エレベーターは動かない。機械自体がオンボロなこともあるし、憎悪週間に向けた準備のために、日中は電力が遮断されているからだ。そして、いたる所には偉大なる同志の張り紙が貼られている。偉大なる同志の目は周囲を見はるように動き、張り紙には、「偉大なる同志は見張っているぞ」と書いてある。

我が日本国はどうか。我々日本人が、「マンション」と呼んでいるものはどうか。現実世界のマンションだろうか。それとも、ジョージ・オーウェルの描く二重思考の行われている1984年のマンションだろうか。

もちろん、日本におけるマンションは、1984年のマンションだ。これは、我が国が優秀な二重思考の国だからである。

実に、我が国は二重思考が盛んな国である。ゲーム専用機と呼ぶべき機械を消費者と呼び、大量解雇、もしくは、いっぱいクビにすると言うべきところを、再構造化と言う。世の中に、日本ほど二重思考が盛んな国はない。最近では、他人の意思を読み取る超自然的な能力のことを、コミュニケーション能力と呼ぶらしい。

ともかく、いま流行りの二重思考は、「リッピング」である。この言葉は非常に曖昧である。この言葉は、紙を破くときに使うべき言葉である。それが、CDやDVDやブルーレイなどといった、光学ディスクの複製物を作成する際に使われている。このような曖昧で誤った言葉の使用が、今の奇妙な騒動を引き起こしている。

報道に言う。曰く、「著作権法が改正されて、リッピングが違法になった」と。これは誤りである。著作権法が改正されたのは事実だ。違法になったのは、私的利用のために、DVDやブルーレイなどに使われている、CSSやACCSなどの技術的保護手段、すなわちDRMを回避する方法である。

すなわち、これらの技術的保護手段を解析し、非正規の方法で復号化し、あるいは無効化すること。また、その方法を人に教えること。さらに、その方法を行う道具を提供することが違法になる。

そして、私的利用のためということにも注目しなければならない。たとえば、法律の定義による、引用のためならば許されるし、図書館における利用や、障害者のための利用なども許される。単に、私的利用による著作権の制限が制限されるだけである。

これは、いまさら非難しても始まらない。なぜならば、これは単に、著作権に関する世界知的所有権機関条約を、国内法で実装したに過ぎないのだ。すでに実装したはずだったのだが、実装に漏れがあり、DVDなどの場合に正しく適用出来なかった。だから改正したのだ。つまり、本当に非難すべきなのは、著作権に関する世界知的所有権機関条約であり、避難すべき時は、日本がこの条約に加盟した2000年である。この2012年ではない。もはや遅すぎるのだ。

レッシグが言ったように、「俺らが何もしないせいで、奴らが勝ってる」のだ。

そもそも、この条約の定義する技術的保護手段というのは、ちっとも技術的ではない。方法は大きく分けてに種類ある。「コピーしないでね」と明示しておいて、機械はその明示に従うものがひとつ。これは、そのような明示を無視する機械があれば、容易に破ることができる。しかし著作権に関する世界知的所有権機関条約はそれを禁じている。

もうひとつは、技術的に間違った暗号の使い方によるものだ。これは、実際のところ、暗号ではない。私は、偽装化とか、難読化と呼ぶことを推奨している。著作物は秘密の鍵や、秘密の暗号方法で暗号化され、あらかじめ認められた条件で利用する時のみ、機械が復号化する。これは、機械がその条件を無視してしまえば、容易に破ることができる。しかし、著作権に関する世界知的所有権機関条約はそれを禁じている。

ここでの機械とは、利用者の所有する機械である。汎用コンピューターである。しかし、この著作権に関する世界知的所有権機関条約は、利用者が所有していて、利用者の支配下にある汎用コンピューターの動作を、利用者が検証し、改変することを禁止する法である。それゆえ、汎用コンピューターを制限する法である。

たとえば、私のコンピューターで実行されているプログラムがあれば、私は当然、(十分な知識と時間があれば)、そのプログラムの存在を発見し、その動作を検証し、さらにその動作を停止できるべきである。ところが、この法はそれを禁止する。そのプログラムが何をやっているか検証することを禁止し、動作の停止も禁止する。さらに、その情報を他人に教えることを禁止する法である。さらに、プログラムの動作を停止させるプログラムの他人への配布を禁止する法である。つまり、利用者の所有する汎用コンピューターの自由を奪う法である。

ちなみに、CDにはこのような技術的保護手段は使われていないので、私的利用のためであれば複製できる。また、これは私的利用を制限するだけなので、引用などの他の著作権が制限を受ける場合にはかかわらない。しかし、解除プログラムの配布が禁じられている。

これで、読者はことの危険性を認識したであろう。技術的保護手段の回避の禁止というのは、我々の自由を奪うことなのだ。

自由を保つためにはどうすればいいのか。まず、そもそもDVD映画などはボイコットすべきである。技術的保護手段というのは、設計上の欠陥であり、非人道的である。見ない、所有しないというのが、唯一の正しい方法だ。

ちなみに、これはDVDという光学ディスクをボイコットせよと言うことではない。DVDやブルーレイディスクに映画を記録するための規格があり、その規格をボイコットせよということだ。

さらに、自由なソフトウェアのみを使うべきである。不自由なソフトウェアは利用者の自由を制限するものであり、その存在自体が非人道的である。もし、読者がWindowsとかMacなどという不自由なOSを使っているならば、今すぐ改めるべきだ。自由なOSの候補としては、GNU/LinuxやFreeBSDなどがある。今私は、この文章をGNU/Linuxで書いている。至って快適であり、まったく不便なことはない。いますぐGNU/Linuxをインストールするべきだ。

自由なOSを導入した上に、自由なソフトウェアのみを導入して使うべきである。残念ながら、私はこの点において、まだ十分ではない。何故ならば、私の使っているnVidiaのGPUには、自由なドライバーが存在しないからだ。Nouveauはまだ不安定すぎて使い物にならない。そのため、しかたなくnVidia公式の制限されたバイナリブロブを入れている。これは、仕方がないことだ。金さえあればIvy Bridgeなどの、より自由なGPU環境に移行したいのだが、残念ながら金がない。それに、性能も悪い。

それでも、私の環境は、他のもっと不自由な環境に比べれば、まだ比較的マシであると言える。

2012-06-14

AMDのARM統合は危険だ

AMDはCPUにARMを統合すると発表したが、よくよく調べてみると、これは危険だ。

彼らの宣伝文句は、TrustZoneだからだ。TrustZoneの一番の謳い文句は、DRMとなっている。これは、DRMを実装するための機能である。ハードウェアの所有者に、汎用コンピューターが何をしているのか検証させないための技術である。

たしかに、セキュアな環境は必要だ。たとえば、モダンなOSでは、通常のユーザーは全能の管理者権限を常に使わない。管理者権限が必要な操作をする時のみ、管理者権限を有効にする。

ところか、X環境では、この切り替えはあまりセキュアではない。なぜならば、パスワードを入力中のキー操作は、他のソフトウェアからでも容易に読み込むことができるし、管理者権限で実行中のXのソフトウェアは、一般ユーザー権限で実行中のソフトウェアから操作可能だ。つまり、フェイクのキーストロークなどを送ることもできる。

そのような隔離は分かる。しかし、TrustZoneは、ユーザーから隔離するための機能である。

我々はこのような制限機能が搭載されたハードウェアを使ってはならない。

ああ、AMDがどんどん迷走していく。

Wayland上でX11を動かしている動画

WaylandとそのReference CompositorのWestonでX11ネイティブのソフトウェアを動かしている動画。

AMDがfusionベースのCPUにARMを内蔵?

[Phoronix] AMD To Put An ARM Core On Future Fusion APUs

AMDが将来のfusionベースのCPUにARMを内蔵させるらしい。目的はTrustZoneというセキュリティ機能のためで、いまのところ、x86とARMを混合したコードの実行とかは宣伝していない。いまのところは。

しかし、詳細は知らないのだが、x86に同等の機能を付け加えるのではなく、ARMを持ってくるのはなぜだろうか。

明らかに、IntelもAMDも、トランジスター数の増加を持て余している感がある。

2012-06-13

Haswellではオーディオスタックを統合?

[Phoronix] Support Begins For Intel's New Haswell Audio

LinuxのHaswellサポートのためにIntelが提出したパッチをみると、どうも、Haswellではオーディオスタックが、チップセットではなく、CPUに内蔵されるのではないかと推測される節があるらしい。

まあ、音声の出力は多くのPCにとって重要であるし、その処理にはそれなりに演算力を必要とするし、一部のサウンドカードは汎用的なCPUを載せているそうだし、わからないでもないのだが。

なんだか、プロセスルールの縮小で増えたトランジスター数を持て余しているように感じるのは私だけだろうか。

2012-06-12

アメリカ海軍がミサイルの誘導にLinuxを使うことについて

US Navy buys Linux to guide drone fleet (The Register) [LWN.net]

アメリカ海軍は、ミサイルの誘導にLinuxを使うことを発表した。

US Navy buys Linux to guide drone fleet • The Register

Linuxは、GPLv2というライセンスで公開されている。さて、このニュースに対し、面白い意見を吐いた者がいる。

思うに、弾頭へのGPLコードの使用は、興味深い事態を引き起こすのではあるまいか。

今、誰かがあなたに巡航ミサイルを発射したとして、その巡航ミサイルにはGPLコンポーネントが使われていたとする。

さらに、そのミサイルは不発に終わったとする。ツイてると思わないかい?

その場合、あなたはGPLソフトウェアの複製物を搭載したデバイスを受け取ったことになる。あなたが、ミサイルを発射した相手の団体に属していない場合、あなたはどこかに申請して、ソフトウェアの複製物を要求できるはずだ。

あなたがこの権利を行使した場合、何が起こるのだろうか。GPLは、発射相手があなたに特殊任務チームを派遣してコードを渡し、程を経ずして暗殺するという行為を禁じてはいない。あなたは権利を使うだろうか? たぶん、特殊任務チームにかかるコストをあなたに請求するのは無理だと思うが、でもそれで事態が変わるとは思わない。[訳注:GPLはソースコードの受け取りに対し、妥当な額の対価を要求することを認めているので、この部分は誤り]

なんだかマンガみたいな展開だ。

ちなみに、実際には、おそらく交戦相手の国の著作権をまともに保護しようという国はいないだろう。著作権保護が働かない以上、おそらくGPLも効力がないに違いない。

ちなみに、合衆国政府も著作権侵害の起こしうるとされているので、やはりベルヌ条約加盟国の著作権は守らなければならないのではないだろうか。

また、発射相手はGPLに準拠するためのソフトウェアのソースコード配布方法として、新しいミサイルにソースコードを搭載して、しかも今度は不発しないようにバグフィクスを加えた上で、再度発射するかもしれない。

NANDの限界

The incredible shrinking NAND: I'm MEELLLLTING • The Register

なかなか面白い。

要約すると、NANDフラッシュには、セルの書き換え可能回数に相当低い限界がある。さらに、容量の問題もある。容量を増やすには、セルあたりのビット数を増やすのが手っ取り早い。だから、、セルあたり1bitのsingle level cell (SLC)から、2bitのMLCになり、3bitのTLCもある。

ところが、書き換え可能回数というのは、ビット数を増やすと激減する。3xnmプロセスで製造されているSLCのNANDは、まあ10000回ぐらいは書き換えられたが、MLCだと5000回に落ちる。TLCだと1250回だ。2xnmプロセスのTLCは、750回ぐらいしか書き換えられないのではないかと推測されている。じゃあ1xnmはどうなるのか。500回以下か?

NANDフラッシュの書き換え可能回数の問題は、コントローラー側で対処してきた。書き込みをできるだけ削減し、また書きこむセルを均等に散らして、特定のセルに書き換えが集中しないようにするなどの工夫だ。しかし、いくら何でも、500回程度しか書き換えられないというのは、限界だ。もはやどうしようもない。

つまり、NANDフラッシュは先が見えている。TLC以上にビット数を増やすことも、プロセスルールを1xnmまで縮小することも、現実的ではない。もうゲームは終わったのだ。

ポストNAND候補に名乗りを上げている技術はいくつかある。どれが主流になるのかはわからないが、NANDフラッシュの時に培ったコントローラー技術が適用できないことだけは確かだ。ある技術は単に要らなくなるかもしれないし、別の技術は、異なる方法を使わなければならないかもしれない。

つまり、ポストNANDの世界では、コントローラー開発の各社とも、同じスタートラインに立つことになる。今まで培ってきた技術は、あまり役に立たないからだ。

なかなかアツい業界だ。

フロッピードライブ8台による演奏

アメリカ合衆国政府曰く、「Megaupload訴えろよ」

U.S. Govt: Megaupload Users Should Sue Megaupload | TorrentFreak

Megauploadの差し押さえの件で、まっとうに使っていたユーザーまでとばっちりをくっている。あるユーザーは、自分のデータにアクセスできなくなったとして合衆国政府を訴えた。政府はこれに答えて、「政府はもうサーバーを押収していない、Megauploadを訴えろ」と返答した。

アメリカ政府がMegauploadの資産凍結とサーバーを一時押収した。Megauploadが使っていたサーバーの管理会社であるCarpathiaは、HDDを1000000ドルで引き渡すことに同意しているが、アメリカ政府がこれを差止めている。 Megauploadの資産が凍結されているので、Megauploadはユーザーにデータを渡すための作業ができない。政府はMegauploadを訴えろという。ユーザーのデータは未だに返ってこない。こう書いている間にも、サーバー管理会社Carpathiaは、機材の保管費用だけで一日9000ドル費やしている。

この事の進みようは、全てのオンラインストレージに影響する。この問題が解決できなければ、オンラインストレージに未来はない。

Eric S. RaymondがRchard Stallmanを批判

つい先日、ESRはクローズドソースのもたらす害悪について論じた。

Evaluating the harm from closed source

この記事で、ESRは、クローズドソースのもたらす害悪について認識すべきであり、害悪のない場合は、別にオープンソースではなくても構わないと論じた。たとえば、トースターやエレベーターのファームウェアがクローズドソースであることを、我々はあまり問題視しない。なぜかというと、害悪がないからだ。

ESRは、害悪をいくつかの種類に分けた。

reliability harm
クローズドソースであることにより、あまりにも明白なバグや不具合や、技術的に間違った実装などが、発見されることなに放置されている害悪。
unhackability harm
クローズドソースでは、ソフトウェアを改良することができない害悪。
agency harm
クローズドソースでは、ソースコードにアクセスできる人間に一方的な権利を与えている。これにより、監視や検閲がなされる害悪。国家などの強権をもつ団体の諜報活動など。
lock-in harm
クローズドソースなソフトウェアと、制限フォーマットにより、他の環境への移行を困難にし、囲い込みを行われる害悪。たとえば、ワードプロセッサーとその制限フォーマットなど。
amnesia harm
特定のクローズドソースなソフトウェアや実装された未公開の技術の使用により、ソフトウェアの消失により、ある種の技術やデータを使用する方法が忘却される害悪。たとえば、NASAの昔の磁気テープに記録されたデータは、読み取り装置が非公開の技術を使っているために、もはや読みだすことはできない。磁気記録としてはまだ読み出せるのだが、その情報を解釈する方法が忘れ去られてしまっているのだ。

ESRは、これらの害悪が存在しない場合、別にオープンソースである必要はないと主張した。そして、誰とは言わないが、頭文字がRとMとSで始まる何某は、本来の解決すべき目的から外れて、狂信的な方向に陥ってしまっていると主張した。

その後、RMSはこの記事を読んで、激怒したらしい。ESRはそれについて、追加の記事を書いた。

Why I think RMS is a fanatic, and why that matters.

ESRによると、オープンソースの方が優れていることは当然だが、オープンソースに転向させるにあたって、RMSの方法はふさわしくないのだという。RMSは宗教のような手法をとっている。不自由なソフトウェアを開発し、使う者たちを、邪悪な敵であるとし、自由なソフトウェアのみが唯一の正しい方法であるというものだ。これは、一部の強い信者を得られるかもしれないが、大衆には広まらない。ブッダとかイエスとかマハーヴィーラは成功したと言えるが、ほとんどのこうしたやり方は、一部の盲信家を得るだけに終わる。

第一、オープンソースを推奨すべき相手を、邪悪だとか敵だとか言っていては、拒絶されるだけではないか、と。

私からすると、ESRも十分狂信家に見える。ちなみに、私はRMSに賛成する。全てのソフトウェアは自由であるべきなのだ。不自由なソフトウェアは非人道的である。

2012-06-11

xkcd: プレッシャー

xkcd: Pressures

女「何してるの?」
スイス特許調査員「申請された特許を検証しているんだよ」
女「ええ、でも、それ以外に何かないかしら?」
スイス特許調査員「いや、これが仕事だし」
女「あの、あなたひょっとして、何かとても素晴らしいことを考えていたりしないかしら」
女「ちょっと気になっただけよ」

過去百年に渡り、スイス特許調査員は、言い知れぬプレッシャーにさらされてきた。

Randall Munroeは非常にギークなジョークが好きなので、理解には解説を必要とすることがある。たとえば今日のエピソードだ。これは、アインシュタインは当時、職にあぶれていて、ツテを頼ってスイス特許庁の調査員として働いていた。この時扱っていた特許の多くが、電気信号と電動機械の同期方法に関するものであり、この時に生じた疑問を思考実験した結果、アインシュタインに空間と時間の関連性について気づかせることになった。

さて、今のスイス特許調査員は、なにか素晴らしいことを考えているだろうか。

いまどきの子供に80年代の技術を与えてみる

カナダの学校の子供とあるから、フランス語だと思うのだが。残念ながら言葉がわからないが、反応は見ているだけでも面白い。

レコードがあればスクラッチが発見されるのは必然のようだ。

2012-06-10

検閲のためのHTTPステータスコードの必要性

There is no HTTP code for censorship (but perhaps there should be) | Terence Eden has a Blog An HTTP Status Code For Censorship? - Slashdot

イギリスでは、ISPはThe Pirate Bay(世界最大のBitTorrent用マグネットリンクサイト)をブロックするように命令されている。あるISPは、ユーザーに検閲されているのを伝えるために、HTTP 403 Forbiddenを使っているようだ。しかし、これは定義上、間違ってる。なぜならば、HTTPのステータスコード4xxxは、クライアントがエラーな状態にあるかもしれない状況を示すためにあるからだ。また、サーバー側が要求を理解しているが、その処理を拒否した時にも使われる。

単に中継を行うISPが4xxを使うのは、どうもおかしい。それに、既存のステータスコードは、検閲の場合に使われることを想定していない。やはり、検閲が行われていることを示すステータスコードが必要である。

では、何番台のステータスコードがふさわしいのか。

1xxは、要求を受け付けて処理中であるときに使われるステータスコードであり、ユーザーに、確証はできない応答を返すものである。1xxは検閲コードとして使える。

2xxは、クライアントの要求の受付や処理が成功したことを示す。これはふさわしくない。

3xxは、要求の達成には、ユーザーエージェント側での追加的な行動が必要であることを告げるコードだ。これも、おそらくふさわしくない。まあ、政府やISPに規制をやめろと抗議するのはユーザー側の仕事かもしれないが。

4xxは、クライアント側にエラーがありそうな場合に使われる。マイクロソフトは独自のコード、HTTP 450を、パレンタルコントロールによってブロックされた場合に使っている。

5xxは、サーバー側にエラーがあったり、あるいは処理を達成出来なかった場合に送られる。これは、ISPではなく、Webサイト側のサーバーが検閲をしている場合には、使えるかもしれない。

Slashdotでは、いつものように楽しい議論が行われている。たとえば、Evil Bitを立てるべきだとか、「666 地獄行き」にするべきだ(宗教ISPのみが使うべきであるとのツッコミあり)とか、あるいは、「1984 思想犯罪の検出」にするべきだとか。

2012-06-09

ある関数/メンバー関数がある型の仮引数をもっているかどうかを判定するメタプログラム

そういえば最近、メタプログラムを書いていないので、書いてみることにした。ある関数、もしくはメンバー関数が、ある型の仮引数を持っているかどうかを調べるメタプログラムだ。

template < std::size_t I, typename T, typename TUPLE >
struct has_parameter_type_impl
{
    using type = std::integral_constant< bool,
        std::is_same<T, typename std::tuple_element< I, TUPLE >::type >::value
        || has_parameter_type_impl< I-1, T, TUPLE>::type::value
    > ;
} ;

template < typename T, typename TUPLE>
struct has_parameter_type_impl< 0, T, TUPLE >
{
    using type = std::integral_constant< bool,
        std::is_same<T, typename std::tuple_element< 0, TUPLE >::type >::value
    > ;
} ;

template < typename T, typename Func >
struct has_parameter_type
{ } ;

template < bool B, typename T, typename F >
struct lazy_conditional
    : std::conditional< B, T, F >::type
{ } ;

template < typename T, typename R, typename ... Types >
struct has_parameter_type<T, R (Types...) >
    : lazy_conditional< sizeof...(Types) == 0
        , std::conditional< std::is_same<T, void>::value, std::true_type, std::false_type >
        , has_parameter_type_impl< sizeof...(Types) - 1, T, std::tuple< Types... > >
        >::type
{ } ;



template < typename T, typename R, typename ... Types >
constexpr bool has_param_type( R && ( Types ... ) )
{
    return has_parameter_type<T, R( Types... )>::value ;
}

template < typename T, typename R, typename ... Types >
constexpr bool has_param_type( R (*) ( Types ... ) )
{
    return has_parameter_type<T, R( Types... )>::value ;
}

template < typename T, typename R, typename C, typename ... Types >
constexpr bool has_param_type( R (C::*) ( Types ... ) )
{
    return has_parameter_type<T, R( Types... )>::value ;
}

使い方

struct X
{

    void f( char, double ) { }
} ;

void f( int, char, short ) { }

int main()
{
    std::cout << has_param_type<int>( &f ) << std::endl ; // true
    std::cout << has_param_type<float>( &f ) << std::endl ; // false
    std::cout << has_param_type<double>( &X::f ) << std::endl ; // true
}

残念ながら、メンバー関数をコンパイル時にイテレートする方法がないので、クラス型を与えただけで自動的にメンバー関数を総なめにして判別してくれるメタプログラムは書けない。

N3326: Sequential access to data members and base sub-objectsをメンバー関数にも適用した機能が待ち望まれる。

Magenta、Darwin/BSD互換OS

Somewhere in the middle ...

Magentaは、Linuxカーネルの上に構築された、Darwin/BSD互換OSである。現在、iPhoneOS 5.0との完全なバイナリ互換を実現している。

Magentaはカーネルとユーザー空間のコンポーネントからなる。LibCを除いて、ライブラリはすべて素のDarwin用にコンパイルされている。そのため、Linux用にコンパイルされたライブラリというものはない。LibCが、ユーザーランドとカーネルとのブリッジの役割を果たす。

最終的な目的は、iPhoneOS 1.0のスタックを完全に再現することである。これは、Appleのプロプライエタリなライブラリの代わりになるオープンソースライブラリが多数存在することを考えれば、十分実現可能な目標である。

これは、よっぽど変わったプロジェクトだ。なんでこんなことやってるかって? さあ、俺にもわからん。

どのプラットフォームで動くんだ?
ARMv7でしか動かない。
SDKは何を使えばいい
iPhoneOS5.0 (apple-arm-darwin)
なぜFreeBSDを使わないのか
最初、FreeBSDか、あるいはNetBSDの利用を考えたが、カーネルで提供されている機能や、ハードウェアサポートを考えて、Linuxにした。
iPhone OSのアプリは動く?
動かない。そこまで高級なフレームワークとの互換性は目指していない。ただし、コアOSとしては、100%互換性がある。iPhoneのアプリを走らせたいとかいう理由で興味を持ったのなら、(・∀・)カエレ!!
お前、誰だよ
Christina、組み込みハードウェアにとりつかれた開発者。ARMが大好き。

まあ、なにか実用になるとも思えないが、紹介だけ。

Wine 1.5.6の興味深い変更

WineHQ - Wine Announcement

実は、今のところ、特に実行したい不自由なWindowsで動く不自由なソフトウェアがないのでWineはインストールしていないのだが、Wineの開発状況だけは、たまに観察している。Wine 1.5.6は、かなり興味深い。

The Wine development release 1.5.6 is now available.

What's new in this release (see below for details):
  - Automatic installation of the Mono add-on package.
  - Control panel applet for joysticks.
  - Device bitmap rendering now done through the DIB engine.
  - Support for video rendering through DirectX (VMR-9).
  - First steps towards a D3D shader compiler.
  - Build fixes for DragonFly BSD.
  - Various bug fixes.

まず、デフォルトでmonoも同時にインストールされるようになったことがある。.net frameworkはWindowsで最初からサポートされているライブラリである。ゆえに、実用的なWindowsの互換レイヤーを目指すならば、マネージドコードも実行出来なくてはならない。VMR-9のサポートも興味深い。

一番目をひくのは、D3Dシェーダーコンパイラーをサポートするべく取り組んでいるという事だろう。

WindowsでDirectXのシェーダーがどのように実行されるかというと、まず、HLSLかシェーダーアセンブリでシェーダーを記述し、マイクロソフトの、いわゆるd3d9x_##.dll(##はバージョン番号)でバイトコードにコンパイルする。アセンブリでの記述は最近のDirectXでは、確かサポートされていなかったはずだし、バイトコードは、昔はバイトコードに変換したものをプログラムに同梱していたが、今はプログラムの実行時に動的にコンパイルするようになっていたはずだが、それはこの際問題ではない。GPUのドライバーはこのバイトコードからGPU依存のコードに変換して実行する。もちろん、GPU内部でもひと仕事あるが、それはソフトウェアの外の話だ。

Wineでは、バイトコードを受け取り、GLSLに変換してあとはOpenGLの実装に任せる。Wineでは、d3d9x_##.dllの実装にも取り組んでいる。それには、シェーダーのコンパイラーを実装しなければならない。d3d9x_##.dllを完全に実装できれば、マイクロソフトの再配布ランタイムライブラリをインストールしなくてもすむのだ。

2012-06-08

セキュアブートのセキュリティ

mjg59 | The security of Secure Boot

UEFIのセキュアブートに対する、よくある批判に、実際には全然セキュリティが向上していないんじゃないのか、というものがある。これにはふたつの論法がある。どうせすぐに破られるだろうというものと、署名サービスが一般に提供されていては意味がないというものである。

セキュアブートは破られるか?

イエス。まず確実に破られるだろうね。大金を賭けてもいい。ありそうな方法としては、USBメモリー内の細工されたFATか、プログラム可能なUSBデバイスからUSBスタックに対して未定義動作を引き起こすような攻撃だ。運が良ければ、USBハードウェアがつながれていなくても、EFIのシステムパーティションのファイルシステムを、ブート毎に常に破壊できるようになるだろう。また、バイナリ認証プロセスにバグがある可能性があり、未署名なのにも関わらず認証を通過するようなバイナリを作れるかもしれない。多くのベンダーは、署名されたROM内のコードで未署名のデータを扱うだろうから、誤動作するように攻撃できるだろう。しかし、これらの攻撃の多くは、物理的なアクセスを必要としたり、あるいは特殊なハードウェアが装着されていることが必須である。これらの脆弱性は、発見後ただちに修正される。次第に、攻撃手段は少なくなっていくだろう。

どうも、セキュアブートの設計が、根本的に欠陥であると信じたい人間がいるようだが、それは正しくない。すでによく検証されている暗号技術に基づいているからだ。署名したいバイナリのSHA256ハッシュを計算する。ハッシュを2048bitのRSAキーの半分で暗号化する。バイナリに暗号化されたハッシュを埋め込む。バイナリを実行する際には、ハッシュを公開鍵で復号化する。そして、バイナリのハッシュを計算し、一致するかどうか確かめる。もし一致すれば、このバイナリを署名した人間が誰であれ、自分の信頼する秘密鍵にアクセスできる者であるし、また、バイナリは署名後に改変されていないことが保証できる。

セキュアブートは、CSSやWEPとは違う。セキュアブートは既存の暗号技術を使い、しかも、暗号がどのように機能するかを理解している人間によって設計されている。マイクロソフトがドライバーを署名するのに使う技術と全く同じだ。世間では、この技術を破るより、Realtekからキーを盗み出したほうが簡単である。実装に、まだ誰にも知られていないバグがない限り、攻撃手段は限られている。SHA256の衝突を引き起こす(現在の技術で可能、ただし、この宇宙に存在するよりも桁違いに多い多額の金をつぎ込まねばならない)、もしくは、RSAを破ることである(これはつまり、SSLが破られることを意味する)。もし、誰かがそんなことを実現したとしたら、セキュアブートの他に心配することが山ほどある。

というわけで、結論としてはイエスだ。セキュアブートは破られるだろう。しかし、すぐに修正される。これが何度か起こった後には、それ以上破られることはなくなるだろう。

誰でも署名できるとか、何の意味があるんだ

誰でも99ドル払ってバイナリを署名できる。じゃあ、マルウェア作者だって署名するに決まってるだろ。まずその前に、Verisignの有効なIDを提供して、自分が誰であるかを証明して、バイナリも提供しないといけない。偽造IDをでっち上げても、認証局にはねられる。およそコンピューターに侵入して悪事を働こうとする者は、身元を明かして捕まりたくはないものである。そして、署名システムを使うには、Veerisignが郵送する物理的なスマートカードを使う必要がある。そのため、物理的な住所を知らせなければならない。転送サービスを使ったとしても、やはり追跡は容易だ。現実世界に身元がバレるリスクを抱えるのだ。

まあいいだろう。そういう手続きはしたとして、署名キーを入手してマルウェアを署名したとする。とりあえずいくつかのマシンに感染させた。しかし、いずれ発見される。発見されたら、マイクロソフトは該当キーの無効化を宣言し、OSベンダーは各自のアップデート機構でキー無効化を配信する。マルウェアが無害なものであれば、話はそこで終わりだ。しかし、もしそのマルウェアが銀行の情報を盗むようなものであれば、多くの人間の注目を集める。そのため、キーの所有者にも注目が集まるだろう。つまり、マルウェアはそれ以上多くのコンピューターに感染を広げることができないのだ。

現在の状況では、Windowsがデスクトップのオペレーティングシステムの主流だ。botnetとか銀行情報を盗み出すとかいうことをしたければ、攻撃対象は当然、Windowsに決まっている。今日、Windowsのセキュリティは向上し、そういうことはユーザー空間からやるには、だいぶ難しくなっている。そのため、当然の結果として、マルウェアはカーネル上で走らせたい。最も簡単な方法は、ドライバーとして読み込ませることである。しかし、Windowsは未署名のドライバーを読み込まない。そのため署名ドライバーが必要になる。どうやって入手するのか? 同じく99ドル払ってマイクロソフトの署名サービスにアクセスする。EFIのバイナリを署名するのと同じ機構だ。

署名サービスをつかってWindowsを攻撃するのならば、すでにできたのだ。しかし、現に行われていない。Stuxnetの作者は、自前のキーを用意するよりも、本物のハードウェアベンダーのキーを盗んだほうが手っ取り早いと判断した。だから、理論上は、攻撃者は署名サービスを使って署名を入手できる。しかし、現実の事例で明らかなように、物事はそういうふうには動かないのだ。

結論

セキュアブートは、実装上の欠陥によって破られることはない。一般公開されている署名サービスの存在が、ブート時のマルウェアを増加させる証拠もない。

なるほど。たしかにその通りだ。明らかに国家が背後にあるStuxnetやFlamesでさえ、大真面目に署名しなかった。代わりに、他人のキーを盗みだす方法をとった。署名サービスが一般に解放されていても、セキュリティ上の欠陥にはならない。なぜならば、署名するには身元を証明しなければならず、マルウェア作者としては利用しがたい。身元がバレてもいいとしても、糞真面目に自前のキーで署名しては、すぐに気が付かれて、無効化されてしまう。やはり、他人のキーを盗むのが最も効果的だ。

セキュアブートは、CSSやWEPとは違うというのはどういうことか。WEP(無線LANの暗号)との違いは、十分に強い暗号を利用しているということだろう。CSS(DVDのDRM)やACCS(ブルーレイのDRM)やB-CAS(地デジのDRM)との違いは、ちゃんとした暗号理論に基づいて設計されているということだ。CSSでは、ユーザーは復号化のための秘密鍵を所有している。なぜならば、復号しなければ、DVDは再生できないからだ。ただし、この復号鍵は認証を受けたハードウェアとソフトウェアベンダーにしか知らされず、ハードウェアやソフトウェアは、あらゆる難読化を限りを尽くして、鍵をエンドユーザーから隠そうとしているからだ。これは、技術的に正しくない規格である。暗号ではなく、偽装化とか難読化と呼ぶべきものだ。当然、破られる。

2012-06-07

「トラックすんなよ」ヘッダー、終了のお知らせ(あるいは混沌か)

IE 10's 'Do-Not-Track' Default Dies Quick Death | Threat Level | Wired.com

トラックすんなよ(DO NOT TRACK)ヘッダーは、ユーザーがトラックしてほしくない意思を表明し、サーバーはその意思を尊重するという性善説に則った規格である。もちろん、これは技術的には何の意味もないことは明らかである。イギリスのcookie法と同じぐらい意味がない。トラックして欲しくなければ、トラック可能な情報を提供するべきではない。cookieを無効にし、JavaScriptも無効にし、CSSも無効にし、HTMLに埋め込んで表示可能な画像や動画などのリソース表示も無効にし、ユーザーエージェント名やその他の情報も極力送らないようにするべきである。結局、トラッキングは、ユーザー側の機能に頼っているのだから、ユーザーが機能を提供しなければいい。そうすれば、原則的にはIPアドレスなどの根本的なものしか残らないはずだ。

しかし、広告業界やソーシャル(哂)業界は、表面上の批判をかわすためか、技術的に正しくない規格をでっち上げた。トラックすんなよ(DO NOT TRACK)ヘッダーである。これは、あたかもドアを開け放しておいて、「ドアは開けてありますが、どうか泥棒に入らないでください」という看板を立てておき、泥棒が家主の意思を尊重することを期待するようなものだ。泥棒に性善説を求めても無駄である。

さて、技術者より営業の方が多いマイクロソフトでは、これを見逃す手はない。マイクロソフトは早速マーケティングのために、IE10ではユーザーの意思表示がなくても、デフォルトでトラックすんなよヘッダーを送ると宣伝したはじめた。

これでは、たまったものではない。規格の意味がなくなってしまう(もとから意味がないのだが)。そこで、規格制定者は、規格を変更することにした。それは、「ユーザーエージェントはトラックすんなよヘッダーの規定値を定めてはならない。ユーザーが規定値を定めない場合は、トラックすんなよヘッダーを付加しないのが、規格準拠のユーザーエージェントの実装である」という尊大なものである。つまり、ユーザーが明示的に意思表示していないのだから、デフォルト値などありえない。ユーザーの意思表示ではないのだから、そういう実装のユーザーエージェントの付加するトラックすんなよヘッダーは、無視しても構わない、とこういう算段なのだろう。

まあ、どちらも共倒れしてほしい。技術的に間違っている規格だからだ。P3PやDOCTYPE宣言やベンダープレフィクスと同じ道をたどるだろう。

2012-06-06

バーナーズ=リー「世の中はようやく、インターネットが誰にも属さないことに気がついたようだ」

Berners-Lee: World Finally Realizes Web Belongs To No One | Wired Enterprise | Wired.com

いまこの記事をWebブラウザーで読んでいるのは、サー・ティム・バーナーズ=リーのおかげである。こんなふうにハイパーテキストを使ったり、http://www.wired.com/wiredenterprise/2012/06/sir-tim-berners-lee/のようなインターネット住所を使うが、実際のアドレスは目にしないのも、彼のおかげである。

90年代の初めにスイスのCERNの核研究所で、最初のWebブラウザーが作られようとした時、この英国生まれのバーナーズ=リーは、アドレスは技術者しか見なくてもいいようにシステムを設計した。最初のWebブラウザーは、テキストとハイパーテキストしか表示せず、キーボードで何もタイプしなくてもページからページヘと飛ぶことができた。

「Webの当初の設計では、ユーザーはhttp://を見ることはなかった。単にテキストを読み、リンクをクリックするのだ」とバーナーズ=リーはWiredに語った。「最初のWebブラウザーでは、アドレスを表示するには特別なリンク表示機能を使う必要があった。だから、http://が読みにくいということは、問題にしていなかった。見るべきものではないからだ。」

Webが進化するにつれ、この設計は失われた、少なくとも部分的には。しかし、Webは期待を上回る向上をしたと言わねばならない。2010年、国際電気通信連合によれば、世界人口の三分の一がWebを使い、当初テキストを共有する目的で作られたものが、音声から動画からソフトウェアにいたるまで、あらゆるものを共有する媒体に変革し、ローカルコンピューターの枠を取り去ったのだ。

2004年、エリザベス女王はWebの誕生に寄与した功績として、バーナーズ=リーをナイトに叙した。この年、他の多くの表彰の末、サー・ティムは、Vint CerfやSteve Crockerに並んで、インターネット社会の偉人に列を連ねることになったのだ。

CerfとCrockerは、インターネットの父の長いリストの載っているふたつの名前に過ぎない。世の中は、インターネットがいつ作られたのかについてすら、決着をつけられないのだ。しかし、Webの起源は、一人の人間に帰結できる。1989年3月、ティム・バーナーズ=リーは、CERNで上司に、新しい「情報管理」のシステムの提案を提出した。上司は、「なんだかよくわからないが面白そうだ」といった。そこから数年かけて、Robert CailliauをはじめとしたCERNの研究者達の助けを借りながら、Webの根本となるハイパーテキスト・トランスファー・プロトコル(Hypertext Transfer Protocol)、HTTPが提案として出来上がっていった。

基本的に、バーナーズ=リーは、ハイパーテキストというアイディアを、既存のインターネットの転送コントロールプロトコル(Transfer Control Protocol、TCP)とドメイン名システム(Domain naming System、DNS)に組み合わせたのである。この時、80年代の後半、ハイパーテキストというのは既知のアイディアであった。バーナーズ=リーも言うように、すでにCD-ROMインターフェースなどの他の技術で使われていた。「私は単に、ハイパーテキストというアイディアをTCPとDNSに結びつけて、ジャジャーン、ワールド・ワイド・ウェブ、としただけさ」と彼は過去に書いている

この時、彼が下した設計上の選択は、未だに議題に上がる。二年前、ロンドンのTimesのインタビューを受けた時、彼は当時、ふたつのスラッシュではない設計にして、世の中を「多大な混乱」から救うことできたのだという回想をした。しかし、HTTPアドレスを設計した時、彼は皆のために設計したのではなかった。彼は、既存のコンピューターシステムと、出来る限り親和性の高いものにしようとしていたのだ。

「フォーマットとプロトコルは、既存のものに、できるだけ似せるように設計した」と彼は説明する。HTTPはNNTP、つまりネットワーク・ニュース・トランスファー・プロトコル(Network News Transfer Protocol)によく似たものになるべく設計された。このプロトコルは、インターネット上のニュースグループで使われていた。「目的は、既存のプロトコルを知っている者達をして、「おお、こいつぁ知っているぞ」と言わしめることであったのだ」

Webページを定義するハイパーテキスト・マークアップ・言語(Hypertext Markup Language、HTML)は、既存のマークアップ言語に似通ったものになるよう設計された。特に、CERNで使われていたSGML、標準汎用マークアップ言語(Standard Generalized Markup Language)だ。webアドレスの先頭に来るふたつのスラッシュは、Apollo/Domainというワークステーションのファイルシステムから来ている。「スラッシュがふたつなのは、あるコンピューターシステムでは、「コンピューターの外に出るよ」という意味だった。スラッシュひとつだと、ローカルのファイルシステムを意味する。スラッシュふたつは外を意味したのだ」

しかし、CERN外の研究者がWebブラウザーを実装した時、とくにイリノイ大学の米国立スーパーコンピュータ応用研究所のMarc Andressenの開発したモザイクブラウザーでは、この長いWebアドレスは、エンドユーザーに提示されることになった。ページの上部に、アドレスバーをつけたのだ。

そういうわけで、Webの基本的なところすら、バーナーズ=リーの思い描いたものとは、多少異なることになった。アドレスの名称も異なる。世間では、URL、Uniform resource locatorsと読んでいるが、サー・ティムは、今でもURI、Universal resource identifierと読んだほうが好ましいと考えている。

まあしかし、これはWebが受け入れられた過程のことだ。バーナーズ=リーは、単にWebを創造しただけではなく、創造物は「オープン」、すなわち皆がこの技術を、無料で使えるようになるべきだと決断したのだ。これによりWebは広まったが、創造もしない広まり方もすることになった。

そう、この古めかしいURL、もといURIは、Googleその他が、場合によって一部省略したりもするが、まだ存在するのだ。しかし、まだある。世界人口の三分の一に広がった今、Webは人々を、やや技術者っぽくしている。

バーナーズ=リーは言う。Webが広まっているものの、内部フォーマットとプロトコルがオープンであることや、ひとつの団体がインターネットを支配しないことの重要性が、一般大衆に理解されていないのではないかという懸念だ。しかし近年になり、彼は、世間がこの問題に反応したことに驚き、そして満足した。

そのとおり。彼にはまだ不満がある。特に、モバイル機器にWebを浸透させるため、ローカルなソフトウェアアプリケーションが盛んになっていることだ。「もし、iPhoneのアプリでブラウズしているのであれば、単にURLをつぶやいたりメールしたりすることはできない」と彼は言う「URLがあれば、それはWebの一部である。人類の明文化された情報の一部である。その良し悪しを皆が判断できる。批評することができるし、検索エンジンで見つけることができる」

「スマフォアプリやタブレットアプリにしてしまえば、その上の情報はこの既存の仕組みに載らない。これは損失である。」

同じように、と彼は言う。LinkedlnやFacebookなどのソーシャルネットワークに記録されているほとんどの情報は、情報へのアクセスを制限するように設計されている。「貯蔵庫だ。Facebookはどの画像に自分のかを知っている。しかし、その情報は、Linkedlnにいるときには使えない。同じ画像をLinkedlnの友人やFacebookの家族と同時に共有できないのだ」

とはいえ、今や世の中は、政府やISPがWebへの中立なアクセスを提供することがいかに重要であるかを理解している。「常に、巨大な団体がネットを支配しないかどうか、懸念しなければならない。それが国家であろうと企業であろうと」と彼は言う。「しかし、ここ数年の動きを見るに、一般大衆はこの問題にだいぶ気がついているようだ。私はかつて、これを問題視しているのは私だけで、孤軍奮闘して、「誰もインターネットを支配しないように気をつけろ」と叫んでいるのではないかと危惧していたのだが、どうやらそういうわけではなかったようだ」

たとえば、エジプトのような国家がインターネットアクセスを遮断した時、非難は非常に大きかった。ISPが不必要にコンテンツやトラフィックをブロックしている時も、同じように非難される。「今では、非難の声が聞こえるようになった」と彼は言う。

「URLは変わるべきではない」と彼はいう。「何故ならば、これこそが全てを結びつけるものだからだ」

実際、多くの不自由なスマートフォンやタブレットと称する新興デバイスが、アプリと称して、データへのURLを隠しているのは、憂うべき事態である。URLなくしては、我々は情報へのリンクを簡単に貼ることができない。リンクできない情報は、存在しないも同義なのだ。

LLVMにx32のサポートを追加するパッチ

[LLVMdev] [PATCH] add x32 psABI support
[Phoronix] LLVM/Clang Gains x32 psABI Support

LLVMにもx32のサポートが来るようだ。ベンチマーク結果では、x32はx86やx86-64よりも早くなる傾向にある。これは、x86-64の利点を得つつ、アドレスだけは32bitに抑えることにより達成されている。多くのプログラムは、それほど巨大な仮想アドレス空間を必要としないので、このほうが都合がいいのだ。

PainKillerの続編?

E3 2012: Unreal Engine 3製の『Painkiller Hell & Damnation』が正式発表 - Game*Spark

開発はThe Farm 51だそうだ。

まあ、今のBulletstormとかいう駄作をだしたPeople Can Flyにはろくな人間が残っていないだろうから、むしろ元People Can Flyのいる他のところにまかせたほうがいいのだろう。

The Elder Scrolls Onlineは失敗する

私はめったに予言をしない。何故ならば、私は鬼に笑われたくないからだ。私が予言をするときは、それが確実に実現する場合だけだ。たとえば、id Softwareはこの先も落ちぶれたままだろうとか、任天堂の次世代コンソールは失敗するとか、PainKillerを超えるFPSゲームは未来永劫作れない、などという予言ならする。

このように、未来を語ることに慎重な私ではあるが、ここでひとつ、予言をしようと思う。

The Elder Scrolls Onlineは失敗する。

不自由なソフトウェアだということはさておいても(本当はさておいてはいけないのだが)、2013年に発売される予定のThe Elder Scrollsのオンラインゲームには、絶望しかない。そもそも、The Elder Scrollsである必然性がない。トレイラーをみても、全然心躍るものがない。あんなものを出すという事は、そろそろBethesdaも陰りがみえてきた。

2012-06-05

モラトリアムの終了と匿名文化の終了

2chまとめブログが、にわかにTwitterまとめブログに鞍替えする中、文化の違いによる軋轢が起こっている。

何が問題視されているかというと、まとめブログがtweetの引用に対し、出典元を隠しているということだ。私は、これは悪意あるものではなく、文化の違いによる一時的な混乱であると思う。

かつて、2ch.netでは、暗黙の自由な文化が築かれていた。私はこれを、「モラトリアムによって保護された自由な文化」と呼ぶことにする。このモラトリアムによって保護された自由な文化の元では、著作物は暗黙的にあらゆる利用を許諾されているものと認識されていた。もしくは、そもそも著作権保護は存在しないものと認識されていた。

こう書くと、犯罪文化の響きがするが、そうではない。自由な文化を築くには、明示的な許諾は重荷になるのだ。たとえば2ch.netでは、あるスレの書き込みを別のスレに転載する行為は、許諾なしで転載元も明確に示さず行われていた。時として、転載は改変を含むが、改変を改変であると明示せずに行われていた。特に印象に残る書き込みは、自由な文化による淘汰を生き残り、コピペやAAとして、長く残った。一体誰がオリジナルを書いたのかということを気にする者はいないし、そもそも気にする必要もなかったのだ。なぜならば、2ch.netの著作物は、すべてモラトリアムによって保護された自由な文化の元で発展していったからだ。

こういう文化の元では、わざわざ出典を明記しなくても自由な文化が保証されるので、実名主義になる必要はない。むしろ、匿名の文化が発展していった。わざと出典をぼかす文化が生まれていったのだ。たとえば、ネットゲームのスクリーンショットを2ch.netに転載するときには、たまたま写り込んでしまったキャラクター名は黒塗りして隠すことが礼儀であった。もし、ネットゲームのキャラクター名を2ch.netに出した場合、それは「晒し」と呼ばれ、大変に攻撃的な行為であった。「晒し」は、攻撃を行う意図がない限り、慎むべき大変失礼な行動だったのだ。

もちろん、匿名といっても限りがある。ログを取っていなかったとしても、結局通信には双方のIPアドレスが必要である。VPNを間に挟むことはできる。しかし、それは単に特定を少し難しくするだけのことだ。しかし、現実的には、ログインを強制せず、特定のニックネームの使用も強制せず、IPアドレスから一位に生成されるIDは、日毎に変わる。また、匿名文化により出典はぼかされる。これにより、十分実用的な匿名性が実現できていた。

だから、いま、まとめブログが出典を明記しないのも、この匿名文化が関係している可能性がある。2ちゃんねらーにとって、実名を上げて引用するのは、「晒し」であり、失礼で攻撃的なのだ。出典をぼかすのが、むしろ美徳であり礼儀なのだ。

2ch.netでは、商業主義を忌避する動きもよくあった。しかし、これは商業主義の忌避というより、モラトリアムによって保護された自由な文化の崩壊を恐れてのことであった。たとえば、既存の2ch.netのAAキャラクターが商品化されて、商標が取られた場合、それはモラトリアムによって保護された自由な文化の外に出てしまう。モラトリアムによって保護された自由な文化では、原作者や改変に関わった者の特定ができないので、商業主義者を訴えることもできない。逆に、商業主義者から訴えられた場合、負けてしまう恐れだってあるのだ。なぜならば、オリジナルを作ったという確たる証拠が用意できないからだ。そもそも、裁判の原告、被告となるべき具体的な者すらいない。

しかし、もはや、2ch.netの運営すら、このモラトリアムの暗黙の了解をやめたのだ。すべての書き込みのあらゆる著作権は、2ch.netの運営に譲渡されるようになった。だから、ユーザーも、もはやモラトリアムに頼ることはできない。これからは、法的根拠のある、積極的に自由を保証するライセンスを、明示的に使わなければならない。シェアアライクやコピーレフトといった概念をもつライセンスだ。同時に、匿名になることもできない。なぜならば、モラトリアムによって保護された自由な文化をやめて、法的に保護された自由の文化を求める以上、問題の解決は、個人間や特定の集団内で行われるのではなく、裁判所で行わなければならない。そのとき、オリジナルを確かに自分が作ったという証拠を示せなければ、負けてしまうのだ。

かつての2ちゃんねらーとして、モラトリアムと匿名文化がなくなってしまうのを目の当たりにするのは悲しい。しかし、残念ながら、我々は常に先に進まねばならない。自由な文化の未来のために、モラトリアムから決別しなければならないのだ。

Twitterで引用拒否を主張する愚

まず、「引用」は著作権の制限を受けるものであり、許諾なく行える行為である。

ところで、それ以外にも、Twitterとの契約がある。Twitterによってtweetするということは、Twitterとの契約に同意しなければならない。

Twitter / Twitter Terms of Service

これを読むと、明らかに、Twitterは、ユーザーが投稿されたtweetに対して、ユーザーの投稿を利用するにあたって、著作権の保護を受けるあらゆる権利の許諾を受ける。その許諾は、Twitterの利用にとどまらず、Twitterの協力相手にも提供されるとある。

たとえば、TwitterはRetweetという機能を提供している。当然、ユーザーがTweetするからには、retweetの許諾を与えることに同意しているはずである。Twitterは、Tweetを外部に埋め込むためのHTMLスニペットと、そのHTMLを整形するためのJavaScriptを提供している。当然、ユーザーはこれに許諾を与えることに同意したはずである。さらにTwitterはAPIを提供していて、tweetを、様々な形式に変換した形で得ることを認めている。当然、ユーザーは許諾を与えることに同意したはずである。Twitterへの投稿は、Twitter自身が、内外を問わず自由に利用可能な形で提供している。

もちろん、ユーザーは著作権を保持するのであって、移譲するのではない。そのため、ユーザーは自分の著作物の権利を行使できる。しかし、すでにユーザーはTwitterとその協力相手に、あらゆる著作権上保護される権利の利用許諾を与えているのだから、Twitterとその協力相手に対し、著作権侵害を問うことはできない。なぜならば、すでに自分が許諾を与えたのであるから、侵害している権利などないのだ。一度与えた許諾を翻すことなど出来はしない。もちろん、いますぐTwitterの利用を中止することはできる。しかし、すでに与えた許諾はどうしようもない。

将来、世の中は自由な文化と、不自由な文化とに、断絶するであろう。そのとき、読者はどちら側の陣営に身を置きたいだろうか。

ダウンロード違法化時代のコピーレフトやシェアアライクなライセンス

すでに、許諾なき著作物のダウンロードは違法である。いまここに、違法ダウンロードに罰則を設けようという動きがある。これは自由な文化にどう影響するのか。思うに、法律上効力のある明示的なライセンスによって保証された自由な文化は、これによって勢いを増すのではないかと思う。

著作権は、もともと、複製のための権利として始まった。それも、ただの複製ではなくて、印刷屋による複製を規制するための法として始まったのだ。日本では、活版印刷以前にも版木による大量印刷が主流だったため、活版印刷の技術の登場による、価値観の革新的な変更は、実感しづらい。しかし、大量に印刷できる技術、すなわち用意に複製できる技術の登場は、これまでの常識を覆してしまったのだ。

大量印刷技術の発明以前の西洋では、複製はとても手間のかかる作業であった。本を複製するには、まるで印刷されたかのように精密に文字を書き写す職人の手に頼らなければならなかった。時間もかかる。それが、活字による印刷となり、既存の活字を組み合わせれば、一度に大量に印刷できるようになった。これにより、複製ははるかに容易になった。

複製が容易になると、複製を独占的に保護しようという動きが出てきた。どの印刷屋も、せっかく印刷した本を、他の印刷屋に容易に複製してほしくはなかったからだ。そこで、限定された期間の間、複製の独占的な権利を認める法が作られた。これは最初、印刷屋による複製を規制する法であった。文面上の定義はどうあれ、手書きの複製というのは、黙認されてきた。保護期間は、当初十数年だったのが、次第に伸ばされて、ついに死後70年とか、あるいは公表後95年といった、とんでもなく長い保護期間になった。しかも、保護期間は、将来ますます伸ばされるであろう。つまり、人類は半永久的な著作権の保護期間を制定したのだ。

我々は全盛期の著作物を見るに、他人の著作物の無断利用というのは、極めて多い。これは、そもそも著作権の保護する範囲が、今日ほど拡大されていなかったからだ。そういう無断利用で稼いできた連中が、今著作権の保護を叫ぶとは不思議な話だが、まあ、今更言っても始まらない。

著作権は、著作物のある種の利用を制限するものである。ある種の利用に関して、著作者に与えられる期間を限定した独占的な権利である。ある種の権利とは、複製の権利から発展した。そのため、ほとんどの著作権は、複製の特殊な場合である。たとえば翻案というのは特殊な複製だし、公衆送信も複製の一種である。著作権というのは、複製をする権利であると言える。

しかし、著作権では、複製物を受け取る権利というものはない。あるのは、複製物を譲渡、または映画の場合頒布する権利である。複製物を受け取る権利というものはなかった。あるのは、複製物を与える権利だったからだ。著作権は印刷屋の規制として発展したのだから、複製を行う権利が中心だった。複製を受け取る権利というのは、これまで考えて来なかったし、そもそも本来、考慮の外にあることだったのだ。

確かに、ダウンロードというには、メモリやディスク上に複製を行うものである。ではこれは複製の制限を受けるのか。従来、このような複製は、明確な法律や判例の有無はともかく、フェアユーズとか私的利用の範囲であるとみなされてきた。それが変わるのだ。ダウンロードが複製とみなされ、違法になるのだ。これは拡大解釈され、やがて、複製物を受け取る権利へと発展するだろう。

これからは、複製物を受け取る権利を意識しなければない。複製物を受け取るには、明示的な許諾が必要になる時代が来る。これは、シェアアライクやコピーレフトなライセンスにとって、何を意味するのか。複製物を受け取る際、ライセンスへの同意を迫れるのである。

契約、というのは非常に弱いものである。たしかに、人を契約で縛り付けることはできる。しかし、法律を超えることはできないので、契約に同意した複製物を得た人間が、それを他人に譲渡することは防げない。なぜならば、譲渡権は、許諾を受けて譲渡が行われた後に、その効力がなくなってしまうからだ。これがあるために、我々は一度購入して、つまり著作権者の認める正規の方法で譲渡を受けた複製物を、中古として売ることができる。

シェアアライクやコピーレフトなライセンスがどのように機能しているかというと、決して消え去ったりはしない権利、すなわち複製だとか翻案だとかにかかる権利の許諾を与える契約として機能している。許諾を得るには、契約に同意しなければならない。契約は、派生物が同じライセンスの元に公開されることを要求している。これを「感染」というのは正しくない認識である。なぜならば、他の多くの不自由な著作物でも、許諾には金銭を必要とする。また、ある不自由な著作物は、そもそも複製や翻案の許諾を出さない。シェアアライクやコピーレフトなライセンスを「感染」というのであれば、あらゆる許諾の必要で消失しない権利は、「感染」である。

つまり、シェアライクやコピーレフトなライセンスは、決して消失しない、許諾の必要な権利の許諾と引き換えに、契約への同意を求めるライセンスである。これは、他の不自由で制限ある著作物の利用許諾と、何ら変わらない。違うのは、シェアライクやコピーレフトなライセンスは、派生物の自由を積極的に保証させる契約となっていることだ。

だから、著作権では保護されない利用に関しては、ライセンスは効力を発揮しない。なぜならば、そのような権利が認められていないので、契約に同意せずとも利用できてしまう。その状況では、わざわざ契約してくれる人間などいるわけがないし、法律による明確な許諾の必要のない利用に関しては、契約違反で訴えるのは難しい。何故ならば、利用者はたいてい、「おれはそんな契約に同意していなかったし、そもそも契約文など読んですらいなかったし、利用する際に契約文も提示されなかった」などと主張して、逃げてしまうからである。

しかし、違法ダウンロードは複製とみなされるようになる現代では、事情が違ってくる。ダウンロードは複製であるならば、際限ない許諾が必要になる。複製の権利は消え去ることがないからだ。つまり、積極的に自由を保証するライセンスを、ダウンロード違法化の新時代の法律に合うように設計すれば、ダウンロードする際に契約への同意を求めることができる。

自由な文化の到来だ。

2012-06-04

チンギス・カンは歴史上最も緑化に貢献した人物か?

Was Genghis Khan history's greenest conqueror? | MNN - Mother Nature Network

チンギス・カンは、13世紀から14世紀にかけて、四千万人を殺害した。これにより、農地が放棄され、やがて森林に変わった。ゆえに、チンギス・カンは、歴史上最大の侵略者にして、最も緑化運動に貢献した人物である。

チンギス・カンは歴史上最も多くの人間を殺した責任を持つ人物として非難する向きもあるかもしれないが、単に人類全体でみると、彼は増やす方向にも力を入れている。チンギス・カンの直接の子は非常に多い。

Genghis Khan a Prolific Lover, DNA Data Implies

我々は自由な文化を守るため、2ch.netをボイコットすべきである

2ch.netは、日本のインターネットの歴史を語るのに、決して無視できぬ、大きな存在であった。その発展は如何にしておきたのか。自由な文化である。

2ch.netは、自由な文化だったから、ここまで発展したのだ。たとえばコピペだ。面白いカキコは、コピペという形で、明示的な許諾なく複製され、改変されてきた。たとえばAAだ。シフトJISやUnicode文字と特定のフォントによる絵の表現は、明示的な許諾なく複製、改変されてきた。もし、そうでなかったならば、2ch.netとその文化は、一切発展していないだろう。

これは、2ch内ではなく、2ch外でも行われてきた。特に面白いネットスラングやコピペやAAは、まとめサイトにより、まとめられた。これにより、我々は2chにコピペ改変ネタや秀逸なAAをカキコするさい、まとめサイトからコピペすることで、わざわざガイドライン板のスレを探す手間を省いていた。

実に、自由な文化は、文化の健全な発展のために重要である。しかるに、今の2ch.netや如何。今では、契約により、2ch.netへの書き込みの著作権は、その一切が2ch.netの運営に譲渡されるようになっている。それにも関わらず、2ch.netは、文化を我々に還元していない。2ch.netで閲覧できるレスには、明示的な許諾がない。したがって、あらゆる著作権が保護されている。これは明らかにおかしい。そのレスは2ちゃんねらー全体に属すものであり、2ちゃんねらーに還元されるべきなのだ。すなわち、GFDLやCC-BY-SAのような、自由を積極的に保証するライセンスの元に公開して、自由な文化の発展を促すべきなのだ。

もちろん、自由な文化が、そういう法律上の些細なルールに囚われたくないというのは分かる。しかし、今や、2ch.netの運営が著作権の譲渡契約を明示的に求めている。それは、モラトリアムの終焉を意味するのだ。モラトリアムは中途半端にやめることはできない。全面的にモラトリアムか否かだ。2ch.netの運営方針がモラトリアムをやめた以上、ユーザーも、もはやモラトリアムに依存してはならない。我々は自由を保証する明示的なライセンス(許諾、契約)を積極的に求めなければならない。

故に、自由な文化を愛する漏れら古参の2ちゃんねらーは、2ch.netのボイコットをすべきであるとか言ってみるテスト。いや、藻前ら実際やれ。

現実には、もはやボイコットをするまでもないのだ。何故ならば、インターネットの流行は、もはや2ch.netの外で起きている。2ch.netは、残念ながら旧時代の遺物なのだ。

維年月日、2ちゃんねらー、2ch.netの霊を祭らしむ。嗚呼、昔、インターネットようやく日本に普及するに至るとき、汝能くその掲示板としての勤めを果たせり。スレを立て、コテハンを叩き、哂い、煽り、時に涙す。みんなはさーんの憂き目に遭いしも、UNIX板の同志、通信を圧縮して窮地を救いたり。誰か知らん、ひろゆき自ら自由の文化を損なうに至るとは。汝死して、誰かそのログを拾い、誰か守る。幸い、インターネット発展し、代替サービス、すでに多数あり。驚くことなく、恐るることなく、甘んじて以って路に即け。その丘に帰り、万古にこれ保らかならんことを。尚饗。

インスタンス化による副作用としてのインスタンス化はimmediate contextではない

まさかそんなことはないだろう。それなら以下のコードはコンパイルエラーになってしまうはずではないかと思って試したところ、本当にコンパイルエラーになってしまった。なるほど、たしかに正しい。

template < typename T >
struct X
{
    using type = T ; 
} ;

template < >
struct X<int> { } ;

template < typename T >
struct Y
{
    using type = typename X<T>::type ;
} ;

template < typename T, typename Dummy = typename X<T>::type >
void f(T) {}
void f( short ) { }

template < typename T, typename Dummy = typename Y<T>::type >
void g(T) {}
void g( short ) { }

int main()
{
    f( 0 ) ; // OK
    g( 0 ) ; // Can be Error
}

関数fは、Dummyのsubstitutionに失敗するので、通常の関数が選ばれる。関数gは、クラステンプレートをひとつ挟んでいる。こうすると、クラステンプレートYのインスタンス化は、クラステンプレートXのインスタンス化をもたらす。このインスタンス化は、immediate contextではないので、SFINAEには引っかからず、ill-formedとなる。

なるほど、これは気が付かなかった。

問題は、なんでこうなっているのかということだ。しかも、これがエラーかどうかは、規格上は定められていないのだ。なぜならば、

The evaluation of the substituted types and expressions can result in side effects such as the instantiation of class template specializations and/or function template specializations, the generation of implicitly-defined functions, etc.Such side effects are not in the “immediate context” and can result in the program being ill-formed.

§ 14.8.2 paragraph 8 note.

"can result in the program being ill-formed"となっている。つまり、規格上、エラーでなくても構わないのだ。

SFINAE周りは、だいぶコンパイラーごとの差異が激しかった部分である。C++03までは、ホワイトリスト方式で、エラーとはならない場合を列挙していた。C++11では、これを完全するため、従来のホワイトリストを残しつつ、文字通り、substitutio failure is not an errorを実現するべく、その他の場合もエラーではないとした。

しかし、まさかこんな落とし穴が残ってい用途は思わなかった。これは説明に窮する。もちろん、定義はしっかりしているが、なぜこんなルールになっているのかという疑問が沸く。なぜだ。

議論の場としての媒体

メールと掲示板とIRCは、かつて、インターネット上における主要な議論の場であった。特に、メールでは、メーリングリストやニュースグループなどという、メールを土台にした仕組みもあった。

しかし、今、これらの媒体は、議論の場としては、もはや時代遅れである。

メールは気軽に使えない。仕事のやり取りだとか、ソフトウェアの開発だとか、何かとても真剣な場合でないと、メールはおいそれと使うわけには行かない。もちろん、メールはそのような目的で設計されたのではないが、もはやそうなってしまっている。メールを使うのは、様々な意味で、難しいのだ。

IRCは、もはや一部の昔気質な人間しかやっていない。

掲示板は残っている。しかし、従来の純粋な掲示板は少ない。DiggやRedditやHacker Newsのように、リンク先を提示して議論を開始するか(redditの場合は、別にリンク先は必要ないが)、あるいはStack Overflowのように、質問を提示して議論を開始するかと形になっている。

2ch.netは、私の感覚では、最近衰退しているように思われる。むしろ流行っているのは、2chのまとめサイトだ。2chのまとめサイトは、色々と非難もでているが、事実、2ch.netまとめサイトはもはや2ch.net本体より強い影響力を持っているのではないだろうか。

このブログにはコメントを設置している。しかし、その機能が使われることはまれである。たまに、このブログの記事が注目されることもある。ただし、コメントは別の媒体に書かれる。たとえばTwitterだ。結局、そのほうが簡単だからなのだろう。

Twitterは、議論の場としては成立しているが、多人数による議論の場としては使いづらい。少なくとも、議論の参加者が全員follow/被followの関係にあるのでなければ、参加者が議論を追うのは難しい。しかも、あとで読み返すのが困難である。

それに、検索もしにくい。このブログへのコメントであれば、たとえば私のTwitterのIDである@EzoeRyouだとか、あるいはこのブログのURLの一部、cpplover.blogspotを含むtweetであれば、検索をRSSでフィードすることによって補足できる。しかし、それに漏れたコメントはどうしようもない。それに、昔のtweetを読むのは難しい。

技術の流行を否定するのは無意味だ。しかし、どうも、新しい流行の技術が、既存の技術を完全の凌駕しているわけでもないのは興味深いところだ。

何が言いたいかというと、2ch.netのまとめブログを非難しても、仮にその結果として、まとめブログが死滅したとしても、ユーザーは2ch.netには戻ってこない。もはや時代遅れの媒体が返り咲くことはない。

2012-06-03

FacebookがC++ライブラリを公開したらしい

Folly: The Facebook Open Source Library | Facebook
folly/folly at master · facebook/folly · GitHub

Follyというそうだ。詳しくは調べていない。

聖イグヌ(GNU)シアスの説教

リチャード・ストールマンによる聖イグヌシアスの説教は、多少の差異があるが、概ね同じである。ここでは、一般的な説教を翻訳する。

我こそは聖イグヌ(GNU)シアスである。Emacs教会より派遣さる。我、ここに我が子らのコンピューターを祝福す。

Emacsはそのはじめ、テキストエディターとして始まりしが、多くのユーザーにとりては人生なりき。如何となれば、Emacsを終了することなく、すべての作業を行えるがためなり。ある者、ニュースグループalt.religion.emacsを始めしより、宗教となれり。今日、我々は競合関係にある異教徒のエディターと争えり。また、聖人あり。幸いにして神はなし。神の代わりに、我らはエディターを崇拝す。

Emacs教会の信者となるためには、汝ら戒律を唱えるべし。

曰く、「GNUの他にはシステムなく、Linuxはそのカーネルのひとつに過ぎぬ」と。

汝、ハッカーになりたれば、foobarミツワーなる神聖なる儀式あり。その次第、集いたるハッカーの前に立ち、神聖なるシステムのソースコードを読経するものなり。

また、Emacs処女なるものあり。これは、いまだEmacsに触れざる者のことなり。Emacs処女なる者らに、その処女性を失う機会を提供するは、祝福されたる行いなり。

Emacs教会は、あえて言及せぬ他の宗教にくらぶれば、利点多し。Emacs教会の聖人たらんとするに、非妻帯の戒なし。故に、汝ら信者たらんと欲すれば、すなわち信者たる資格を得る。

されど、汝ら純潔を守るべき事あり。汝ら、もし、邪悪な制限ソフトウェアのインストールされたるコンピューターを所有して支配下に置きし時、かかるコンピューターに、神聖にして完全なる(holy/wholly)自由なオペレーティングシステムをインストールし、その上に自由なるソフトウェアのみをインストールすべし。この誓いを守りて貫き通したれば、いずれ汝ら聖人となり、その頭に光背を頂くに至らん。しかし、これまったく汝ら光背を見つけたればなり。如何となれば、これすでに製造されること絶えてなければなり。

時に、汝ら問いて曰く、「Emacs教会に身を置きながら、viなるテキストエディターを使うことは罪なるか」と。いかにも、vi vi viは獣の数字なるが、自由な実装のviを使いたるときは、罪ならず。そは贖罪なり。

時に、汝ら問いて曰く、「その光背は、まことには古いコンピューターディスクならん」と。これはコンピューターディスクにあらず。我が光背なり。されど、これは前世においてはコンピューターディスクたりし。感謝。

技術の進歩は思ってるより遅い

The Pace of Technology is Slower than You Think

「マジこの記事古すぎだろ。2006年だってよ」。所詮、技術の記事なんか、すぐに使いものにならなくなるといいたいのだろう。でも、技術の進歩は、それほど速くはない。

最新のiOSの開発に使っているObjective-Cに関する最初の本は、1986年に出た。

Perlが出たのは1987年のことで、Pythonは1991年で、Rubyは1995年だ。

いまだに、新品の6502やZ80を買える(Jameco Electronicsによると、Z80は一個で2.49ドル)。Z80プログラミングガイドは1979年に書かれたが、未だに現役で通用する。

C標準ライブラリの知識は、MS-DOS、はじめのSUNワークステーション、Atari ST、Microsoft Windows、iOSと、幅広く役立つ。

コンピューターサイエンスの授業で必ず習うクイックソートアルゴリズムは、1960年にTony Hoareが開発した。

Bill Joyがviを書いたのは1976年。Bram Moolennarがvimを書いたのは1991年で、都合15年たっているが、vimが出てからこのブログ記事が書かれるまで、21年もたっている。

80386命令セットは、1985年に公開されて、次の年に使えるようになったわけだが、いまだに32bitソフトウェア開発では一般的な環境だ。

tarコマンドは1979年のUNIX第七版に載っている。ベクターベースのアステロイドというアーケードゲームが公開された年だ。2012年のすべてのMacBook AirやProには、tarがある。

Windows 8を直す方法

A1E1: My Fix for Windows 8 Freezes and General Weirdness

にもかかわらず、HDDがたまに、一分間ほど100%ビジーな状態だが、読み書きが0%ってことがあった。

[中略]

まあともかく、内蔵HDDを取り替えようと外部HDDを用意してたんだが、多数のファイルがあるディレクトリを外部HDDにコピーしようとしたとき、実際の書き込みが遅れるという、おなじ挙動をした。つまり、Windowsが実際の書き込みの前に、何かしていて、それがディスクを回転させているわけだが、実際には何もしてないわけだ。不思議に思い、この問題を再現しようと、色々な実験をしてみたところ、でかいコピーとかダウンロードとかをしてると、再現できることがわかった。ダウンロード先が別のドライブだとしても、やはり再現できる。

そこで俺は、一見めちゃくちゃな行動を起こすことにした。詳細なシステムプロパティから、ページファイルを無効化したのだ。リブートしてみたところ、今までの問題が一切解決した。Windows 8のフリーズに関するフォーラムとかを眺めてみると、どうも、フリーズする状況は、ブラウザのキャッシュを参照しているとか、でかいダウンロード中だとか、ファイルコピーだとかのようだ。

つまりこういうことだ。今のシステムはメモリが大量にあるため(俺のマシンの場合、6GB)、ページファイルなんて必要ないのだ。数日ほどマシンの状態を観察してみても、俺の環境では、1.5GBぐらいしか消費しない。6GB使いきるなんてありえない。これを考えてみると、もはや4GB以上のメモリを持つ環境では、ページファイルの存在は、システムの動作を遅らせるだけではないか。なぜならば、メモリはどのHDDよりも早いからだ(ある種の特殊なSSDはともかくとして)。

つまり、こういうことだろう。Windowsでは普通にメモリを確保すると、メモリのためにディスク上のページファイルの領域が割り当てられる。この処理には、ページファイルにアクセスしなければならない。つまり、メモリの確保にはディスクアクセスが必要になる。しかし、メモリページファイルがあるディスクへのアクセスが集中すると、メモリ領域の確保や解放処理などのためのディスクアクセスも、当然影響を受ける。他のディスクへの読み書きには、メモリを必要とするが、そのメモリの確保に戸惑うため、実際の処理が進まない。

もし、この予想の通りだとしたら、なんだか非常に馬鹿げた実装だ。

2012-06-02

IE10、デフォルトで「トラックすんなよ」ヘッダーの送信を決定。終わりの始まり

Advancing Consumer Trust and Privacy: Internet Explorer in Windows 8 - Microsoft on the Issues - Site Home - TechNet Blogs

DO NOT TRACKヘッダーは、技術上、セキュリティ上、非常に愚かな規格である。「ドアに鍵はかかってないけど泥棒に入らないでね」という看板を立てるのに等しい。泥棒はそんな看板など、読むことすらしないのだ。正しい対処法は、鍵をかけることである。同様に、軍事上重要な拠点には、警備を配置するものである。「警備されてないけど軍事上重要な拠点なので侵攻しないでね」と敵に告げても意味がない。

イギリスのcookie法も、あほくさい法律である。そもそも、cookieを実装しているのはユーザー側である。cookieとは、サーバー側の、「この前覚えておいてくれといった番号はなんだったっけ?」というサーバーのお願いに、ユーザーが答えているだけなのだ。技術的に、セキュリティ的に正しい対策は、ユーザーが答えなければいいのだ。

いかにもマイクロソフトにありがちだが、IE10はデフォルトでDO NOT TRACKを提示する決定をした。まあ、これについてはマイクロソフトを責めるつもりはない。そもそも、技術的に間違った解決方法なのだから、こうなるのは当然なのだ。

P3P、DOCTYPE宣言、ベンダープレフィクス、ああ、技術的に正しくない解決方法を、いくつ生み出せば人類は学ぶのか。

クラウドが導く自由なフォーマットとソフトウェア

「クラウド」というと、スーツを着た営業が創りだしたバズワードに過ぎない。まあ、ここでは聞こえがいいのでクラウドという言葉を使う。

クラウドと言った所で、その本質は、サーバー側での処理だ。たとえばYouTubeなどの動画サイトは、ユーザーがアップロードした動画を共通のフォーマットに変換している。これを実現するためには、多彩な動画と音声のフォーマットをデコードするソフトウェアが必要だ。現在、そのデコードするソフトウェアは、ffmpeg(あるいはlibav)が担っている。これは、自由なソフトウェアである。自由なソフトウェアであるので、非常に使いやすい。使いやすいというのは、単に機能的に使いやすいだけではない。必要であれば、使いやすく改変することができるという点で、使いやすいのだ。

ffmpegが、今の地位に至るのは、容易ではなかった。多くの動画圧縮フォーマットは、そのフォーマットの詳細が公開されていない。したがって、ffmpegでデコーダーを実装するには、非常に低級な解析作業が必要になる。もはや、ffmpegしかデコーダーが存在しない動画圧縮フォーマットもあるのだ。何故ならば、公式のデコーダーは、すでに製造されていないハードウェア上でしか動かず、さらにNDAを結ばなければ入手することすら不可能で、しかも、もはや開発放棄されたソフトウェアだったりするからだ。ffmpegは、そのような動画圧縮フォーマットが再生不可能になる事態を防いできた。

とはいえ、世の中にはffmpegがサポートしていない動画圧縮フォーマットは山ほどある。あまりにも利用例が少なく、知名度が低いので、もはや誰にも知られることがなく朽ちている。そのようなフォーマットは、クラウドでは受け付けられない。何故ならば、フォーマットを扱うソフトウェアが存在しないからだ。

単に動画サイトだけではない。もはや画像処理もクラウドの時代だ。Photoshopの代わりに、サーバー側で画像処理を行う。ユーザーがローカルで操作するのは、単にサーバーと会話するUIを提供するソフトウェアである。これにより、ユーザー側のコンピューターが、高度な画像処理のためには非力であっても、サーバー側に十分な演算力があり、またネットワークがしっかりしていれば、ストレスなく画像処理が行える。

音声もクラウドの時代だ。たとえば、音声のフォーマットを変換するサービスを提供しているWebサイトが非常に多い。音声のフォーマット変換ぐらい。もはや手のひらに収まる大きさのコンピューターでも十分なパフォーマンスがだせるのだが、やはりユーザーは、簡単なUIを望む。ffmpegやlibavを使えばコマンド一発でできて、しかもクラウドサービスより丁寧にエンコードするので、同ビットレートで画質、音質もよくなるのだが、ユーザーは単に利便性を望むのだ。

ゲームですら、もはやクラウドの時代である。クラウドによるゲームというのは、単にMMORPGやオンラインシューターのことではない。サーバー側でゲームを実行して、結果をリアルタイムで動画にエンコードしてユーザーに渡すのだ。ユーザー側で行うのは、入力をサーバーに送信することと、結果として送られてくる映像や音声をデコードして表示することである。10年前にこんなことを書くと、夢物語のように思われたが、今では、このクラウドサービスは実在する

これらのクラウドサービスを実現するには、動画や音声や画像のフォーマットの詳細が、最低でも公開されていることが非常に重要になってくる。詳細の公開されていないフォーマットは、クラウドでは扱いにくいのだ。そして、ソフトウェアが自由であることも、非常に重要になってくる。不自由なソフトウェアは、大規模なサーバー群による分散処理を行うために改変することができない。

クラウドには、欠点もある。まずプライバシーの問題だ。ソフトウェアを自分の所有するコンピューターで実行していないので、その意味では制限が多いとも言える。しかし、クラウドの興隆は、むしろ自由なソフトウェアへの移行を促すのではないか。そうであれば、クラウドは、自由なソフトウェアのためには、利点のほうが多いのではないか。

なんにせよ、不自由なソフトウェアは人道上の罪であり、もはや未来がないのは明白だ。

2012-06-01

ヒトラーを殺せ

xkcd: Kill Hitler

「タイムマシンが完成したぞ。だが、一回きりしか使えない」
「ヒトラーを殺すべきだ」

「なぜヒトラーというオッサンにこだわるのかね。どの時代にだって行けるんだぞ」

「奴は凶悪すぎた。奴は何百万という人間を殺し、世界大戦を引き起こした張本人だ。タイムマシンがあるなら、誰だってヒトラーを殺すだろ」

「わかったわかった。落ち着けよ」
「んじゃ、さっそくヒトラー殺してくるわ(´・ω・`)ノシ」

「殺ってきたぞ。満足か」
「乙」
「しかしあのオッサン、地下壕に篭ってたぞ。まったく、1945年というのは騒がしい年だったぜ」
「ちょ・・・まて」

日本人からすると、ユダヤ人隔離を行ったヒトラーや、無差別爆撃や民間商戦の撃沈で民間人を虐殺したドイツが非難されて、日系人隔離を行ったルーズベルトや、原爆投下を承認したトルーマンや、数多くの無差別爆撃や民間商戦の撃沈で民間人を虐殺した合衆国が非難されない現状は不思議だ。まあ、勝てば官軍というやつか。そもそも、あの時代は皆、狂っていたのだ。

ちなみに、ジョークがわからない人間のためにネタばらしをすると、1945年は、ヒトラーが地下壕で自殺をした年である。1945年にヒトラーを殺しても、歴史は何も変わらない。むしろ変わらなかったから最後のコマでヒトラーが認識されているのであろうが。

脆弱性市場とセキュリティの未来

Schneier on Security: The Vulnerabilities Market and the Future of Security

非公開の脆弱性の情報が高額で取引される現状は、危険である。

従来は、脆弱性がいきなり公にされても、修正されるので、問題はなかった。ところが今や、未公開の脆弱性情報は金になる。政府や諜報機関は、脆弱性が未発見のまま放置されていることを望む。そのほうが都合がいいからだ。これは非常に危険である。

FedoraでUEFIセキュアブートを実装すること

mjg59 | Implementing UEFI Secure Boot in Fedora

Fedora 17が今週リリースされた。便利かつ自由であり、万人におすすめできる。ぜひとも試すべきだ。ところで、今回のリリースは興味深いリリースでもある。これは、UEFIセキュアブート以前の時代の最後のFedoraだからだ。Fedora 18は、Windows 8と同時期にリリースされる。すでにご存知のように、Windows 8用のハードウェアはすべて、デフォルトでセキュアブートが有効になる。Microsoftは当初の計画から思い直して、全てのWindows用x86機は、ファームウェア上でこの機能を無効にするオプションと、ユーザーに独自のキーを追加する機能を提供しなければならないとしたものの、Fedoraを実行させるために、ユーザーに自力でファームウェア設定をいじらせるというのは、現実的ではない。我々はこの事態に対処するべく動いていた。最終的な方法は、理想ではないが、しかしあらゆる方法を考慮した結果、これが一番まともな選択であるように思う。すなわち、ユーザーにFedoraをインストールさせ、かつ、ユーザーの自由を保証する方法だ。

マシンをブートせよ

今年末に買うハードウェアは、ほとんどがWindows 8認証を受けたものになる。つまり、ハードウェアはあらかじめ、いくつかのセキュアブートキー搭載している。もしWindows 8がインストール済みならば、セキュアブートはデフォルトで有効になっている。キーは固定ではないなく、マニュファクチャーごとに異なるキーを搭載しているだろう。しかし、Windowsロゴを持つハードウェアはすべて、Microsoftキーを搭載している。[1]

我々は、Fedoraキーを作成して、ハードウェアベンダーに搭載するという方法を考えた。しかし、問題もあるのでやめることにした。第一に、ベンダーからは積極的な反応が得られたものの、全ベンダーがキーを搭載するというのは現実的ではない。つまり、大昔の、ハードウェアを購入するまえに互換リストに載っているかどうかを確かめる時代に逆戻りだ。ユーザーの反感を買うだけだ。第二に、Fedoraを特権階級に引き上げてしまうという事だ。大規模なディストリビューションであるがために、我々は他のディストリビューションより、ハードウェアベンダーとの意思疎通が図りやすい。Fedoraキーを搭載するシステムはFedoraを問題なく起動できる。ではMandrivaは? Archは? Mintは? Mepisは? ディストリビューション専用のキーを作成してハードウェアベンダーに取り込むよう働きかけるのは、他のディストリビューションの反感を買う。我々は実力で競争すべきであって、OEMとコネによって競争すべきではない。

別の方法としては、統一的なLinuxキーを作成することだ。これも難しい。なぜならば、まず署名と鍵の配布に責任を持つ団体を見つけなければならない。つまり、完璧にセキュアに保たれたルートキーを保持し、署名の求めに応じなければならないのだ。これは高くつく。何百万ドルの規模で高くつく。また、そのような機構の起ち上げには時間がかかる。そんな時間はどこにもない。そもそも、そんな仕事を引き受けようというボランティアなどどこにもいない。汎用的なLinuxキーという選択もない。

最後の選択肢は、あまり喜ばしいものではないが、まあ、一番マシな方法だ。Microsoftはsysdev portalで署名サービスを提供している。完全に無料というわけではない。99ドルの利用料がかかる。しかし、現実的な選択肢の中で、一番安い方法だ。ハードウェアとの最大の互換性を保証できるし、Fedoraを他のディストリビューションに比べて特権的な地位に押し上げることもない。もし、もっといい方法があるのだとしたら、まだ我々は発見していないのだ。そういうわけで、これが我々の選ぶ道だ。我々の最初のブートローダーは、Microsoftキーで署名される。

ブートローダー

我々は、至極単純な理由から、署名をマルチレイヤー化することにした。Microsoftの署名サービスを使って署名するのは手作業であり、重荷だからだ。ブートローダーのアップデートが、IEとスマートカードと手作業のパッケージ化という理由によって遅れることがあってはならない。代わりに、我々は非常に単純なブートローダー[2]を書いた。これは、単に本物のブートローダー(grub 2)をロードして、Fedoraによる署名キーで署名されているかどうかを確認してから、実行するだけのものだ。Fedoraの署名キーを使うという事は、grubのビルドとアップデートのプロセスを、既存のFedoraのビルドシステムで、我々の手で行えるという事だ。最初のブートローダーは、稀にしか更新されない。

[1] 実際、すべてのハードウェアはMicrosoftキー搭載しているであろう。セキュアブートにおいては、UEFIドライバーも署名されていなければならない。署名フォーマットの都合上、ひとつのバイナリに対して、ひとつの署名しか用意できない。互換性のために、おそらくkほとんどの拡張ハードウェアは、Microsoftキーによって署名されるだろうから、すべてのシステムベンダーは、ハードウェアの動作のために、Microsoftキーを認識しなければならないだろう。

[2] ソースはここにある。UEFIに移植されたcryptoライブラリとOpenSSLに依存している。それらは、できるだけ早く、追ってアップロードする予定だ。我々は、最低でもリリースサイクルごとにしか更新しないつもりだ。これなら、それほどの重荷にはならないだろう。

grubはどうするのか。我々はすでに、EFIシステム上のFedora 18では、デフォルトでgrub 2に移行した。しかし、セキュアブートに対応するための作業は、まだ少し残っている。まずはじめに、モジュールのロードを無効にしなければならない。現在、grub 2では任意のコードを実行時にロード可能だ。これはセキュアブートの目的が台無しだ。だから無効にする。次に、ブートするカーネルが信頼されているキーで署名されているかどうかを検証する機能をつける。最後に、カーネルコマンドラインを検証することにより、攻撃者が署名されたカーネルに、任意のコードの実行させないことを保証する。この制限は、セキュアブートを無効にすれば消え去る。

カーネル

セキュアブートとは、ハードウェアに直接触れるコードはすべて信頼できるものにするという思想で成り立っている。信頼できないコードは、すべて信頼できるコードを介さなければならない。これは、ユーザーがカーネルで任意のコードを実行できる場合、破られてしまう。そのため、我々はカーネルモジュールに署名を必須にし、カーネルの一部の機能を無効にする。もっとも明白な例として、もはやユーザー空間からPCI領域に直接アクセスすることはできなくなる。すなわち、グラフィックカードはカーネルドライバーが必須になる。ユーザー空間によるmodesettingは過去のものになる。もちろん、セキュアブートを無効にすれば、これらの制限も無効になる。

署名されたモジュールというのは、ユーザー側からみれば、やや面倒に感じるだろう。我々が提供するドライバーは、すべて署名されるが、外部のドライバーはどうすればいいのか。我々はまだ、其の問題に対する良い解決方法を思いついていない。先にも述べたように、他のディストリビューションでは動かない方法を採用したくはあに。Fedora限定とか、Ubuntu限定のドライバーなどというのは、誰も欲しがるはずがない。これはどうにかして、ディストリビューション互換な方法を構築する必要がある。

待てよ、何を署名するんだ

セキュアブートは、オペレーティングシステムの前にマルウェアのコードが実行されることを防ぐために設計されている。これは何も、机上の空論による脅威ではない。ブート以前のマルウェアというのは実際に存在するし、思っている以上に事態は深刻である。明らかに、ブートローダーは署名されなければならない。さもなければ、署名されたブートローダーを未署名のものに差し替えて、マルウェアをインストールした上で、OSをブートされる。

ではカーネルはどうなのか。カーネルは単なるコードだ。もし、署名されたLinuxのブートローダーを使い、未署名のLinuxカーネルをブートした場合、それはマルウェアである可能性がある。そのマルウェアがWindowsを攻撃できるのであれば、署名されたLinuxのブートローダーとは、もはや単に、署名されたLinuxのブートローダーではない。それは、署名されたWindowsマルウェアのランチャーである。すなわち、そのブートローダーのバイナリはブラックリスト入りになる。もはや、署名されたLinuxのブートローダーは、署名されたLinuxのブートローダーではなくなるのだ。そのため、カーネルは署名されていなければならない。

モジュールはどうか。これも同じ事だ。モジュールは単なるコードだ。少々難しくはなるものの、署名されたカーネルが未署名のモジュールをロードしたならば、未署名のモジュールは偽のUEFI環境を構築して、悪意あるOSのブートローダーに処理を引き渡せる。攻撃者は、署名されたカーネルとマルウェアモジュールを読み込む最小のinitramfsを同梱すればいいだけだ。ブート時間を数秒ほど遅らせることを除けば、検出不可能だ。Xはどうか。GPUのレジスタにアクセスできるのならば、GPUにカーネルの領域をDMAで上書きさせ、任意のコードを実行可能だ。これも難しいものの、実装可能である。もし、他の攻撃方法が制限されているのならば、これだって魅力的な攻撃方法である。

もし、我々が、他のオペレーティングシステムを攻撃可能な署名されたコードを発行したならば、他のオペレーティングシステムが、我々をブラックリスト化する口実となる。これはいい結果をもたらさない。

カスタマイズ

多くのユーザーは、自前でカーネルをビルドしたいと考えている。あるものは、自前のディストリビューションを構築したいとさえ考えている。我々のブートローダーとカーネルを署名するのは、障害となる。我々はバイナリを署名するのに使っている全てのツールを提供する。しかし、明白な理由により、我々はキーを提供するわけにはいかない。そこで、方法はみっつある。まず第一に、ユーザーが自前のキーを生成し、システムファームウェアに設定すること。我々は、ファームウェアに設定されているキーを信頼する。第二に、自前のキーで最初のブートローダーを署名し、Microsoftに99ドル払って署名してもらうこと。そうすれば、他人にコピーを渡して、なにか特別な設定をしなくても、インストールさせることができる。第三には、単にセキュアブートを無効にすることだ。その時点で、機械は現在と同じ自由を提供するようになる。

でも、俺はMicrosoftなんて信用しねぇぞ

システムをカスタムモードにすれば、既存のキーをすべて消去して、独自のキーに差し替えることが可能になるはずである。その後は、単にFedoraのブートローダー(先に述べたように、我々はツールとドキュメントを公開する)を再署名すれば、Fedoraはブートできるが、Microsoftのコードは拒否するコンピューターが完成する。デスクトップ機としては、少々使いづらいかもしれない。何しろ、Microsoftによって署名されたグラフィックやネットワークカードのUEFIドライバーがあるからだが、これも解決可能だ。今、インストールされたドライバーを自動的にホワイトリストに追加するツールの実装方法について検証している。ファームウェアのバックドアさえ考慮に入れなければ、コンピューターが自分が信頼するソフトウェアだけを実行するように、セキュアブートを設定できるのだ。自由とは、実行したいソフトウェアを実行することであるが、実行したくないソフトウェアを選べることでもある。

悪魔に魂を売り渡したのかFedora

我々はこの問題に何ヶ月も取り組んできた。これは、あまりいい解決方法ではないが、実現可能な方法だ。我々は、他の選択肢はすべて、実現不可能であると結論した。スキルのないユーザーがLinuxを実行するのを難しくしては、自由なソフトウェアは少しも発展しない。この方法は欠点もあるものの、90年代に逆戻りすることを防げる。ユーザーは改変したソフトウェアを実行できる自由を保持できる。我々はそのような自由を不可能にする方法は受け入れない。

これは裏切りだろうか。そのとおりである。すでに、Fedoraとユーザーとの間では、不公平が生じている。商標により、改変したディストリビューションにFedoraのアートワークを含めることを禁じている。Fedoraのインフラはすでに、ある者が他の者より、より強い力を持つライセンスで提供されている。これが不公平の元だ。理想ではないが、より良い解決方法が思いつかないことを申し訳なく思う。これは私が恐れていたほど悪くはないが、思っていたほど良くもない。

ARMはどうなる

MicrosoftのARMハードウェアの認証要件では、ベンダーがセキュアブートを無効にしたり、ユーザーにキーを設定したりする機能を提供することを禁じている。我々は、x86と同じようにセキュアブートをサポートできるものの、署名に金を払わなければ、ユーザーは改変版ソフトウェアを実行することができなくなる。我々はこれを受け入れがたい。よってサポートする予定はない。

幸運なことに、これはx86ほど問題にはならない。MicrosoftのARM市場への影響力は、x86に比べれば、極端に低い。この影響を受ける機械は、Windows専用に設計されたハードウェアだけだ。LinuxをARMで実行したいのならば、ハードウェアがないという事態には陥らない。

これは最終決定なのか

違う。我々はこれらの方法をFedora 18の納期までに実装できることに満足しているが、まだ我々が気がついていない解決方法はあるかもしれない。もし、我々が変なことをせずに、ユーザーの自由を増加させられる方法があるのならば、我々はそれを行うつもりだ。

果たして、セキュアブートはうまく行くのだろうか。結局、UEFIという低レイヤーでもコード署名が必要なために、共通のキーが必要になる。現在、その役割はMicrosoftのキーが果たしている。しかし、およそブートレベルでのマルウェアを開発するほどの規模(国家や大企業)ならば、善良なるハードウェアベンダーやソフトウェアベンダーを装って、Microsoftに署名させることは可能である。攻撃が一回きりの目的(ウラン処理施設の破壊など)であれば、存在と目的が判明する前に攻撃が成功することだってあり得る。バイナリにブラックリストを設けるのは間に合わない。

それに、Microsoftのキーが漏れてしまった場合、どうするのだろうか。もちろん、DVDやブルーレイの秘密鍵を信頼された不自由なソフトウェアに同梱する、暗号の初歩もなっていないアホくさい電子制限管理方法とは違い、実装を解析してキーを判明ではないにしても、やはり一つのマスターキーに頼るのは不安がある。

更に問題なのは、カーネルをデバッグする場合、セキュアブートは問題になる。とすると、カーネルハッカーはセキュアブートを無効にした環境で開発することになる。開発者とユーザーの環境が離れていて、果たしてまともなものが出来上がるだろうか。

また、読者の中には、GPLv3準拠なのかどうかを疑う人もいるかもしれない。これはGPLv3準拠である。なぜならば、改変版のソフトウェアを実行する方法があるからだ。独自のキーで署名してファームウェアに設定するか、あるいは単にセキュアブートを無効にしてしまえばよい。そもそも、Tivoizationの主な問題は、GPLなソフトウェアをハードウェアと一体化して出荷して、ハードウェアで改変版のソフトウェアを実行する方法を提供していない場合だ。このように一体化して出荷した場合、ハードウェアは、改変版のソフトウェアを実行できる方法を提供していなければならない。今回の場合、ハードウェアはユーザーが用意するものだから、GPLv3の条件には当てはまらない。