世界を動かす技術を、日本語で。

Tilck: 小型のLinux互換カーネル

概要

  • Tilck は教育用途の モノリシックカーネル で、Linuxバイナリ互換性を持つ設計。
  • i686RISCV64 アーキテクチャに対応し、主に組み込み用途を想定。
  • 小規模・シンプル設計 で、実機ハードウェアでも動作可能。
  • Linuxプログラム (例:BusyBox、Vimなど)をそのまま実行可能。
  • 将来的には ネットワーク・ストレージ対応ARM移植 も計画中。

Tilckとは何か

  • Tilck は教育用に設計された モノリシックカーネル
  • Linuxバイナリ互換性 を持ち、i686とRISCV64で動作。
  • 小規模・シンプルな設計 のため、カーネルモードの学習や実験に最適。
  • 独自アプリは不要で、 Linux用ツールチェーン(gcc-musl等) でビルドしたプログラムがそのまま動作。
  • BusyBox などの一般的なLinuxプログラムも実行可能。

Tilckの将来計画

  • 組み込みシステム 向けに普及を目指す方針。
  • 超低レイテンシ・決定論的動作 を実現し、Embedded LinuxとRTOS(FreeRTOSやZephyr)間のギャップを埋める存在。
  • ARMファミリ への移植や、 MMU非搭載CPU への対応も検討中。
  • 3MBメモリ でも起動可能な軽量設計。
  • ネットワーク(UDP+IP)ストレージ(fat32, ext2等) の基本機能を追加予定。
  • Raspberry Pi 3/4 など特定SoCでのネットワーク・ストレージ両対応がマイルストーン。

Tilckが「目指さないもの」

  • Linuxの再実装や代替 を目指すものではない。
    • Linuxプログラム互換性は動作検証やツールチェーン活用のため。
  • デスクトップOS用途 は想定外。
    • Xサーバ非対応、デスクトップ機能追加予定なし。

TilckとLinuxの違い

  • Tilck はマルチユーザーサーバやデスクトップを対象としない。
  • Linux は多機能・高複雑性だが、Tilckは シンプルなコード小さいバイナリ決定論的挙動超低レイテンシ を重視。
  • 開発・テストが容易 で、堅牢性も重視。

Tilckの特徴

  • プリエンプタブルなモノリシック*NIXカーネル (約100種のLinuxシステムコール実装)。
  • アーキテクチャ依存部分は最小限で、 多アーキテクチャ対応性
  • ユニットテスト として他アーキテクチャへのビルドも可能。

i686サポート

  • レガシーハードウェア (8259 PIC、8254 PIT、16550 UARTなど)と 最新機能 (SSE、AVX、ACPIなど)両対応。
  • ACPI による電源管理やバッテリ情報取得も可能。
  • 実機ハードウェア での動作を重視し、USBブートで検証。
  • QEMU や実機(BIOS/UEFI/CSM/UEFI専用)で動作確認済み。
  • 教育的価値 の高いドライバは仮想環境のみでのテストも例外的に許容。

riscv64サポート

  • 組み込み向け に最適化。
  • RV64スーパーバイザモードSV39ページテーブル、ユーザ空間FPU対応。
  • デバイスツリー ベースのドライバモデル採用。
  • QEMU 仮想環境や Sipeed licheerv-nano ボードに対応。
  • UART(ns16550)INTC/PLIC 割り込みコントローラドライバ搭載。
  • キーボード非対応、入出力はシリアルポート利用。

ファイルシステム

  • ramfs (リンク・スパースファイル・メモリマッピング対応)、 devfs (最小実装)、 FAT16/32(読み取り専用)sysfs (ACPI・PCI情報表示)を実装。
  • VFS で複数ファイルシステムを同時利用可能。
  • ブロックデバイス未対応、全てインメモリ。

プロセス・シグナル

  • スレッド(カーネル内) 管理、fork()/vfork()・コピーオンライト実装。
  • waitpid()、プロセスグループ 対応。
  • POSIXシグナル は部分実装(カスタムハンドラ対応、SA_*未対応等)。
  • TLS(スレッドローカルストレージ) もlibmusl互換のため実装。

I/O

  • read()/write() に加え、 readv()/writev() (ベクタI/O)、 ノンブロッキングI/Oselect()/poll() 対応。

コンソール

  • Linux互換度90%以上 のコンソール実装(テキスト/フレームバッファ両対応)。
  • Vim の動作を目標に開発、構文ハイライト等も対応。
  • 複雑なアプリ も動作可能な堅牢性を実証。

ユーザー空間アプリ

  • BusyBoxVimTinyCCMicropythonLuafbDOOM など多様なアプリが動作。
  • 詳細は Wikiページ 参照。

