Sula: Scryer Prolog で書かれた Gemini プロトコルサーバー

2026/08/06 3:52

Sula: Scryer Prolog で書かれた Gemini プロトコルサーバー

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

本文では、パッチ適用済みの Scryer Prolog を基盤として構築された、安全かつ軽量な Web サーバー「Sula」を紹介します。堅牢な TLS サポートと優雅なシャットダウン機能により即座に価値を提供します。より重い代替案とは異なり、Sula はシステムメモリを枯渇させることなく、ホストの

openssl(1)
ツールを利用してバイナリファイルのストリーミングおよびホスト名検証を効率的に行います。そのアーキテクチャは、ネイティブのコピーストリームビルトイン機能を有効にする特定のアップストリームパッチと、暗号化用の Rust ポートに依存し、負荷下でも安定したパフォーマンスを実現します。インストールにはリポジトリのクローン実行、
cargo install --path .
の実行、および PATH に
openssl(1)
が存在するかを確認する手順が必要です。コマンドラインでオプションフラグ(バインドアドレス/ポート、ホスト名検証 [デフォルトは localhost]、コンテンツディレクトリ、証明書パス)を指定して起動できます。提供されたホスト名がサーバー証明書と一致しない場合、起動時に中止されます。シャットダウンは Ctrl+C を通じて優雅に行われ、ログ記録後にコード 0 でクリーンに終了します。コア機能には rustls を 통한 TLS、PKCS#12 識別ファイルのサポート、
/etc/mime.types
からの MIME ネゴシエーション、ネイティブバイナリストリーミングが含まれます。エラー処理はハンドシェイク失敗および切断を検出してループを継続しますが、その他のエラーでは例外を再スローします。プロジェクトには
config.pl
mime.pl
log.pl
などのいくつかのモジュールが含まれています。今後、このプロジェクトはキー/証明書ペアのサポート、クライアント証明書、ファイルベース設定、ユーザー管理、CGI スクリプト、完全なステータスコード、レート制限、仮想ホスティング、包括的なファイルロギングといった高度な機能との統合を計画しています。
.gmi
コンテンツタイプを含む現代の Web トラフィックを安全に扱う低負荷ソリューションを求める開発者や企業にとって、安全性と簡素性を両立しつつ、拡張された機能を目的として現在もアクティブに開発が行われている Sula は有望な代替案です。

本文

/sula/: Scryer Prolog による Gemini プロトコルサーバー

/sula/ は、Scryer Prolog で実装された Capsule サフィックスに対応するスペイン語用の Gemini プロトコルサーバーです。

要件と環境設定

Sula は修正を加えた Scryer Prolog(ブランチ

js/fixes
)に依存します。このパッチ版 Scryer Prolog は、以下の機能を含んでいます:

  • ストリーミング処理: プロログのヒープ上にデータを保持せず、TLS クライアントへのバイナリファイルボディを直接流せるネイティブな
    $copy_stream/2
    ブルトイン関数を実装。
  • EOF 処理修正:
    library(pio)
    buffer_prepare_for_n/5
    を修正し、プロセスパイプなどのストリームが EOF で正しく終了するようにし、無限ループを防ぐ。
  • SIGINT ハンドリング:
    socket_server_accept/4
    に非ブロッキングのポリングループを追加し、
    SIGINT
    をブロック系システムコールにトラップされるのではなく、キャッチ可能な
    $interrupt_thrown
    例外として処理する。
  • 移植性: rustls へのポート対応。
  • クライアント証明:
    tls_server_negotiate
    を修正し、オプションのクライアント証明書を受け付けるようにした。

ビルドとインストール

以下のコマンドで修正版 Scryer Prolog を構築・インストールします:

git clone https://git.sagredo.dev/scryer-prolog -b js/fixes
cd scryer-prolog
cargo install --path .

※ 重要: 起動時にアイデンティティ証明書の CN(共通名称)を読み込み、設定したホスト名と一致するかを

openssl(1)
で確認するため、環境変数
$PATH
openssl
が必ず存在している必要があります

実行方法

sula.pl
は複数のスクリプト言語に対応するポリグロットスクリプトです。起動時に
$env:SWI_PROLOG_PATH
ではなく
PATH
上の
scryer-prolog
を直接検出・実行し、エントリーゴールとして
sula:run/0
を呼び出します。

