%include "default.mgp" %default 1 bgrad %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page %nodefault %bgrad %center, size 7, font "standard", fore "white", vgap 20 XPG4DL と NetBSD の国際化 %size 4 Citrus Project / I18n and M17n initiative On Unix environments. %size 5 塩崎 拓也 AoiMoe@imou.to / tshiozak@netbsd.org %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 背景 1999 年 10 月末 AoiMoe メイン環境を FreeBSD から NetBSD へ %size 4 →シングルバイト locale しか使えない →Citrus locale framework が完成するまで X_LOCALE で我慢 %size 5, pause 1999 年 12 月 各種問題を目にする %size 4 →GDK/GTK+ をコンパイルしてみた →某 A 社の B マガジンの Qt の記事 →pkgsrc の問題 Citrus locale framework は、まだまだ先 %size 5 %pause %center, size 6, fore "yellow" つなぎの locale を作る必要性を認識 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page XPG4DL の目的 「NetBSD に対し、 Citrus locale framework までの つなぎとなるような国際化機能を提供する」 %pause あくまでもつなぎなので… 既存の実装を流用する libc のメジャーリビジョンを変更することなしに 現在の NetBSD とのバイナリレベルでの互換性を 保証する 将来導入される Citrus locale framework の 邪魔にならないよう、前方バイナリ互換性にも配慮 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page ベースとなる実装 候補 - 4.4BSD locale - 4.4BSD locale + itojun 拡張(sch-m17n, nvi-m17n) - NetBSD/pc98 locale - FreeBSD locale %size 5, pause 実際 - FreeBSD locale ベース %size 4 →4.4BSD に LC_COLLATE や LC_TIME が拡張されている →無意味な分裂を回避して、還元のしやすさへの配慮 %size 5 + itojun 拡張を apply %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page FreeBSD locale の問題点 4.4BSD rune interface %size 4 →非標準である・ほとんど使われていない →XPG5 国際化インターフェースで代替可能 →名前空間の汚染の恐れ %size 5 全ての Charset Encoding Scheme (CES) が静的リンク %size 4 →シングルバイト圏からの反発を懸念 →FreeBSD では libxpg4 の混乱を生んだ原因 →新たなエンコーディングの追加が困難 →かっこわるい(!) %size 5 %pause %center, size 6, fore "yellow" これらの問題の解消も考慮 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 作成手順 %size 5 このマシン(FreeBSD-3.2R)上で FreeBSD ソース展開 %pause ↓ itojun 拡張の apply %pause ↓ Charset Encoding Scheme (CES) 部を動的ロード化 %pause ↓ これを NetBSD-current へと移植 %pause ↓ これを OpenBSD-2.6 へも移植(B マガジンの原稿用) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 開発形態 CVS を利用 (利点) -分散開発が可能 -オリジナルとの差分を取るのが容易 (欠点) -Platform 間共通部分の取り扱い %size 4 →共通部分は FreeBSD への symlink →そうでない部分は NetBSD-current から import し手作業で改変 %size 5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page XPG4DL の特徴(1) FreeBSD locale からの拡張点 - いくつかの XPG5 国際化関数の追加 (by itojun) - EUC-TW と ISO-2022 (by itojun) - Encoding Scheme の on demand dynamic loading 化 (by AoiMoe) - もちろん後方バイナリ互換性は確保 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page XPG4DL の特徴(2) NetBSD/OpenBSD での特徴 - FreeBSD と同様の国際化機能 + 拡張 - 4.4BSD rune interface の隠蔽 - 古いバイナリに対する fallback 動作の保証 %size 4 →静的パラメータの不整合への対処 →libc のリビジョンを上げずに後方バイナリ互換性の確保 %size 5 - 将来の拡張に対する互換性への配慮 %size 4 →マクロは不整合が起こりやすいので極力使わない →既に使われているマクロへは glue で対処(ctype.h) →FreeBSD に存在する非標準関数は追加しない %size 5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page XPG4DL の現状 NetBSD - みのうらさんの手によるブランチは存在する - つい最近 AoiMoe も NetBSD developper に - でも 1.5 には間に合わなそう FreeBSD - フィードバックの準備 %size 4 →古田さんと栗山さん %size 5 OpenBSD - 放置中 %size 4 →純粋にマンパワーの問題 %size 5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page XPG4DL の今後 各プラットフォーム共通 - ファイルの整頓 - database の MI 化 - マニュアルページ FreeBSD - 拡張部分のフィードバック NetBSD - …どうしましょ。 %size 4 →1.5.1 あたりをめどに、何とかねじこむ? →本家で別ブランチに飼っておく? %size 5 OpenBSD - 未定 %pause %center, size 6, fore "yellow" いずれにしろさっさとケリをつけるのが肝要 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Citrus locale framework について 進捗 - 表面上は去年から全く進んでいない %size 4 →根幹部分を何度か作りかけては捨てている %size 5 ロードマップ - NetBSD 1.6 をメド %size 4 →私が早い時期に根幹部分を作る。 →あとは分担作業。 %size 5 - でも、みんな忙しいのよ (;_;) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 結論 %center, size 7, fore "yellow" XPG4DL の面倒を見てくれる暇な人 募集中