pipe の挙動を実装に問題のある Android アプリのために修正する
2019 年に Linux kernel の pipe の再実装が行われ、その際に reader が必要な場合にのみ起動される動作に変更されていました。しかし、一部の Android のライブラリでは epoll の仕様の誤解により、pipe の変更により問題が生じることが確認されました。Android のライブラリ側が仕様に沿っていないことが問題の原因に見えますが、do not break user space (kernel を仕様するアプリケーションに影響を与えない) というルールを優先して、pipe の再実装でリグレッションが生じたと認め修正が行われました。
pipe のコミットメッセージを読むと、realm-core というライブラリが例として挙げられています。
realm-core 側では正しい実装に修正されましたが、モバイル上で動作できるデータベースとして使用されているため、他の多くのアプリケーションにも影響が出る可能性があることを考慮されたようです。
仕様を正しく理解していないアプリケーション側が悪いと判断できそうな事象ではありますが、広範囲に影響が及んでしまうということで、kernel 開発の難しさを感じられます。
Android では長らく Linux 5.5 が使われていたため、この kernel の変更は 2019 年に行われていましたが、影響が確認されたのは最近になってのことになりました。Linux 5.10 は Android 12 以降で使用される場合があります。今回の pipe の修正は Linux 5.14 に対して行われていますが、Linux 5.10 を含む過去のバージョンにもバックポートされるようです。
参考文献: