
2026/07/18 6:15
Matheus Moreira へのインタビュー:Lone Lisp と Linux カーネルについて
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Matheus Moreira は、C 標準ライブラリを使用せずに Linux システムコールを直接実行する独立型の Lisp インタープリタ「Lone」を開発しました。glibc の
getrandom など重要な機能における遅延に触発され、彼は最初によりシステムコールを取り囲む「liblinux」というラッパーを作成しました。カーネル内の内部ヘッダー nolibc.h を発見した後、彼は liblinux をアーカイブし、数十年にわたる libc の遺産問題(グローバル状態である errno や locale、設計が不適切な API である gets や atexit など)を避けた真に独立した環境を実証する目的で Lone に転換しました。Lone は初期段階では少数のシステムコールのみを使用します(例:execve、mmap),大きなユーザー空間スタックを回避します。Moreira は以前 Rust を検討し、Zig を称賛しており、また若者時代は CRuby VM を研究した後、システムレベルの言語設計に焦点を当てました。
Lone は Common Lisp 風の再起動可能な条件ハンドリングシステムと適切なテール呼び出し最適化機能を備えています。パフォーマンスベンチマークの結果では、Ruby( gems のロードが必要)よりも起動が速い一方、バイトコードがないリストレベルの解釈モデルによるものであり、Python よりも 10〜100 倍遅いことが示されました。Moreira は 2019 年に医学部を卒業した医師で、現在はクリニックで働いている間、Termux を通じて Android で Lone の開発を行っています。彼は Lone で自身の一部のツールの置き換えを計画しており、コアロジックは自分で書く一方でコードレビューとプロジェクト管理には AI(Claude)を利用しています。彼の目標は、技術的な負担を伴わずに OS と直接相互作用するシステムを構築することで、開発者が自分のコンピューティングスタックに対して画期的な所有権を持つことを促すことにあります。
本文
マテウス・モレイラ氏インタビュー:Linux システムコールと「Lone Lisp」への道
1. プロフィールと経歴
- インタビュアー: アレックス・アレハンデロ (Alex Alehanero)
- 被取材者: マテウス・モレイラ (Matheus Moreira)
- 主な成果物: 直接 Linux システムコールにアクセスする言語「Lone Lisp」の開発
- 背景: C 言語、Linux カーネルの深い知識を有し、システムプログラミングにおける新しいパラダイムを提案。
2. プログラミングへの道筋
- きっかけ: ゲーム『メガマン バトルネット』シリーズに触れ、英語学習の機会として掲示板でのコミュニケーションを始めました。
- 初期言語: C++ を学び始め(Dev-C++ と cplusplus.com のチュートリアル参照)、後に Java、Ruby、Pythonへと挑戦しました。
- Schemeとの出会い: 「極めてエレガント」と感じた Scheme に到達し、最終的には Lisp へ至ります。
- Rubyの愛着: 最も長く愛用し、Rails プロジェクトを開始するなど現在も使用しています。Git パーサー「Acclaim」を開発した経験もあります。
- C言語への回帰: 低レベルなシンプルさが魅力的で、CRuby VM のソースコード探究を通じて「なぜ Ruby がこう動くか」を理解するようになりました。
- Java や C++ は現代では実質的に新しい言語のように進化しており、基礎的な理解が追いつかなくなりました。C で再構築する選択肢を選びました。
3. 「Lone Lisp」と Linux システムコール
liblinux (lone) の理念
- 目標: libc(glibc など)を介さず、Linux カーネルのシステムコールインターフェースに直接アクセス可能な C ラッパーライブラリ
を作成。liblinux.a - 背景:
- 公式な C ライブラリがない理由について Greg Kroah-Hartman氏に質問した際、「klibc」プロジェクトが過去にあったが、現在では内部ツール
が存在すると回答されました。nolibc.h - カーネル開発者たちが内部で似たアプローチを採用していることに気づき、これを一般化・公開する道を選びました。
- 公式な C ライブラリがない理由について Greg Kroah-Hartman氏に質問した際、「klibc」プロジェクトが過去にあったが、現在では内部ツール
- 名称変更: プロジェクトは「Lone Lisp」へと発展し、システムコールを介したスタンドアロンの Lisp 環境を実現します。
スタンドアロンの C モードでの改善点
liblinux(および Lone Lisp)では、C の遺産問題を大幅に削減できます:
- グローバル状態の排除:
の扱いを独自化。errno- 再帰的なテーマを含む複雑なローカル環境設定を回避。
- API の再設計:
- 不適切な API(
,gets
,atexit
,signal
など)を排除。malloc - 自前のアロケータを実装し、メモリ管理の完全性を確保。
- 不適切な API(
- クリーンな実装: glibc の複雑なソースコードではなく、musl libc のような清潔なリポジトリから学び、ゼロから機能を実装する能力を養いました。
「裸金属 (Bare Metal)」環境の実現
「なぜコンパイラにシステムコールサポートを内蔵できないのか?単に
キーワードを追加し……中間の libc のバカげたもの不要。」— マテウス・モレイラsystem_call
- 広範な GNU ツールも捨て、Linux のシステムコールバイナリインターフェースのみで動作する環境を構築。
- システムコールコード自体は最小限であり、通常の関数呼び出しと同様に機能します。
4. Lone Lisp の技術詳細
アーキテクチャと特徴
- 起動プロセス:
- 親プロセスから
だけで開始。execve - 内部メモリ管理には約 12 回
を使用(合計 300 以上のシステムコールのうち一部のみ利用)。mmap
- 親プロセスから
- 自己完結性:
- ELF セグメントを読み取り、そこにコードを実行する機能を持つインタプリタ。
- インタプリタ自体をコピーし、Lisp コードを追加することで自立型プログラムを作成可能(埋め込みセグメント機能)。
- エラー処理システム:
- Common Lisp 風の再試行可能コンディションを採用。
- 制限付き継続 (Controlled Continuations) を実装。スタックのコピーと「再生」を実現し、例外を値としてキャッチ可能にしました。
言語デザインとシンタックス
- インスピレーション: Ruby の楽しさと Scheme の清潔さを融合。
- リストリベルなインタプリタ: バイトコードコンパイルを行わず、評価機が直接リストを処理する方針です。
- 理由: リストをバイトコードに変換すると Lisp の本質が失われるため。
- シンタックス:
- Clojure, Ruby, Python 等を採用しているネストした構文を採用。
とシンプルに記述可能(従来の(let (a b c d ...) body...)
と異なる)。(let ((a b) ...) ...)
- 制御構造:
とcontrol
の 2 つのプリミティブで、継続を直接呼び出し可能な設計。transfer- クロージャの実装基盤として機能します。
パフォーマンス
- 起動速度: Ruby gems のロードよりも早く終了可能。スクリプト実行においては Python に比べて優位性があります。
- 実装方針:
- バイトコードコンパイルに抵抗し、リスト処理の純粋性を維持。
- 将来的には JIT コンパイラー(C インタプリタをブートストラップ基線として)を導入する計画。
5. AI と開発プロセス
- AI の活用: Claude を「マネージャー」として使用。コードレビュー、プロジェクト管理、文書化に依存しています。
- メリット:
- 15 年以上の単独開発から脱却し、第三者視点による批判と未開発領域の特定が可能に。
- ガーベージコレクタやメモリアロケータなどのアルゴリズム改善に寄与。
- 注意点: AI にコード生成自体を任せることは過度な慎重さになりうるため避けています(教育的価値のためには手書きが重要)。
6. 将来のロードマップとプロジェクト目標
- 代替システム構築:
- 独自にメンテナンスしている静的サイトジェネレーター (
のフォーク) をPug.js
に書き換え。Lone Lisp - 独自のシェルとユーティリティを作成し、伝統的な Linux ユーザーランドを再構築する。
- 独自にメンテナンスしている静的サイトジェネレーター (
- 標準ライブラリの開発:
- Ruby/Scheme からインスピレーションを得たイテレーションプロトコルや文字列操作関数の実装。
- Hiccup 風のウェブフレームワークへの発展。
- 機能拡張:
の複雑な問題(NaN など)への対応、オーバーフローチェックの導入など。math.h
7. フィロソフィーとメッセージ
- ユーザーエンパワーメント:
- コンピュータは世界を変革する技術であり、個人が所有・管理すべきだと考えます。
- systemd や Rust/Zig のコミュニティのように、システムを再構築する「戦い」を選ぶべきです。
- 責任と所有意識:
- 破損したシステムは修正する責任がありますが、多くの人が責任を避けがちです。
- 「恐れることは何もない」という精神で、 libc や DNS など既存の層を剥がす勇気を持つことを願っています。
- 目標:
- 人々が自らのシステムを作り出し、探求することを鼓舞する。
- コンピュータの世界において「根本的な所有 (Radical Ownership)」を達成すること。
「ライブラリーを作る側でありたいのです。単に消費するだけではありません。」— マテウス・モレイラ