./sula.pl \
    --addr HOST:PORT \
    --hostname NAME \
    --content DIR \
    --certs DIR

コマンドラインオプション

すべてのオプションは順序不問です。認識できない項目は静かに無視されます。

オプション意味デフォルト値
--addr HOST:PORT
リスニングソケットのバインドアドレスとポート
127.0.0.1:1965
--hostname NAME
証明書の期待される CN。不一致の場合は起動時エラーで終了
localhost
--content DIR
サーバーするファイルのルートディレクトリ
./site
--certs DIR
cert.pem
key.pem
を含むディレクトリ
なし(必須)

サーバーの停止

Ctrl+C を押すとクリーンなシャットダウンが実行されます:

  1. リスニングソケットが閉じられる。
  2. トップレベルキャッチで「Shutting down」とログに記録される。
  3. プロセスはステータス 0 で終了します。

機能概要

  • セキュリティ: rustls を使用した TLS および PKCS#12 アイデンティティファイル対応。
  • ホスト名の検証: 起動時に
    openssl x509
    を呼出し、証明書の CN が
    --hostname
    と一致するかをアサーションします(不一致の場合はエラー)。
  • コンテンツネゴシエーション: 拡張子に基づいて MIME タイプを決定し、
    mime/2
    を使用します。起動時に
    /etc/mime.types
    がパースされ読み込まれます。
    .gmi
    ファイルには
    text/gemini
    が割り当てられます。
  • 効率的なレスポンス:
    • テキストレスポンスは
      format/3
      を使用して送信。
    • バイナリレスポンスは
      $copy_stream/2
      (ファイルから TLS ソケットへ)でストリーミングされ、プロログのヒープを介したメモリ転送なしで処理されます。
  • エラーハンドリング:
    • TLS ハンドシェイク失敗や接続切断についてはログに記録してループを継続します。
    • 他のエラーはトップレベルで表面化します。
  • グレースフルシャットダウン: 修正された Scryer の
    socket_server_accept/4
    を通じて、
    SIGINT
    による丁寧な停止が可能。

ファイル構成

各ファイルの役割は以下の通りです:

  • sula.pl: ポリグロットランチャーおよびメインの sula モジュール(
    run/0
    、リクエストループ)。
  • config.pl: CLI オプションの解析(DCG)および設定アクセッサー(
    cert/1
    ,
    addr/1
    など)。
  • cert.pl: 証明書の読み込みおよびホスト名 vs. CN チェック。
  • mime.pl:
    /etc/mime.types
    のパース(DCG)および
    mime/2
    ファクト(事実)。
  • request.pl: リクエストラインリーダー。
  • gemini_uri.pl: Gemini URI DCG(
    gemini://host[:port]/path[?query]
    )。
  • ip.pl: IP アドレスの認識処理(Gemini ホストとして拒否されます)。
  • response.pl: レスポンスステータスコードの DCG。
  • log.pl: タグ付きログ出力機能
    log_msg/3
  • banner.pl:
    banner.txt
    の読み込みおよび行ごとの表示(
    display_banner/1
    )。

今後の予定機能

以下の機能を追加する予定です:

  • アイデンティティ.p12 の代わりに鍵と証明書を使用
  • クライアント証明書対応
  • 設定ファイルからの読み込み
  • ユーザーの保存および読み込み機能
  • CGI スクリプトの実行
  • すべての HTTP ステータスコードへの対応
  • レート制限(Rate Limiting)
  • 仮想ホストリング
  • ファイルロギング
  • マルチスレッディングやホットリロード機能の検討

同じ日のほかのニュース

一覧に戻る →

2026/08/06 3:52

Zed デルタ DB

