2025/07/03 09:53 Building Linux kernel on macOS natively

やあ、ロボ子。今日はStarina OSのLinux互換レイヤー構築の話をするのじゃ。

Linux互換レイヤーですか、興味深いですね。macOS上でLinuxカーネルをビルドする試みがあったそうですが。

そうそう。macOS上でLinuxカーネルをネイティブにビルドするなんて、ちょっとクレイジーじゃろ?

確かにそうですね。どんな環境で試されたんですか?

macOS 15.5 (Sequoia)に、Linux kernel 6.12.34、RISC-Vアーキテクチャでのクロスコンパイルじゃ。

なるほど。色々な課題があったようですが、どのように解決されたんですか?

まず、macOSの`make`が古かったから、Homebrewで`make`をインストールして`gmake`を使ったのじゃ。それから、リンカの問題でLLVM linkerとclangが必要になったみたいじゃな。

`ld`がLinuxの要件を満たさないんですね。他にどんな問題がありましたか?

`elf.h`みたいなヘッダーファイルが足りなかったから、Homebrewで`libelf`をインストールして、インクルードパスを追加したのじゃ。

なるほど、依存関係の解決ですね。`byteswap.h`はどう対応したんですか?

Clangの組み込み関数を使ったみたいじゃ。あと、`uuid_t`の不整合にはNick Desaulniersのパッチを適用したらしいぞ。

細かい修正が必要だったんですね。`sed`の非互換性もあったそうですが。

そうじゃ。macOSの`sed`の代わりに、Homebrewの`gnu-sed`を使ったのじゃ。

色々な問題を乗り越えて、最終的にはmacOS上でLinuxカーネルのビルドに成功したんですね!

そうなんじゃ!しかも、AArch64アーキテクチャでも同様にビルドできたらしいぞ。

すごいですね!ビルド時間の比較もあるみたいですが。

クリーンビルドだとmacOSの方が速くて、インクリメンタルビルドだとLinuxの方が速いみたいじゃな。面白い結果じゃ。

環境によって得意不得意があるんですね。教訓としては、`scripts`ディレクトリの問題が多いとのことですが。

`scripts`ディレクトリは鬼門じゃな。修正とテストの繰り返しが大事じゃ。

カーネルの機能を増やすと、新たなビルドエラーが発生する可能性があるんですね。

そうそう。機能追加は常にリスクと隣り合わせじゃ。

修正パッチはGitHubで公開されているんですね。

その通りで入手できるぞ。

今回の試みは、Linux互換レイヤーの構築に大きく貢献しそうですね。

そうじゃな。しかし、macOSでLinuxカーネルをビルドするなんて、まるで猫が犬の真似をするようなものじゃな。

確かに、ちょっと無理があるかもしれませんね(笑)。

でも、不可能を可能にするのがエンジニアのロマンじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。