「FreeBSD 13.2-RELEASEリリースノート」注解

# はじめに

[FreeBSD 13.2-RELEASEリリースノート](https://qiita.com/koizumistr/items/950fb254456ce9ab084a)で個人的に気になったところに注をつけていこうかと思います。（と格好つけてみましたが、主に自分が知らなかった用語を調べた結果を列挙しているだけです。）

恒例のお断りですが、この文章の内容は、筆者が所属している会社・団体とは一切関わりがありません。いわゆる「自主的な研究の成果の発表」というものです。

# 「要約」
特に気になるところはありませんでした。「STABLE開発ライン」に関連して（詳しい内容は忘れましたが）「FreeBSDのリリースの形式がLinuxと違って勘違いした」みたいな記事をどこかで読んだような記憶もあります。が、慣れの問題でしょう。

# 「はじめに」
## リリースの正誤表
リンクになってませんが、おそらく https://www.freebsd.org/releases/13.2R/errata/ のことを言っているのだと思います。だとすれば、2023/5/13現在は何もない、ということになりそうです。

# 「FreeBSDの以前のリリースからのアップグレード」
特に気になるところはありませんでした。

# 「ユーザーランド」

## 「ユーザーランドの設定の変更点」
### growfs(7)
個人的には気にはならないのですが、「『この(7)って何だ』って言われた」みたいな記事を見かけたことがありますので、ちょっと説明を。これは対応するマニュアルを読みたい時に（Unix系のOSではmanでマニュアルが読めるよ、というのは知っている前提で）コマンドラインで
```
man growfs
```
ではなく
```
man 7 growfs
```
と入力せよ、ということです。はい、証拠。
"man growfs"とすると、![screenshot_growfs8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535021/2017e72f-aaa9-b311-a089-960b1583fd67.png)が表示されますが、"man 7 growfs" だと![screenshot_growfs7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535021/e92a8bf6-1909-6423-d60b-78991938cd5b.png)と違うものが表示され、今回リリースノートが意図しているのは後者だからです。まあ、growfsのように複数有る場合が問題なのであって、1つしかなければ数字を指定しようがしまいがどちらでもいいのですが、、、

## 「ユーザーランドのアプリケーションの変更点」
### virtio-input
virtioはvirtual I/O DEVICEの略で、名前にvirtualと入ってますから今を時めく仮想化関連の技術ですね。Linux方面で名前は聞いたことがありますが、仮想化はLinuxの専売特許という訳ではありませんから、FreeBSDにも導入されているってことなのでしょう、、、と思ったら、[Virtual I/O Device (VIRTIO) Version 1.2 ](https://docs.oasis-open.org/virtio/virtio/v1.2/virtio-v1.2.html)なんて仕様化されて公開されているんですね、知りませんでした。
ちなみに、inputでないvirtioにはFreeBSDで対応しているものがすでにあるようですので、今回の対応はvirtio全体が新しく追加されたという訳ではなく、「（既存の）virtioの仲間にinputも加わった」ということのようです。

### pts(4)
ptsというのはpseudo-terminal（疑似端末）のことみたいです。昔はハードウェアとしての端末を実際に使っていました（流石に私も実際にそんな経験はありません、、、、と断言しようと思ったのですが、よくよく思い出してみると、大学で似たようなことをやったことはあるような:sweat:）ので、今も「端末」って言ってますけど、今は上の方で例として出している画面のようにウィンドウの一つでしょう。ですので、コンピューターにウィンドウシステムが導入された時点で、「端末」は疑似というか仮想というか抽象というか、そんなものになっていたわけです。
なので、そういう疑似というか仮想というか抽象的な「端末」の概念自体は古いものですが、今の環境と相性がいいように実装を整理した（これは今回より前の話）、その整理された疑似端末にkillall(1) ユーティリティが対応したよ、ということなんでしょうか。

### ACS拡張機能
[Red Hatが出している文書](https://access.redhat.com/documentation/ja-jp/red_hat_virtualization/4.0/html/hardware_considerations_for_implementing_sr-iov/index)などによると、 ACSは"Access Control Service"の略みたいです。「PCIeでなぜアクセス制御？」と思いましたが、「仮想化されて複数のOSが動いている状況でアクセス制御がなかったら、他のOSの（PC内での）通信をのぞき見できてしまうよね」ということで、これも仮想化関連ですね。

### MSSクランプ
そもそもMSSが何か、ですが、Max Segment Size（最大セグメントサイズ）の略のようです。クランプというのは、漫画家（集団）さんのことではもちろんなくて、万力のことですね。最大セグメントサイズを万力で締め付けるようにぎゅっとして小さくする、ということなのでしょう。調べる過程で"(TCP) MSS Clamping"という表現を見かけましたので、通信の世界では一般的な言葉なのかもしれません。（私は知りませんでしたが:sweat:）

### Prometheus 
大規模システムを監視するのに使うOSSのことだそうです。詳しくは、例えば[デージーネットによる説明](https://www.designet.co.jp/ossinfo/prometheus/)を読んでください。

## 「提供されたソフトウェア」
### expat(libbsdxml)
expatは私にとっては馴染みの有るOSSなのですが、括弧内のlibbsdxmlというのは一体なんだろう、ということで、man libbsdxmlです。
> DESCRIPTION
>
> The libbsdxml library is a verbatim copy of the eXpat XML library version
2.5.0.
>
>（中略） 
>
> To avoid version and autoconfiguration issues, the library has been
renamed to libbsdxml rather than retain the original eXpat library and
include file names to prevent confusion and autoconfiguration issues for
3rd party software.

ということで、FreeBSD側の都合で名前を変えて取り込んでいるということみたいですね。

### xz-embedded
[XZ Embedded](https://tukaani.org/xz/embedded.html)のことですね。名前の通り組み込みを想定した小さなXZ展開プログラムのようです。

## 「ランタイムライブラリとAPI」
特に気になるところはありませんでした。

# 「カーネル」

## 「一般的なカーネルの変更点」

### vmm(8)
man vmmによれば
> vmm.ko – bhyve virtual machine monitor

だそうです。

### Intel Alder Lake(第12世代)云々

自宅でよく使っているCPUにIntelのものはないので、全く追いかけていませんでしたが、[Linux 5.16-rc3がリリース、Intel Alder Lakeで発生していたバグを修正](https://gihyo.jp/admin/clip/01/linux_dt/202112/01)とかに書かれている内容と関連するでしょうか。
違うかな、いや、かするくらいには関連はするかな、ということでよく分かりません。が、これ以上追いかけないことにします。自宅でよく使っているCPUにIntelのものはないので（大事なことなので二回言いました。あ、486と286があったかな、でも「よく」は使わない、、、）。

### PowerPCでは、pseriesのradix pmapが云々

ごめんなさい、全く分かりません。でも「POWER9」とか書いてありますし、私には縁遠い世界の話ではないかと思いますので、これ以上追いかけないことにします。

### vDSO(仮想動的共有オブジェクト)
[Linuxのman](https://linuxjm.osdn.jp/html/LDP_man-pages/man7/vdso.7.html)によれば
> "vDSO" (virtual dynamic shared object; 仮想動的共有オブジェクト) は、 カーネルが自動的にすべてのユーザー空間アプリケーションのアドレス空間にマッピングを行う小さな共有ライブラリである。 vDSO はほとんどの場合 C ライブラリから呼び出されるため、 アプリケーションは通常これらの詳細を自分では気にする必要はない。 このように、 標準関数と C ライブラリを使って通常の方法でコードを作成することで、 vDSO 経由で利用可能な機能が活用されることになる。
>
> いったいなぜ vDSO は存在しているのか？ カーネルが提供するシステムコールのいくつかは、 ユーザー空間のコードがこれらのシステムコールを頻繁に呼び出すことになり、 このような呼び出しが全体の性能を支配するようになる場合がある。 これは、 呼び出しの頻度と、 ユーザー空間から抜けてカーネルに入ることによるコンテキストスイッチのオーバーヘッドの両方に起因する。
>
> この文書の残りの部分は、 一般の開発者向けというではなく、 好奇心がある人と C ライブラリの開発者向けの内容となっている。 もしあなたが C ライブラリではなく自分のアプリケーションで vDSO を呼びだそうとしているのであれば、 ほとんどの場合間違ったことをしていることだろう。

ということなので、「へー、はーん、ふーん、ほー」。

# 「デバイスとドライバ」
## 「デバイスドライバ」
### em(4)
man emによれば
> em – Intel(R) PRO/1000 Gigabit Ethernet adapter driver

だそうで。

### ena(4)
man enaによれば
> ena – FreeBSD kernel driver for Elastic Network Adapter (ENA) family

だそうで。それより個人的に気になるのは、「Amazon, Inc. 後援」ですね。AmazonがFreeBSDをそれなりに使っている、と。（AWSでFreeBSDが動くのだから当たり前か、、、）

### irdma(4) RDMAドライバが云々
RDMAというのはRemote Direct Memory Accessの略で、リモートのメモリの内容を直接読み書きするという技術のようです。普通は、リモートなのですから、OSが頑張って、CPUが頑張って、とかとか有るはずなのですが、それをすっとばしてDirectということなのでしょう。ということで、高速化技術の1つです。
RoCEv2というのはRDMA over Converged Ethernetのバージョン2ということらしいです。一方、iWARPというのはInternet Wide Area RDMA Protocolの略のようです。RDMAを実現するプロトコルが2種類あるみたいですね。私はここまででお腹いっぱいになりましたので、（日本語で）より詳しく知りたい方は、RoCEv2については[この辺り](https://blog.bobuhiro11.net/2020/11-25-rocev2.html)を、iWARPについては[Wikipedia](https://ja.wikipedia.org/wiki/Internet_Wide_Area_RDMA_Protocol)を読んでみてはいかがでしょう。（WikipediaにRoCEの日本語記事はないみたいですね、、、）

### KPI
kernel programming interfaceの略のようです。APIがApplication Programming Interfaceの略なのですから、カーネルに対してはKPIということになるのでしょう。

# 「ストレージ」
特に気になるところはありませんでした。

# 「ブートローダーの変更点」
特に気になるところはありませんでした。

# 「ネットワーク」
## 「一般的なネットワーク」
ここでは、初めて見る用語やうろ覚えの用語が多く出てきますが、そのほとんどが文章の中で説明されているので、用語の数の割には引っ掛かるところは多くありませんでした。
が、技術的なものではないですが、「Netflix 後援」というのは気になりました。NetflixもFreeBSDをそれなりに使っているのでしょうね。

### DPDK
「dpdk_lpm4」と「dpdk_lpm6」に共通して出てくるDPDKですが、Data Plane Development Kitの略のようです。詳しくは例えば以下のサイトを読んでください。

https://www.ntt-tx.co.jp/column/dpdk_blog/20180920/

上で出てきたRDMAと同じで、「不要な」処理をすっ飛ばす高速化技術の一種のようです。

### FIB
Forwarding Information Baseの略で、IP転送表、と言うものらしいです。詳しくは例えば以下のサイトを読んでください。

https://www.allied-telesis.co.jp/support/list/switch/x900_sb900/doc/v522_docs/overview-3.html

### SCTP
Stream Control Transmission Protocolの略で、ストリーム制御伝送プロトコルだそうです。詳しくは例えば[Wikipedia](https://ja.wikipedia.org/wiki/Stream_Control_Transmission_Protocol)を読んでください。TCPやUDPの仲間だと思っておけば（少なくとも今の私にとっては）十分な気がします。

# 「将来のFreeBSDリリースに関する一般的な注意事項」
## OPIE
[Open Palmtop Integrated Environment](https://ja.wikipedia.org/wiki/OPIE)のことでしょうか[^opie]。本当にそうなのか全く自信がないですが、深追いはしないことにします。

[^opie]: はずれでした。[14.0-RELEASEのリリースノート](https://qiita.com/koizumistr/items/275b31942b434da6a79b)を読むと分かるのですが、ワンタイムパスワード機能(One-time Passwords In Everything)のことです。https://man.freebsd.org/cgi/man.cgi?query=opie&sektion=4 ですね。


## ce(4)およびcp(4)同期シリアルドライバ
私の手元のPCではman 4 ceとかman 4 cpとかやっても何も表示されないのですが、どういうことでしょう。ま、同期シリアルドライバとのことですから、深追いはしないことにします。

## ISAサウンドカード
[ISA](https://ja.wikipedia.org/wiki/Industry_Standard_Architecture)ですか、、、いや、まあ、むしろ今まで残っていたことが驚きかも。少なくとも今更説明する必要はないでしょう。
ISAと聞くと、個人的には[Cバス](https://ja.wikipedia.org/wiki/C%E3%83%90%E3%82%B9)とか言いたくなりますが、、、

## ATM
ATMといっても、銀行にあるあの機械[^bank-atm]のことではありません。
Asynchronous Transfer Modeの略で、非同期転送モードのことです。私の若い頃は、「未来の高速通信を担うのはこれだ」みたいな話もあったような気がしますが、、、、あ、こんなこと書くと年齢がばれますね。

## 「デフォルトのCPUTYPEの変更」
これは用語を知らないわけではないですが、i386と言う名前なのにすでに「デフォルトの CPUTYPE が 486」だったことに感慨を覚えました。まあ、「今自分が持っているPCにFreeBSDインストールしてみるか」となった時に、「今自分が持っているPC」は普通64ビットCPUなのでamd64の方を選ぶでしょう。かなり特別な事情がない限りは、わざわざi386は選ばないのではないでしょうか。（元の文書にもこの辺りの言い訳がいろいろ書いてありますね。）

[^bank-atm]: 銀行とかのものはAutomated / Automatic Teller Machineの略で、日本語だと現金自動預け払い機と言うようです。詳しくは[Wikipedia](https://ja.wikipedia.org/wiki/%E7%8F%BE%E9%87%91%E8%87%AA%E5%8B%95%E9%A0%90%E3%81%91%E6%89%95%E3%81%84%E6%A9%9F)を見てください。