Personal tools
You are here: Home ブログ 井上 AirOne v4.8βのGNU/Linux版リリース
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

AirOne v4.8βのGNU/Linux版リリース

AirOne v4.8βのGNU/Linux版をリリースしました。

β版と言っていますが、コードベースはWindows版と同じです。

数年前はg++の過渡期で、バイナリ互換性に問題がありました(g++2.9、g++3.0、g++3.1の頃の話)。 g++のバイナリ互換性の問題もなくなり、配布バイナリはひとつで済むかと思っていたら、思わぬ罠がありました。GNU libcのバージョン問題です。

Ubuntu6でビルドしたバイナリを古いFedoraで動かそうとするとlibcにGLIBC_2.4シンボルが無いと怒られて起動しません。 結局、ふたつのバイナリを配布することになりました。

$ strings /lib/libc.so.6 | grep GLIBC

で、GNU libcのバージョンを調べて、必要なバイナリを取得してください。

ぼくの記憶では、shared libraryがバイナリ互換性を失うメジャーアップグレードの場合は、ファイル名のバージョン番号(上の例では6の部分)を変える仕組みだった気がします。記憶ではSVR4由来の仕組みだったと思いますが、GNUにとってはどうでも良い慣習なのでしょうか。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/airone48-gnulinux/tbping

Re:AirOne v4.8βのGNU/Linux版リリース

Posted by soda at 2007-10-25 12:30
参照関係でleafになるライブラリなら、メジャーバージョン番号(elfの世界ではSONAME)を変更するというのが確かに習慣です。
ただ、libc のように多くのライブラリからも参照される側のライブラリだと、安易にSONAMEを変えるわけにはいきません。というのは、libc.so.6 を参照するようにコンパイルされた libfoo.so.1 を必要とするアプリケーションAと、libc.so.7 を参照するようにコンパイルされた libfoo.so.1 を必要とするアプリケーションBがあったときに、AとBの混在ができなくなるからです。このためlibcのSONAMEは、よほどのことがない限り変更しないように運用するのが普通です。(こういうことを全然考慮しないフリーなUNIX系OSもありますが…)
くだんの件については、古いFedora用のバイナリだけを用意しておけば、Ubuntu6でも動きませんか?

Re:AirOne v4.8βのGNU/Linux版リリース

Posted by inoue at 2007-10-25 23:44
安易にSONAMEを変える害は分かりますが、「バイナリ互換性を失ってしまった」という事実の後にも、有効な理屈なのかいまいち判断できません。

> くだんの件については、古いFedora用のバイナリだけを用意しておけば、Ubuntu6でも動きませんか?

動きますし、動作確認もしていますが、なんとなく「集合の中で一番低いバージョンに合わせる」という態度が、まるで、共通する部分集合の機能しか利用しないマルチプラットフォーム対応GUIライブラリのようで嫌なので、GLIBC_2.4版も置きました。簡単に言えば、ただの自己満足です。

Re:AirOne v4.8βのGNU/Linux版リリース

Posted by soda at 2007-10-26 14:06
古い Fedora 用バイナリが動いているのであれば、この例は「バイナリ互換性を失った」とは呼ばないと思います。
通常、ABI に関して保証されるのは上位互換性のみですから。
これは別に glibc に限らず、いにしえの SunOS4 でも、あるいは Windows でも同じであり、古い OS と新しい OS の両方で動かすバイナリは、古い OS 向けでビルドしておく必要があると思いますが…

Re:AirOne v4.8βのGNU/Linux版リリース

Posted by inoue at 2007-10-29 22:50
正確に言えば、GLIBC_2.4はGLIBC_2.3.4に対して上位互換性はあるが下位互換性は無い、と言うべきだったと思います。
上位互換性と違って、下位互換性の維持は現実的には不可能なので、いつか失うのは必然です。この是非は別にどうでもよくて、下位互換性を失った時はlibc.so.7になるべきかと思ったのが発端です。上位互換まで失った時がlibc.so.7の登場なのかもしれません。

Re:AirOne v4.8βのGNU/Linux版リリース

Posted by soda at 2007-10-31 22:15
> 上位互換まで失った時がlibc.so.7の登場なのかもしれません。

はい。そうです。
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.