解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

「えっ! 私の tarball 小さすぎ!?」 本当は怖い CDN サービス

ダウンロードする地域によってソース tarball のファイルが異なるという OpenVPN のウェブサイトのバグです。

おそらくは、間違えた tarball をアップロードして、しれっと挿し替えてアップロードし直してリリースしたところ、間違えた tarball が残っているミラーサーバがあったという事故。

OpenVPN はウェブサイトに Cloudflare という CDN サービスを利用しているようです。 だから、ダウンロードするクライアント側が名乗る地域によって実際のサーバを変えることで、より近くて速いサーバが自動的に選ばれるようになっています。

本来は、CDN サーバはファイルが挿し替えられたら同期して新しいファイルをコピーして分散させねばなりません。 ところが、旧ファイルが残っていたといったところでしょう。

昔ならば、ドメインネームが同じ=実際のサーバも同じ、だと思ってもほぼ差し支えありませんでした。 それが、DNS ラウンドロビンのように、同じドメインネームでも異なる IP アドレスに分散させる手法が増えました。 さらに今は、IP アドレスが同じでも、異なるサーバに分散させることも可能になりました。 それが、現在の異常に膨大なネットワークトラフィックとサーバ負荷を解決するための舞台裏なのです。 YoutubeGoogle をはじめ、物凄いアクセスと転送量をこなすウェブサービスでは普通になっています。例えば、世界中の無数の人々が google.com にアクセスしていますが、人それぞれに応対するサーバが異なっているのに、多くの人は「同じサービスを受けている」と思っているわけです。気づかないけれども実は、担当営業所も担当従業員も異なっている、みたいな世界です。

さて、著名なフリーソフトウェアでは一般的に、tarball のハッシュ値も記載するなどしてファイルが正しいか検証する手段を提供します。 OpenVPN の場合は、 GnuPG でサインしてあり、偽の tarball がクラッカーによりしこまれることを防止しています。

Gentoo Linux」では、ダウンロードした tarball が正しいか検証するために Manifest ファイル内にハッシュ値を格納しており、 Portage などのパッケージマネージャは自動的に検証するようになっています。

