この記事は、NetBSD Advent Calendar 2014の12/20担当分として書かれました。
#はじめに
とある事情により、1年ほど前からNetBSDを使い始めました。外から見てると気づかないけど、中に入ってみると分かる(みんな知ってる)ことをまとめてみます。
#コミュニティ
##The NetBSD Foundation
The NetBSD Foundationとは、NetBSD開発の母体となる法人で、知的財産権や商標を持っている組織らしいです。NetBSD developer(後述)の人たちは、この組織のメンバになっています(同意書にサインをしている)。boardとかcoreとかadminsとか肩書を持っている人がいますが、知らなくてもなんとかなります。
TNFと略されることがあります。(最初、何のことだかわからなくて困った。)
##NetBSD developer
NetBSD developerと言ったときは、単に開発に貢献しているだけでなく、前述のTNFのメンバになり、ソースコードへのコミット権を持っている人を指します。developers.htmlに現メンバのリストが公開されています。(また、ここを見ると誰がどの国に住んでいるかわかる。)
どうやってメンバになるかは、application-procedure.htmlにその流れが書いてあります。基本的には、NetBSDへ何かしらの貢献をしていると、現メンバに誘われて、メンバ参加を申請、異論が出なければメンバなる、という流れになるはずです。
##ML
NetBSDにはメーリングリストがたくさんありますが、全部を見てる人はいないと思います。カーネル開発者であれば、current-users
とtech-kern
あたりを見ていれば良いと思います。(あとは自分の興味のあるアーキテクチャのML(port-*
)。)
##Blog
ありますが、新板のリリースとか大きな変更が入ったときぐらいしか更新はありません。
##SNS
いくつかのTwitterアカウントとFacebookページがあります。
- @netbsd: 一般
- @netbsdsrc: コミットログ
- Facebookページ
##日本人
NetBSD developerな日本人はわりと多いです(developers.html参照)。
日本NetBSDユーザーグループというユーザグループがあって、色々なOSS関連のイベントに参加してるので、ご存じの方も多いと思います。Facebookページもあるようです。
#ソースコード
NetBSDは各種ソースコードのバージョン管理ソフトウェア(VCS)にCVSを使っています。そう、CVSです。
とはいえ、非公式ですがgitレポジトリも存在します。
また、CVS Migration for NetBSD reposというWikiページがあって、CVSから別のVCS(おそらくDVCSのどれか)に移行しようという計画はあるようです。本当に移行するのかは不明ですが。
##current
NetBSDのメインブランチです。masterとかtrunkとか言われているやつです。developerはこのブランチで開発をしています。なので、リグレッションやエンバグなどよくあることです。developer以外にも使っている人がいて、current-users
MLで不具合報告をしてくれたりします。
##ソースコードブラウザ
OpenGrok (TNF公式)やfxr.watson.orgにLXRベースのものがあります。
##コミット履歴
cvs logを使う他に、cvsweb.netbsd.orgや有志により作られているWebベースのものがあります。他にもコミットログが流れてくるsource-changesメーリングリストがTwitterアカウント(@netbsdsrc)があったりします。
##KNF
たまにKNFとだけ書かれたコミットログがあって、これはなんだろうと思ったことがあったのですが、KNFはKernel Normal Formの略で、要するにコーディング規約のことです。/usr/share/misc/styleにそのスタイルガイドがあります。
コーディングスタイルが統一されていると、コードが読みやすくて良いのですが、KNFではカバーできてないケースも多く、書くときにはたまに迷ったりします。
#開発インフラ
##バグトラッキングシステム (BTS)
GNATSという古いシステムが使われています。Web経由で誰でも投稿ができますが、データベースの情報を更新するにはedit-prというCLIツールが必要になります。
分類機能がいまいちで見難いため、developerの人が手作業で分類していたり、有志の人が検索サイトを用意してくれていたりします。
BTSについては、これといった移行計画はないようです。
##自動ビルド、自動テスト
VCSやBTSは古いですが、自動ビルドや自動テスト環境はわりと充実しています。
###カーネルの自動ビルド
なんらかのコミットがあると、いくつかのアーキテクチャのカーネルの自動ビルドが走ります。もしビルドに失敗すると通知が飛びます。
###全体のビルド
また定期的にソースコード全体のビルドが実施されます。全アーキテクチャがビルドされるのでかなり時間がかかります。
###自動テスト
NetBSDにはATF (Automated Testing Framework)という自動テストフレームワークがあります。ユーザプログラムやライブラリやカーネルのリグレッションテストを行なうことができます。このページにテスト環境一覧があります。いろいろなアーキテクチャのテストをQEMUや実機上で行なっています。AnitaというソフトウェアがビルドからQEMU上でのテストまで自動的にやってくれます。
KyuaというATF 2.0という位置づけのプロジェクトもあるみたいですが、現状がどうなっているのかわかりません。
####rump kernel
自動テストの一部はrump kernelというユーザレベルで動くNetBSDカーネル上で実行されるものも多いです。rump kernelを使う場合は、テストの実行環境にテストが影響を受けない(逆にテストが実行環境に影響を与えない)ので、テスト向きな機能だと思います。
rump kernelは単にテストを実行するため以外にも、もっと汎用的に使えます。例えば、rump kernelはLinuxやFreeBSDでも動かすことができ、Intel DPDKのアプリとしてNetBSDのネットワークスタックを利用することができます。
rump kernelのプロジェクトは、NetBSDから半分独立しているため、NetBSDのコードを(CVSを使って)チェックアウトしなくてもビルドして実行させることができます。rumprunをというツールを使えば、NetBSD以外のOS(例えばLinux)上でも簡単にrump kernelをビルドすることができます。
rump kernel専用のマルチプラットフォーム対応の自動ビルドテストがあったりします。
#BSDファミリー
昔からNetBSDのユーザだったわけではないので、他のBSDファミリーとの関係はあまり知りません。ですが、/usr/share/misc/bsd-family-treeに、これまでの歴史が書かれているため、ある程度のことは知ることができます。特に4.3BSD, 4.4BSD Liteから{Free,Net,Open}BSDが出てきた辺りは興味深いですね。
最近できたBSD派生のOSといえばBitrigでしょうか。OpenBSDのフォークであるBitrigはRoadmapに楽しそうなのがあって興味深いです。ARM MPとかKVM supportとかEFI supportとか。
BSD系ではないですが、NetBSD関連でいうと、Minix 3がNetBSDのlibcやユーザランドのプログラムを移植しているみたいです。実際、Minix 3のソースコードのディレクトリ構成はNetBSDにかなり近くなっています (build.shとかtoolsとか)。
#おわりに
というわけで、NetBSDを使い始めて1年で学んだことをまとめてみました。NetBSDを使っている人やこれから使おうとしている人のお役に立てれば幸いです。