ports と portage
>Gentoo Linux の portage はまだ触りはじめて数日なんだけど、なるほど似ているといえば似ているし、参考にして、改良できるところは改良しているということがよくわかった。
>
>ただ、今のところは FreeBSD の ports の方が好きだ。
>
>理由はいくつかあるが、そもそもずっと FreeBSD の ports に親しんでいる人間の書くことなので、その辺は割引いて聞いてほしい。
>
>まず、 ports collection というのは、基本的には Makefile に記述する、というスタイルがあって、この記述形式は案外優れているんじゃないか、などと今回感じた。なぜかというと、 Makefile は基本的に、ビルドという手続きをかなり宣言的に書くのだ。 Gentoo の ebuild は、なんだかいやに手続的である。
>
>むろん、 Makefile でも実作業を記述するところは手続的に書かざるをえないわけだが、幸いなことにそこのところはほとんどが隠蔽されていて、たいていはそのようなことを書く必要はない。そのアプリケーションがどのようにビルドされるか(GNU make を使う必要があるかとか、 configure は GNU 由来のものかとか、そういったこと)を書けばそれでよい。パッチを充てる必要があるときは、 files/patch-* という名前のファイルを用意すればそれで良い。などなど。
>
>もう一点が USE フラグで、どうもこれが一般化されすぎているように感じた。最初は随分とスマートなアプローチのように思えたのだが、各パッケージ作者が割と好きなように USE を設定しているので、ひょっとするとなんだかわけわかめになっちゃってるのじゃないかと危惧する。
>
>一方の FreeBSD ではどうなっているかとうと、 make WITH_RUBY=yes とかいったような、かなり泥くさいアプローチを取っていて、これはもうどっちもどっちというしかないのだけれど。
>
>ただ言いたいのは、 USE フラグの場合、それが存在することすら知らないままコンパイルしちゃう人がいるんじゃないかということかな。自動的に警告を出せればいいのだが。
>
>ちなみに FreeBSD では、 OPTIONS という変数を使うと、ターミナルベースの GUI っぽくオプションを設定できるという摩訶不思議機能があるようすで、風博士の ports とかがこれを使ってるのだが、これをはじめて見たときはまじでびびった。もちろん、ユーザにわざわざ選択させる、というのは自動化処理との兼合いもあってどっちが良いと一概に言えないんだが……。
>
>それから、 FreeBSD では X11BASE や LOCALBASE をいじったりできるのだが、 portage では、 ebuild のファイルに割と /usr/X11R6/… とかが埋め込まれているので、そういう風にはできないっぽい感じなのは残念かな。
>
>これだけだと一方的すぎるので portage の長所を。今のところ思いつくのは、複数のバージョンが混在する環境にすごく気をつけているようだ、ってことかな。たとえば GNU automake なんかはマクロに応じて複数のバージョンが混在できるけど、このアプローチは割とスマートに思える。
>
>それから、上ではさも長所であるかのように ports だと USE_GMAKE=yes とか Makefile に書いておけばよいのであって……と書いたけれども、こういった種類の変数もやっぱり膨大すぎて、何があるのか把握するのはけっこう困難だという問題もあるのだ。
>
>まあ、 portage ももう少し使っていけば良さが見えてくるでしょー。
>
>あーあとそれから、バージョンがかなり安全側に倒してあるような気がするので、先っちょ大好きな身としてはけっこう面倒かも。 uim が 0.4.3 だったり、 gaim が 1.0.2 だったりしますよ。中途半端に古いよなあ。特に変更点がない時、 ports だと PORTVERSION をいじればだいたいそのまま行けたりするんだけど、 portage はまだ慣れてないのでどうすればお手軽なのかがわからない感じ。
>