さて、Manifest ファイルは誰が造るかといえば勿論、パッケージメンテナです。( # ebuild foo-bar-1234.ebuild manifest )

さあさあ恐ろしいことに、パッケージメンテナが、手元にダウンロードした tarball が正しいか検証することを怠って Manifest を作成したらどうなるでしょうか。

Gentoo だけの話ではありません。DebianFedora などのバイナリでパッケージを配布するディストリビューションならば、パッケージメンテナが手元でビルドした成果物を配布します。 だから、メンテナが検証を怠ったら、恐ろしいことになります。

Upstream(ソフトウェア制作者)の担当者の作業ミスなだけでしたというのであっても、本来はポイントリリースで(バージョンナンバーを上げて)リリースし直すべきところを、しれっと挿し替えて黙っているということも不可能ではありません。 そうなると、どこぞではバグっている tarball が気づかれずに用いられたままという恐ろしいこともありえます。

さらに、誰かが、ウェブサーバをクラックするなどして tarball を挿し替えてマルウェア化させたら、どうなるでしょうか。

クラッカーがウェブサイトまで改竄して偽ファイルのハッシュ値を掲載してしまったらどうしようもありませんが、そこまで手の込んだことでなければ、ダウンロードした当人がひと手間かけて検証したらこうした事態は防げるのですよ。

そして通常は、エンドユーザは Upstream からダウンロードするのではなくてディストリビューションリポジトリからインストールします。そして、パッケージが正しいかはパッケージマネージャが自動的に検証してくれるので、多くのエンドユーザは気にも留めません。 つまり、パッケージメンテナが代わりに検証してくれるからです。

パッケージメンテナは、検証作業を決して怠るな、ということです。

【雑文】GNU/Linux ディストリビューションは統一不可能だ

GNU/Linuxディストリビューションは、統一されることはなく、むしろ増えていくだろうと思います。

ディストリビューションをわざわざ創るのは、目的や思想がそれぞれ異なるからです。 創っている当人も、使っている人々も、多種多様です。 それが本質的な原因です。

さて、まずOSとしての基礎的な部分が統一不可能です。 init もブートローダも統一不可能なので。 なにせ init でさえも、SysVinit にまだ拘る人々もあります*1。 Systemd の採用が強引に増やされてきましたが、Systemd を採用するのはセキュリティ上を含めリスクがあります。 SysVinit、OpenRC、rc-file(rc.conf)、Systemd 等々の多種の init があるからこそリスクが分散されるのですし、使いやすさ(ユーザビリティ)は管理する人それぞれに指向が異なりますから、init が統一されることはないし、あってはなりません。

パッケージマネージャも、統一されないでしょう。 求めるパッケージ管理の思想と規格が、人それぞれ異なります。 そしてまた、プログラミング言語に何を採用したいかも、人それぞれに異なります*2

カーネルコンフィグレーションも、目的や思想やハードウェアにより異なるので、ビルド済カーネルで誰もがこと足りるということはありえません。 例えば、セキュリティを堅牢にしたい(hardend)のであればそのための手法を導入するでしょう。しかしそれは皆が望んでいるとは限りません。

SELinux を入れたい人あれば、AppArmourを入れたい人もあり、Tomoyoかもしれませんし。手法が複数あるのも、セキュリティのリスク分散でもありますし、思想の相異でもあります。 しかしそもそもこうした手法も、多くのエンドユーザは、理解と管理の手間が大変多いので、避けます。

さて、"Gentoo Linux"ならばこうした基礎的な部分でさえ選択可能なようにしてはありますが、そもそもパッケージのインストールにいちいちビルドするということを受け入れられない人の方が多いでしょうから、Gentoo に統一されることはありえません。 それに、Gentoo のパッケージ管理規格(PMS)が意に沿わない(not prefer)な人も多いと思います。Portage と Paludis と Pkgcore でパッケージマネージャが選べたところで、PMS は選べません。

しかしそれ以上に、ビルド済のディストリビューションになってしまうと、選べません。 例えば Sabayon は Gentoo ではありません。USE フラグの意義が抹殺されています。

ビルドするためのコンパイラアセンブラやライブラリも多種多様です。例えばコンパイラでも GCC や Clang やその他 Intel コンパイラ等々あります。アセンブラでも、GAS、yasm 等々あります。ライブラリも、 Glibc だとは限りません。

バージョンも、ビルドの際のフラグも、異なりえます。 例えば GCC も適宜バージョンが上がっていきますから、それを追いかけていく作業が要り、移行のペースが異なり、ソフトウェアによってはいわゆる Upstream の対応が遅くって、ディストリビューション側が対応に苦慮することがよくあります。 CFLAGS や CXXFLAGS にしても、オプティマイズオプションを -O3 にしたい人と、 -Os にしたい人と、-O2 派の人と、あります。いわゆる「組み込み系」で記憶装置の容量が小さいものだと -Os にすることが必至でしょう。

そして、リポジトリに入れるソフトウェアの選択、とりわけライセンスの部分で、論争必至です。 典型的には、プロプライエタリリポジトリを提供すると、フリーソフトウェアディストリビューションではなくなってしまいます。FSF は、Ubuntu どころか、DebianFedora も、フリーソフトウェアディストリビューションとしては認めていません。

なにせ「そもそも論」として、BSD 界隈だって、統一されていません。FreeBSDNetBSDOpenBSD が統一されることは、ありえないでしょう。双方相容れません。技術的な面以外にも、ディストリビューション同士で、創始者やメンテナ達も仲良くはありません。仲良かったら OpenBSD はフォークしていません。 BSD 系が統一しえないことと同様に、GNU/Linux も統一することは不能でしょう。

究極の「そもそも論」として、OS もアーキテクチャも何も、統一されていませんし、統一しないからこそ善いのでしょう。

MS-WindowsMacGNUBSD が統一されてよいと思いますか?  なにせ、無理です。運営方針や経営モデルでさえも異なります。技術以前に背景部分が異なります。

x86_64(AMD64) と ARM を統一することはありうるでしょうか? 根本的に異なる演算手法を用いているのですから、統合されないでしょう。目的に応じてどちらが適しているか、分かれます。

こうして、ひとつにしない方が役に立つのですし、多様であるからこそリスクが分散され、将来の可能性の広さも保てます。 ヒトどころか乳酸菌も、個体によって遺伝子が異なるのと同じです。全く同じクローンだったら、パンデミックやカタストロフで滅亡します。

たしかに、ディストリビューションのかなり多くは、Debian 系です。 厳密に言えば Debian系や Debian 系の Ubuntu 系です。 そうするとこれらは統一が可能なように思えるかもしれませんが、実際には困難です。可能だったならば、DebianUbuntu は統合していますって。 経営が異なりますし、コミュニティが異なりますし、Debian では基準に合わないライセンスのソフトウェアを Ubuntuリポジトリに盛り込んでいます。

Debianディストリビューションはあまたありますが、デフォルトの「デスクトップ環境」(DE)が異なっていたり、インストール済のソフトウェアが異なっていたりします。 提供したいソフトウェアが異なるために、リポジトリもフォークして改変していたりします。

「フレーヴァー」(flavor)だとか「スピン」(spin)だとか言い方はそれぞれですが、同じディストリビューションの中でもある程度は変えられます。 しかし、全ての人の要望や嗜好を満たすにはほど遠いでしょう。

人類70億人以上もあるのですから、ディストリビューションを1つにはしえないし、しないからこそよいわけです。 最大公約数で1つに統一しようとしたら、結局は何もなくなるか、あるいは独裁者が牛耳る世界にでもなるでしょう。

*1:例えば、Debian を SysVinit 版に改造した Devuan がそうです。

*2:Linux と同じように C にすべきだと思っている人もあれば、C++ の方が手抜き可能なのでコントリビュータが増えるからよいと思っている人あり、さらに Python などの遅い言語をあえて採用する事例も沢山あります。

『Software Design』のUbuntuの連載に書かれている機械翻訳疑惑騒動の記事について

技評『Software Design』6月号の「Ubuntu Monthly Report 【86】Ubuntuの方針転換とWeb翻訳混入事件」の記事を見てエグいと思いましたので。 なぜならば、個人名は挙げていないとはいえ、公刊されている雑誌の記事に一方的に書いて晒しものにしているからで。公刊出版物に投稿する事実上の権力をもっている社会的強者が、一介の一般人である相手の出てこられないところで一方的に書く。それは、事情がどうあれ、物凄いイジメだと思いましたので。 記事自体では、相手の個人名を記載していないため特定不能なので名誉棄損等にはならないという考えでしょうが、それはウェブで検索すれば容易に判明してしまいます。たとえ犯罪ではなくとも、相手には一般人レベルの反論手段しかないがゆえに、物凄くアンフェアで、一言でいえばイジメですから。

前提

Ubuntuの翻訳もオープンソースソフトウェアの御多分に漏れず公募しているわけですが、Ubuntuでは翻訳成果物のライセンスがBSD-2だそうです。他方で、巷のウェブサービス機械翻訳でアウトプットされる成果物はこれと互換性のない異なるライセンスであることが多く、ライセンスにヴァイオレイトするものを採用するわけにはいかないわけです。

疑惑

Ubuntuの日本語翻訳チームのところに翻訳案をコミットし続けていた某氏が、採用されないコミットが多いことに業を煮やして、日本のではなくグローバルなメーリングリストの方に陳情をしたそうです。 これに対して日本語翻訳チームの側が反論して云々っていう流れです。 参考: Ubuntu英日翻訳にGoogle翻訳の成果物を突っ込む人物が現れライセンスがなんじゃもんじゃでつらい - Togetterまとめ

で、要は、Google翻訳の成果物をコミットしていたという疑義が発生したわけで。

Software Design』の当該記事の問題点

周知させたいのは、「ライセンス違反になるような『Web翻訳』の成果物をコミットしないでください」ということであるはずです。しかし、当該記事はそこから論点が概ね外れていて、どちらかというと、騒動の具体的な説明と、実名は挙げていないとは言え当該人物に対する非難。

個人的所感

Ubuntu の Japanese コミュニティ自体もどうかしていると私は思っていますよ、個人的感想。 例年のミーティングの際に大量の唐揚げを出して悪ふざけするところとかにしても。 (日経の雑誌の影響もあるでしょうが、)ユーザの人数が多いのに、権限や事実上の影響力をもっている人が少なく、入れ替わりも少なく、それなのになんか、主観や先入観をもった言動を、ウェブ上であれ、さらには雑誌上であれ、公開して憚りませんよね。

率直に言って、問題の根底には、フリーソフトウェアやライセンスのことが理解されておらず、多くの人は無関心でいる(ナイーブだ)ということです。 GNU/Linuxに関する雑誌は現在は(少なくとも、書店で並んでいる雑誌では)せいぜい『Software Design』と『日経Linux』くらいしかないわけですが、その日経が意図的に「フリーソフトウェア」を隠蔽して「フリーソフト」と書いています。 多くの人が「無料で、オープンソース」ということにしか意識をもっていません。 フリーソフトウェア思想とか、ライセンスのこととかは、関心をもつ以前にそもそも、知らないわけです。

Ubuntuフリーソフトウェアの「意識低い系」の典型みたいなもので、プロプライエタリ・ソフトウェアのリポジトリを提供していますし、フリーソフトウェアということの周知や啓発について非積極的な方です。

で、OSSとか言うんですが、そこで意図的にフリーソフトウェアを混ぜてFLOSSと言うことすらしない人々の意図はなんなのか。 そうしたことで寄ってくるユーザやコントリビュータはどういう人々なのでしょうか。 例えば、結果さえよければかまわなくって、慈善でこんなにコントリビュートしているんだから偉いのに、なんで評価されないのかってなる。

一般社会では概ね封建的で、生まれや身分によって権限をもてたり、成果があっても地位が与えられなかったりすることが多いです。(ちなみに、それで日本ではなく国外で活躍しようとする人もいますが、多くの国ではJapanese、Asian、肌がYellow、Non-Christianなどということで往々にして事実上の差別を受けます。) だから、OSSコミュニティにコントリビュートして評価されようとする、承認欲求を満たそうとする人々は、当然にかなり多いでしょう。 つまり、なぜわざわざコントリビュートするかって、動機があるはずなんですよね。

地位身分階級をもたない人が承認欲求を満たすためにコントリビュートしていくときには、その人に自己客観視(自己洞察)が足りなければ、結局のところ(社会生活で不利益を受けているのにも関わらず)権威主義に陥るという矛盾した歪みが出てきてしまうことがありえます。 そうして、権威権力をもつ人(プロジェクトの創始者とかメンテナとか)を礼賛したり、取り入ったりしようとすることもあるかもしれません。 (実際、OSS界隈だけではなくって、今の日本人の社会現象自体がそうですよね。差別されている当人が差別肯定して自分よりも下層の人間をつくって差別するっていう矛盾。)

本来は、フリーソフトウェアって、コミュニズムと親和性が高いし、自治で維持管理されていくものだと思います。ところが、そういう層がコントリビュートしているようには思えません。例えば日本共産党員がフリーソフトウェア界隈で活躍しているというところが、(本当は居るのかもしれませんけれど、少なくとも、)見えません。(本当は居るのかもしれないけれども、「私、共産党員です」「私、社民党支持者です」みたいに明言したら社会の大手通りから疎外されるようなのが日本ですから、言い出せないと思います。「角を立てない」ために黙っている人が多いと思います、変な社会です。)

むしろ実際には、OSSって、商業的、資本主義的に傾いてしまっています。それにそうしないと人もカネも集まらない。 いわば「悪魔に魂売った」みたいな感じです。

フリーソフト」(「無料ソフト」の類義)に釣られる層って、簡単に言えば、拝金的なのですよね。 そうして釣られて、実際とはズレた信念をもってしまった人が、ユーザになり、ときにはコントリビュートしていくわけですから、大変です。

フリーソフトウェアってこういうものなんですよ、って周知して人を集めた方が、寄付(献金)が集まるかはともかく、来る人に対してインフォームドコンセントが成り立って健全だと思うのですが。