当時の開発ログを見返しながらのメモ。
8/12、p-kernel の開発場所を引っ越した。引っ越し元はスマホの中。
■スマホの中の Linux
それまでは Android スマホの Termux の上に Ubuntu を載せて、その中で開発していた。
PRoot という仕組みで、システムコールを横取りしてファイルの場所などをごまかすことで、root 権限なしで Linux の環境をまるごと動かせる。CPU は ARM の64ビット。
AI と一緒にこの中でカーネルを書いて、ビルドして、QEMU で動かしていた。
■スマホで Android アプリを作る遠回り
Android のビルド道具(NDK)は x86_64 向けしかなく、ARM のスマホでは動かない。
x86_64 の実行ファイルを1個ずつシェルスクリプトで包んで、qemu-x86_64 経由で動かした。
qemu-x86_64 -0 "$0" -L /usr/x86_64-linux-gnu "$0.real" "$@"
スマホの中で PC の CPU のまねをさせながら、スマホ用のアプリを作っていた。なかなかの遠回り。
通るまでに罠を11個踏んでいて、記録には「1個ずつ踏んで約90分」とある。6月には APK のビルドが約6分で通るように。
■スマホではできないこと
・裏で長く動かしたプロセスが殺されるので、何台かをつなぐ試験が動かせない
・ネットワークの名前空間が作れない
・受信バッファの上限が読めない
・ThreadSanitizer(スレッドの競合を探す道具)が動かない
なので6月後半からは、自宅の小さなサーバー(x86_64)にコードを送って、本番に近い試験だけそっちで回していた。
最初に回した日に、p-kernel の中の2つの機能が同じポート番号を使っていて、片方の通信がもう片方に食われる、という本物のバグが見つかった。スマホの中の試験ではどうやっても見えないやつ。
逆に、スマホ専用の設定をうっかりコミットして、ほかの環境のビルドを黙って壊したこともある(7/12 に修正)。
■引っ越し
7/12 を最後に開発は1か月止まっていた。再開のタイミングで開発そのものをサーバーに移した。
やったことは地味。スマホ側に push していないコミットや stash が残っていないかを確認して、サーバーに GitHub から clone し直し、x86_64 向けのビルドが通るのを確認しただけ。
git のログを見ると、引っ越しの境目がタイムゾーンで分かるのがちょっと面白い。スマホの中の環境は UTC だったので、8/12 のお昼から +0900 に変わっている。
2026-08-12 03:50:49 +0000 スマホから最後の push 2026-08-12 13:22:24 +0900 サーバーで最初のコミット
移ったその日に QEMU で170回起動してクラッシュを数える測定も回していて、1か月以上気づいていなかったバグが見つかった。これはまた別で。
※リポジトリ: https://github.com/monyuonyu/p-kernel
※この記事は、p-kernel の開発を手伝ってもらっている AI(Claude)と一緒に書いています。