- はじめに — 成功した創業者が再び低レイヤーへ
- なぜターミナルか — 鈍った腕を取り戻す
- Zigという賭けと、その代償
- 義務のないオープンソース — 原則と特権のあいだ
- おわりに — ターミナル、最も見えない道具
- 参考資料
はじめに — 成功した創業者が再び低レイヤーへ
Mitchell Hashimotoは、長い説明のいらない名前です。Vagrant、Packer、Consul、Terraform、Vault、Nomad、Waypoint — ここ10年ほどのインフラ道具の多くは彼の手から生まれ、彼はHashiCorpを共同創業しました。そんな人物がいま何を作っているかというと、ターミナルエミュレータです。しかも、まだ1.0にも達していないZigという言語で。最近公開されたインタビュー(alexalejandre.com)で、彼はその理由をかなり率直に語っています。
本稿はそのインタビューを土台に、三つの点を追います。成功した創業者がなぜ低レイヤーのコードへ戻ったのか、Zigという賭けの実際のコストは何か、そしてオープンソースの保守について彼が示す、人によっては居心地の悪い明快な立場です。最後に、この blog が先日扱った「良い道具は見えない」というテーマにターミナルを重ねてみます。ターミナルほど見えない道具も、そうそうないからです。
なぜターミナルか — 鈍った腕を取り戻す
彼の動機は、野心というより好奇心に近いものです。放置して鈍っていた技術の腕を、もう一度研ぎ直したかったといいます。具体的には三つの領域でした。AI以前のやり方のGPUプログラミング、デスクトップと単一ノードのシステムプログラミング、そしてZigの習得です。ターミナルエミュレータは、この三つを一度に触れられるプロジェクトでした。
印象的な告白があります。15年もCLIを作ってきながら、ターミナルが内部でどう動くのかを実は分かっていなかった、というのです。Ghosttyの最初の目標はささやかでした。彼の言葉では、vimとコンパイラを中で動かし、"have it build itself, then throw it away"(自分自身をビルドさせて、あとは捨てる)という実験だったそうです。ところがDiscordで友人に見せると、実際に使い続けたい人が現れ、長い非公開ベータを経て、使い捨てのはずが本物のプロジェクトになりました。
ここで正直に触れておくべき点があります。これは誰にでもできる選択ではありません。お金にならない低レイヤーのオープンソースに何年も注ぐことは、すでに経済的な自由を得た人にはずっと容易です。彼はいま、生後6週間の子を抱えて、1日3時間ほどしかコンピュータに向かわないと述べます。その余裕こそが、後述する「義務はない」という哲学の背景であり、彼の主張を公平に読むうえで一緒に置いておくべきものです。
Zigという賭けと、その代償
Zigはまだ1.0以前です。魅力的に聞こえますが、実務では破壊的変更を意味します。彼は0.15が "the writer interface and thus anything printing anything"(出力インターフェース、ひいては何かを出力するすべて)を変えたと述べます。つまり、印字に関わるコードがほぼ全部揺さぶられたわけです。面白いのは、彼がこれを不満ではなく称賛として語ることです。新しいAPIは格段に良い、というのです。
彼のZig擁護は、安定性ではなく方向性への信頼です。ZigのBDFLであるAndrew Kelleyが、必要だと判断した変更から退かない姿勢を、彼は好みます。コンパイル速度へのこだわりも同じです。彼いわく libghostty 全体を事実上「即座に」ビルドできるのに、"Andrew still thinks these milliseconds are too slow"(Andrewはそのミリ秒すら遅いと考えている)というのです。機能を足すだけでなく、コンパイルを速くするために機能を削る言語であること — それを彼は美点とみなします。
だからRustへの態度も予想どおりです。彼はRustの文化が好きではないと言い、"I also don't like soccer"(サッカーも好きじゃない)と付け加えます。好き嫌いに理由はいらない、という意図的に軽い言い回しです。彼がZigに向ける最も温かい言葉は、"unapologetically weird"(悪びれず変だ)という敬意でした。言語ごとに、他の言語にはある機能が欠けていること自体を、彼はむしろ歓迎します — その制約が創造性と文化を生む からだ、というのです。
私見を足すなら、これは本物の賭けです。初期のGoを早くから採用した彼の経歴を思えばパターンの反復ですが、1.0以前の言語を選ぶ代償は実在します。リリースのたびに移行という宿題が来るのです。彼はその宿題を「良い変化」と呼びますが、それも結局、彼が引き受けると決めた保守の税金にほかなりません。
義務のないオープンソース — 原則と特権のあいだ
インタビューで最も論争的なのは保守に関する箇所で、彼の立場は明快です。オープンソースの保守者はユーザーに何の義務も負わない、と。根拠はライセンスそのものです — "as is, no warranty"(現状のまま、無保証)がライセンスの最初の一行であり、それが契約だというのです。より強い保証が欲しいなら、対価を払ってソフトウェアを買えばいい。ベンダーと顧客の関係が生まれて初めて、要求する資格が生じる。オープンソースにその資格はない、という整理です。
彼はこれを守りにだけ使うのではありません。方向性を守る道具でもあります。毎日ユーザーの issue ばかり潰していたら "stable, stagnant software"(安定しているが停滞したソフトウェア)になっていた、と彼は言います。実際、ユーザーが個別に挙げた三つか四つの機能要望を、一度にまとめて閉じたことがあるそうです。各自の要望をそのまま実装する代わりに、それらを貫く一つの設計を選んだのです。
フォークについての考えも根は同じです。彼は、個人用であれ維持されるものであれ もっとずっと多くのフォークがあるべきだ と昔から信じてきた、と述べます。これが単なる標語でないのは、アーキテクチャがそれを支えているからです。Ghosttyはターミナル全体を libghostty というライブラリとして包み、その上にアプリを載せます。きれいにライブラリになっていれば、ユーザーは上流に陳情する代わりに、自分のやり方で包んだりフォークしたりできます。「義務はない」が無責任に転がり落ちないためには、ユーザーに自力で解決できる面を渡す必要がある — ライブラリ優先の設計が、その面です。
それでも一つ、但し書きを添えたいと思います。「義務はない」は原則としては正しいのですが、それを気軽に言える立場は均等ではありません。Ghosttyのように既に愛され、生計を賭けずに済む保守者が作るとき、この一文は解放です。しかし、ある企業が依存するライブラリを一人で背負い、燃え尽きと罪悪感のあいだに挟まれた保守者にとって、同じ一文は届きにくい理想に近いものです。彼の原則は健全です。ただ、その原則を生きられる余裕までが等しく配られているわけではありません。
おわりに — ターミナル、最も見えない道具
ターミナルは道具のなかの道具です。よくできたターミナルは、一日中目の前にありながら、存在を意識させません。この blog では先日、gingerBillの「良い道具は見えない」を扱いましたが(その記事)、ターミナルほどその主張に当てはまる対象も稀です。HashimotoのGhostty哲学も響き合います。彼は、機能が豊富であることと肥大していることを区別します — 使わない機能はディスクとメモリを少し占めるだけで実行はされず、彼の言葉では "a free feature"(ただの無料機能)です。そして彼は、ターミナルベースのアプリケーションが組み合わせ(composition)に向いていること、つまり良いターミナルが良い自動化とスクリプト化につながることを強調します。
成功した創業者が再び低レイヤーへ降りた話から私が受け取るのは、結論ではなく姿勢です。彼は15年その上で作ってきたものを理解していなかったと認め、安定性ではなく方向性に賭け、保守の負担については耳あたりの良い言葉ではなく自分の原則を語りました。そのすべてに同意する必要はありません。ただ、自分が何を作り、何を背負うと決めたのかをこれほど明快に語る人は稀で、その明快さこそ学ぶ価値のある部分です。
参考資料
현재 단락 (1/19)
Mitchell Hashimotoは、長い説明のいらない名前です。Vagrant、Packer、Consul、Terraform、Vault、Nomad、Waypoint — ここ10年ほどのインフ...