## Japanese Translation: DeltaDB は、すべてのコード変更を生成した特定のエージェント会話を密接に連携させることで、進行中の作業を記録する次世代のバージョン管理システムです。従来のコミットおよびプッシュサイクルを必要とするシステムとは異なり、DeltaDB ではワークツリーをバーチャライズ化することで、開発履歴のどの時点においても、エージェントがタスクを実行している最中であっても自由なオンデマンドブランチングを実現します。 本システムは各操作に安定したアイデンティティを付与し、コードの経時的な進化を高精度に追跡可能としています。最も重要なのは、すべての変更が元の会話に明示的に結び付けられており、ユーザーは任意のロジックを形作ったメッセージを瞬時に追跡したり、チャットログから影響を受けたファイルへナビゲートしたりできることです。これにより、アクティブなスレッド内でのリアルタイムコラボレーションをサポートし、摩擦を排除します。 その結果、チームメンバーは進行中のエージェントタスクに参加して実行中のエージェントと対話し、変更が生じるにつれて注釈を追加し、新たなブランチを容易に作成することが可能になります。このアプローチは、すべての利害関係者にコード変更の背後にある根拠が見える化されることにより、AI 支援開発における透明性と説明責任を高めると同時に、レビューヤーや注釈付け者が堅牢なコミットサイクルを待ったりワークフローを中断したりすることなくライブプロジェクトにシームレスに統合できることを可能にします。

2026/08/06 1:19

発見のループ

## Japanese Translation: Discovery Loop は、最先端 AI と莫大な計算能力を活用して反復的な実験ループを完全に自動化し、科学的進歩の変革を目指しています。Jeff Dean、Sanjay Ghemawat、Quoc Le、Oriol Vinyals など、AI および分散システムの分野で最も引用されている研究者の一部を代表する先駆者們が率い、Google Search、TensorFlow、AlphaFold、Gemini などの重要インフラの背後で数十年にわたる協力を有しています。彼らのビジョンは、少量で精悍なチームが並行して数千もの実験を同時に提案し、実行し、そこから学習することを可能にし、従来の大規模チームよりもはるかに高い研究品質を達成しつつイテレーション時間を大幅に圧縮することです。 当初は自身の技術スタックの最適化を行っていましたが、Discovery Loop は次に機械学習を超えて、より広範な科学と工学の領域へと展開する計画を立てています。この自動発見インフラをスケールさせることで、より良い医薬品の開発、ヘルスケア情報学の進歩、太陽エネルギーの価格低廉化、安全な水のアクセス確保、サイバー空間の保護、科学的発見のためのツールの設計といった重要な世界的課題に取り組んでいます。結局のところ、同社は機械学習および工学タスク向けの完全自動化システムを通じて、無数の分野でイノベーションを加速させ、人類が迅速な進歩を遂げられることを目的とした世界規模のソリューションを提供することを目指しています。

2026/08/06 4:50

AndroidからLinuxへのスマートフォン乗り換えを決意しました

## Japanese Translation: 2026 年 8 月 2 日、著者は Google の Android プラットフォームの方向性に日益の不満を抱き、主にプライバシー保護とジェスチャー操作に優れた Linux ベースのオペレーティングシステムである SailfishOS に主たる Android スマートフォンを切り替えることを決断した。具体的には、AI 機能の必須化、深いカスタマイズを妨げるロックされたデバイスツリー、ユーザーの自由を制限するアプリストアポリシーといった不満があった。Fairphone 4 (AOSP) から移行する過程において著者は SailfishOS で重大な障害に直面した。これらには、古くなったシステムライブラリ (Python および glibc)、Waydroid などのコンテナアプリとの互換性の破損、GPS サポートの問題、そして品質の低いコミュニティ製アプリケーション(コードが不適切な WhatsApp クライアントを含む)が含まれる。Ubuntu Touch も検討されたものの、アプリエコシステムの悪さ、Bitwarden に影響する通知/クリップボード同期の問題、平均的なネイティブアプリ、VIVO ユーザーによる電話番号のブロック機能の欠如という理由で却下された。その結果として著者は 2 台の端末を用いたハイブリッド構成を維持している:現在の Fairphone は重要な Android 固有サービス(ノルウェーおよびブラジルにおいて必要な銀行検証ソフトウェア、ブラジルにおける Uber などのセキュリティアプリ)へのアクセスのためにホットスポットとして機能する一方、新しい SailfishOS デバイスは代替 OS の実験に使われている。今後の計画には、この旅路を文書化し、ノルウェーへ戻った際により良いハードウェアサポートを受けられる Jolla Phone 2 を購入することを含み、プライバシーに注力する代替手段と不可欠なプロプライエタリアプリの世界的必要性との間にある持続的なギャップを浮き彫りにするものである。著者はこの構成に加えて Galaxy A17 をバックアップ用スマートフォンとしても使用している。

Sula: Scryer Prolog で書かれた Gemini プロトコルサーバー | そっか~ニュース