# Linuxカーネルインタフェース
## 定義
Linux カーネルインタフェースとは、Linux カーネルのサブシステムがユーザー空間プロセスへリソース・情報・サービスを提供し、またカーネルサブシステムの設定・チューニング・監視を可能にするための通信機構の総称である。理想的なインタフェースが持つべき 4 性質は、アーキテクチャ可搬性・イベントベース通知・拡張性・大規模データ転送効率である。Linux の主要インタフェースには、仮想ファイルシステム系(/dev・/proc・sysfs)と BSD ソケット系(ioctl・ソケットオプション・Netlink)が含まれる。(Source: [[@2010__SPE__Communicating between the kernel and user-space in Linux using Netlink sockets]])
## 横断的知見
- (まだ 1 ソースのみ。2 ソース目以降に追記予定)
## 未解決の問い
- /proc・sysfs はカーネルバージョンによって ABI の安定性がどう変化したか?
- eBPF マップや BPF_PROG_QUERY はこの分類フレームワークのどこに位置づけられるか?
- io_uring は「大規模データ転送」の代替として Netlink と比較されているか?
- ioctl は 2024 年現在の Linux カーネルでどの程度新規追加されているか? Netlink への移行は完了したか?
## 主要インタフェースの比較(Table I より、2010 年時点)
| インタフェース | アーキテクチャ可搬性 | イベント通知 | 拡張容易性 | 大規模転送 |
|---|---|---|---|---|
| システムコール | No | No(限定的) | No | Yes |
| /dev | No | No | No | Yes |
| /proc | Yes(テキスト) | No | No | No |
| Sysfs | Yes(テキスト) | Yes(Netlinkを使用) | No | No |
| ソケット(Netlink除く) | No | No | No | Yes |
| Netlink | Yes | Yes | Yes | Yes |
## 関連
- [[Netlinkソケット]] — 4 性質すべてを満たす Linux の代表的カーネルインタフェース
- [[eBPF]] — 現代のカーネル-ユーザー空間計装手段
- [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]] — DTrace は Solaris での同類の問いを扱う
## 出典
- [[@2010__SPE__Communicating between the kernel and user-space in Linux using Netlink sockets]]