💾 Archived View for tilde.pink › ~kyo › ja › gemini-toha.gmi captured on 2021-12-04 at 18:04:22. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-03)
-=-=-=-=-=-=-
2021年9月22日
ざっくりいうと、ジェミニ(gemini)はhttpのような通信プロトコルですが、httpより単純化しているという特徴があります。仕様書は一日ぐらいで読めるほど短く、誰でも自由にサーバやクライアントが容易に作れます。自分で全文読んだところ、不明点がないほど明解でした。
httpでいうウェブサイトはジェミニ界でカプセル(capsule)と呼びます。
セキュリティの面では、プロトコルの単純さのおかげで、仕様からズレずに実装しやすく、検査もしやすいでしょう。tlsによる通信の暗号化が強制されています (tlsバージョンv1.2とv1.3が許されています)。また、javascriptのようなクライアント側のスクリプト実行がありません。ページ読み込みのために、ただ一つの通信しか許可されていなく、ユーザがリンクをクリックしなければブラウザは新たな通信を始められません(唯一の例外はリダイレクトですが、これらも仕様書でしっかり定義されていて、悪用されないように制限されています)。
仕様書を読んだだけで、いかにセキュリティを大切に考えてくれているのかが伝わります。あらゆる例外のケースとその適切な対応が標準化していて、クライアントの挙動確認のためにトーチャーテストのカプセルが用意されています。
プライバシーの面では、使用に当たりクライアントがサーバに送る情報とサーバが返却する情報は仕様書に明確に定義されています。クライアントの場合、アクセスしたい資料のパスしか送らないので、サーバに見えるのはそのパスとクライアントのIPアドレスのみです。サーバの返す応答は、ステータスが一行とページの内容自体。ステータスの形式も明確に仕様で定義されています。現在、ユーザのプライバシーを侵害し得る機能は、ジェミニプロトコルにはないと言われています。更に、そういう機能が後で加わらないように、仕様書の拡張は許されません。現在の仕様書は最終版です。
httpにhtmlがあるように、ジェミニにはジェムテキスト(gemtext; .gmi)というマークアップ言語があります。ジェムテキストはマークダウンに若干似ていますが、ジェミニらしく単純化しています。マークダウンを使用しない理由はいくつかありますが、その中にマークダウンは実際標準化していない点(実装によって挙動が異なります)、または実装の難しさから生じたプログラミングのバグが多い点が挙げられます。
ジェムテキストでは、一行をどう処理すればいいかは、最初3文字で決まっています。これでパーシングが非常に楽になります。例えば3文字「=> 」で始まる行はリンクで、一文字「#」で始まる行はヘッダーです(htmlの<h1>に当たる)。決まっている3文字以下のパターンに当てはまらない行を普通のテキストとして扱います。しかしこれによって、インラインスタイルが不可能になるので、リンクをそれぞれ別の行に書くしかありません。
ジェミニに関するリンクを張りますので、気になる方はぜひ見てみてください。(英語が読めない方は、deeplなどの翻訳サービスが便利です)