Tilckの起動(x86)

  • Tilck独自ブートローダ (BIOS/UEFI両対応)搭載。
  • ビデオモード選択・カーネルファイル選択・コマンドライン編集 が可能。
  • Multiboot 1.0対応ブートローダ (例:QEMU内蔵、GRUB)でも起動可能。

まとめ

  • Tilck は教育・組み込み向けの Linuxバイナリ互換モノリシックカーネル
  • 小型・シンプル・実機重視 設計で、将来的には ネットワーク・ストレージ・ARM対応 も視野。
  • Linuxと異なる用途・設計思想 で独自進化を目指すプロジェクト。

Hackerたちの意見

READMEが意外に長くて面白かったよ。osdevの人には読む価値あり!

数ヶ月ごとに、新しい「オペレーティングシステム」カーネルが登場するけど、ハードウェアの抽象化がなくてVMでしか動かないやつばっかり。Tilckはそんなのじゃない!Tilckは本物のオペレーティングシステムだよ。実際のハードウェアで動くし、前のやつらが占領してるスペースに、Tilckはほとんど空いてなかったギャップを埋めてると思う。

いいね!xv6(1975年の第六版Unixの現代的な再実装、いわゆるライオン本)とフルLinuxカーネルの中間点として面白そうだ。LicheeRV Nanoで動いてるのを見るのは素晴らしいね。これは$9のRISC-Vボードで、1.0 GHzの64ビットCPU(C906)、MMU、FPU、128ビットベクターユニット(RVVドラフト0.7.1)、256MBのパッケージ内DDR3を搭載してる。Pentium IIIやPowerPC G4の中期と同等だね。Milk-V Duo 256M(同じSG2002 SoC)やDuo S(SG2000で512MB RAM、$9.90)や元のDuo(密接に関連するCV1800Bで64MB RAM、$5)へのポートはとても簡単だと思う。今のところネットワークやブロックデバイスのサポートはないし、マルチコアもなさそうだね。

Altivec付きのG4は、マルチメディアに関してはPIVとSSE2でほぼ同等だったね。

「現時点ではネットワークやブロックデバイスのサポートはなく、マルチコアもないみたい。」私が使っていた初期のLinuxはマルチコアサポートがなかったし、ネットワークなしのLinuxも想像できるけど、ブロックデバイスがないってどういうこと?キャラクターデバイスだけってこと?じゃあFATドライバーはどう動くの?

面白いけど、マルチユーザーサポートがないのは残念だな。著者がマルチユーザーサポートについて再考してくれることを本当に願ってるよ。chmod/chgrpみたいなコマンドでファイルの所有権を他のユーザーやグループに設定できるようになるだけでも、NFSサーバーをホスティングする道が開けるから。

そのファイルシステムの互換性の話が、もっと大きなハードルだね。正直言って、君のユースケースには、もっと堅牢なプラットフォームの方がいいと思うよ。Tilckは教育用に作られてるもので、情報セキュリティやデータの堅牢性の意味では安全じゃないから。

ファイルシステムにuser:groupを記録して、クライアントにサービスする時以外はランタイムで無視するってのもアリかも?例えば、rootで動いてるLinuxファイルサーバーは、自分のユーザーを変えなくても権限や所有権をチェックできるし。(面白い思考実験として、セッションごとにフォークしてクライアントユーザーに切り替えると、カーネルが権限を強制することで「無料」でファイル権限が得られるかも…)

「教育用」って書いてあるのは分かるけど、小型の組み込みデバイスにも適してるかな?ブートローダーの部分を入れ替えれば、などなど。

過去の議論: 3年前、75件のコメント。 https://news.ycombinator.com/item?id=34295165 (当時はriscv64なし) 5年前、7件のコメント。 https://news.ycombinator.com/item?id=28040210

すごくいいね!起動がこんなに早いのが見れて嬉しいし、Doomも動くんだね(フレームバッファで): https://www.youtube.com/watch?v=Ce1pMlZO_mI (それに、開発者がCSを学びたい学生に成長するためのアドバイスをくれるのもいいね - YouTubeのコメントで)

短くていい動画だね。Vimを紹介していて、Linuxのシステムコールのサブセットでコンパイルするには結構大きなソフトウェアみたい。

私たち「おじいちゃん」世代にとって、教育用のMinixで育ったけど、Tilckはこの点でどれくらい役立つの?

Tilckは小さくて決定論的なモノカーネルで、現在約100のLinuxシステムコールをLinux互換の方法で実装しているんだ。教育用の良いツールだけど、最終的にはLinux互換のRTOSカーネルになる予定。現在、muslに対して静的リンクされたバイナリをサポートしていて、約3メガのRAMで起動して動作する。目標の一つは、教育目的に役立つくらい小さくてシンプルなコードベースにすること。もう一つは、最終的に組み込みシステムで実用的に使えるようにすること。

これめっちゃクールだね。3.5インチフロッピーディスクでNATファイアウォールとしてLinuxを動かしてたのを思い出す。