NetBSD初心者向けの(非技術系)基礎知識

この記事は、[NetBSD Advent Calendar 2014](http://qiita.com/advent-calendar/2014/netbsd)の12/20担当分として書かれました。

#はじめに

とある事情により、1年ほど前からNetBSDを使い始めました。外から見てると気づかないけど、中に入ってみると分かる(みんな知ってる)ことをまとめてみます。

#コミュニティ
##The NetBSD Foundation
[The NetBSD Foundation](http://www.netbsd.org/foundation/)とは、NetBSD開発の母体となる法人で、知的財産権や商標を持っている組織[らしい](https://en.wikipedia.org/wiki/NetBSD#The_NetBSD_Foundation)です。NetBSD developer(後述)の人たちは、この組織のメンバになっています(同意書にサインをしている)。boardとかcoreとかadminsとか肩書を持っている人がいますが、知らなくてもなんとかなります。

TNFと略されることがあります。(最初、何のことだかわからなくて困った。)

##NetBSD developer
NetBSD developerと言ったときは、単に開発に貢献しているだけでなく、前述のTNFのメンバになり、ソースコードへのコミット権を持っている人を指します。[developers.html](http://www.netbsd.org/people/developers.html)に現メンバのリストが公開されています。(また、[ここ](http://www.netbsd.org/gallery/xplanet/)を見ると誰がどの国に住んでいるかわかる。)

どうやってメンバになるかは、[application-procedure.html](http://www.netbsd.org/foundation/policies/application-procedure.html)にその流れが書いてあります。基本的には、NetBSDへ何かしらの貢献をしていると、現メンバに誘われて、メンバ参加を申請、異論が出なければメンバなる、という流れになるはずです。

##ML
NetBSDにはメーリングリストが[たくさん](http://www.netbsd.org/mailinglists/)ありますが、全部を見てる人はいないと思います。カーネル開発者であれば、``current-users``と``tech-kern``あたりを見ていれば良いと思います。(あとは自分の興味のあるアーキテクチャのML(``port-*``)。)

##Blog
[あります](http://blog.netbsd.org/)が、新板のリリースとか大きな変更が入ったときぐらいしか更新はありません。

##SNS
いくつかのTwitterアカウントとFacebookページがあります。

- [@netbsd](https://twitter.com/netbsd): 一般
- [@netbsdsrc](https://twitter.com/netbsdsrc): コミットログ
- [Facebookページ](https://www.facebook.com/NetBSD)

##日本人
NetBSD developerな日本人はわりと多いです([developers.html](http://www.netbsd.org/people/developers.html)参照)。

[日本NetBSDユーザーグループ](http://www.jp.netbsd.org/ja/JP/index.html)というユーザグループがあって、色々なOSS関連のイベントに参加してるので、ご存じの方も多いと思います。[Facebookページ](https://www.facebook.com/NetBSD.jp)もあるようです。

#ソースコード
NetBSDは各種ソースコードのバージョン管理ソフトウェア(VCS)に[CVS](http://cvsweb.netbsd.org/bsdweb.cgi/)を使っています。そう、CVSです。

とはいえ、非公式ですがgitレポジトリも存在します。

- https://github.com/jsonn/src
- https://github.com/IIJ-NetBSD/netbsd-src

また、[CVS Migration for NetBSD repos](https://wiki.netbsd.org/projects/project/cvs-migration/)というWikiページがあって、CVSから別のVCS(おそらくDVCSのどれか)に移行しようという計画はあるようです。本当に移行するのかは不明ですが。

##current
NetBSDのメインブランチです。masterとかtrunkとか言われているやつです。developerはこのブランチで開発をしています。なので、リグレッションやエンバグなどよくあることです。developer以外にも使っている人がいて、``current-users`` MLで不具合報告をしてくれたりします。

##ソースコードブラウザ

[OpenGrok](http://nxr.netbsd.org/) (TNF公式)やfxr.watson.orgに[LXRベースのもの](http://fxr.watson.org/fxr/source/?v=NETBSD)があります。

##コミット履歴
cvs logを使う他に、[cvsweb.netbsd.org](http://cvsweb.netbsd.org/bsdweb.cgi/)や有志により作られている[Webベースのもの](http://www.nerv.org/netbsd/)があります。他にもコミットログが流れてくる[source-changesメーリングリスト](http://news.gmane.org/gmane.os.netbsd.devel.cvs)がTwitterアカウント([@netbsdsrc](https://twitter.com/netbsdsrc))があったりします。

##KNF
たまにKNFとだけ書かれたコミットログがあって、これはなんだろうと思ったことがあったのですが、KNFはKernel Normal Formの略で、要するにコーディング規約のことです。/usr/share/misc/[style](http://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=HEAD&content-type=text/x-cvsweb-markup)にそのスタイルガイドがあります。

コーディングスタイルが統一されていると、コードが読みやすくて良いのですが、KNFではカバーできてないケースも多く、書くときにはたまに迷ったりします。

#開発インフラ
##バグトラッキングシステム (BTS)

[GNATS](http://www.gnu.org/software/gnats/)という古いシステムが[使われています](http://gnats.netbsd.org/summary/)。Web経由で誰でも投稿ができますが、データベースの情報を更新するには[edit-prというCLIツールが必要になります](http://www.netbsd.org/developers/PR.html)。

分類機能がいまいちで見難いため、developerの人が[手作業で分類](http://www.netbsd.org/~dholland/buglists/)していたり、有志の人が[検索サイト](http://www.nerv.org/gnats/)を用意してくれていたりします。

BTSについては、これといった移行計画はないようです。

##自動ビルド、自動テスト

VCSやBTSは古いですが、自動ビルドや自動テスト環境はわりと充実しています。

###[カーネルの自動ビルド](http://build.tastylime.net/builders/)
なんらかのコミットがあると、いくつかのアーキテクチャのカーネルの自動ビルドが走ります。もしビルドに失敗すると通知が飛びます。

###[全体のビルド](http://releng.netbsd.org/cgi-bin/builds.cgi)
また定期的にソースコード全体のビルドが実施されます。全アーキテクチャがビルドされるのでかなり時間がかかります。

###自動テスト
NetBSDにはATF (Automated Testing Framework)という自動テストフレームワークがあります。ユーザプログラムやライブラリやカーネルのリグレッションテストを行なうことができます。[このページ](http://releng.netbsd.org/test-results.html)にテスト環境一覧があります。いろいろなアーキテクチャのテストをQEMUや実機上で行なっています。[Anita](http://www.gson.org/netbsd/anita/)というソフトウェアがビルドからQEMU上でのテストまで自動的にやってくれます。

[Kyua](https://github.com/jmmv/kyua/)というATF 2.0という位置づけのプロジェクトもあるみたいですが、現状がどうなっているのかわかりません。

####rump kernel
自動テストの一部は[rump kernel](https://github.com/rumpkernel/)というユーザレベルで動くNetBSDカーネル上で実行されるものも多いです。rump kernelを使う場合は、テストの実行環境にテストが影響を受けない(逆にテストが実行環境に影響を与えない)ので、テスト向きな機能だと思います。

rump kernelは単にテストを実行するため以外にも、もっと汎用的に使えます。例えば、rump kernelはLinuxやFreeBSDでも動かすことができ、Intel DPDKのアプリとしてNetBSDのネットワークスタックを利用することができます。

rump kernelのプロジェクトは、NetBSDから半分独立しているため、NetBSDのコードを(CVSを使って)チェックアウトしなくてもビルドして実行させることができます。[rumprun](https://github.com/rumpkernel/rumprun-posix)をというツールを使えば、NetBSD以外のOS(例えばLinux)上でも簡単にrump kernelをビルドすることができます。

rump kernel専用のマルチプラットフォーム対応の[自動ビルドテスト](http://build.myriabit.eu:8012/waterfall)があったりします。

#BSDファミリー
昔からNetBSDのユーザだったわけではないので、他のBSDファミリーとの関係はあまり知りません。ですが、/usr/share/misc/[bsd-family-tree](http://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/bsd-family-tree?rev=HEAD&content-type=text/x-cvsweb-markup)に、これまでの歴史が書かれているため、ある程度のことは知ることができます。特に4.3BSD, 4.4BSD Liteから{Free,Net,Open}BSDが出てきた辺りは興味深いですね。

最近できたBSD派生のOSといえば[Bitrig](https://www.bitrig.org/)でしょうか。OpenBSDのフォークであるBitrigは[Roadmap](https://github.com/bitrig/bitrig/wiki/Roadmap)に楽しそうなのがあって興味深いです。ARM MPとかKVM supportとかEFI supportとか。

BSD系ではないですが、NetBSD関連でいうと、[Minix 3](http://www.minix3.org/)がNetBSDのlibcやユーザランドのプログラムを移植している[みたいです](http://wiki.minix3.org/doku.php?id=developersguide:portingnetbsduserland)。実際、[Minix 3のソースコードのディレクトリ構成](http://git.minix3.org/index.cgi?p=minix.git;a=tree)はNetBSDにかなり近くなっています (build.shとかtoolsとか)。

#おわりに
というわけで、NetBSDを使い始めて1年で学んだことをまとめてみました。NetBSDを使っている人やこれから使おうとしている人のお役に立てれば幸いです。