Openrsync: OpenBSD チームによる rsync の実装

2026/05/30 19:51

Openrsync: OpenBSD チームによる rsync の実装

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

要約

Japanese Translation:

中核となるメッセージは、openrsync が BSD 許 Cano の下で実装され、OpenBSD ベースシステムに公式にマージされており、厳密な移植性を確保しているという点である。当初は

rpki-client
プロジェクト向けに開発され、NetNod や IIS.SE などの組織からの資金援助を受けており、パフォーマンスとクロスプラットフォームの整合性のために C で約 10,000 行書かれている。このソフトウェアは標準的な
configure
make
コマンドによるインストールが可能であり、既存の rsync インストールと競合しない。セキュリティが最重要であり、OpenBSD の固有の特徴である
pledge(2)
を利用してシステム操作を制限し、特に MD4 ハッシュシードが
time(3)
ではなく
arc4random(3)
を使用する際に、ファイルシステムへのアクセスを
unveil(2)
で制限する。標準クライアントとは異なり、openrsync は暗号化のために protocol 27 のサポートを厳密に要求し、コマンドライン引数の子集合のみを受け付ける。効率性については、ディレクトリをファイル前に処理するために共有されソートされたメタデータリストを利用して達成され、Adler-32 および MD4 を含むハッシュ戦略を用いる。技術的には
socketpair(2)
パイプまたはネットワークソケット上で通信を行い、最新の rsync(3.1.3 でテスト済み)との互換性を保ちつつ、特定のマニュアルページ (
rsync(5)
,
rsyncd(5)
, および
openrsync(1)
) による標準的なドキュメントを提供する。

本文

openrsync システム解説

概要

  • ベースシステム: OpenBSD ベース統合システム
  • コントリビューション: OpenBSD へのパッチは
    tech@openbsd.org
    宛てにメール送信してください
  • 役割: OpenBSD バージョンと移植性を確保するためのアダプタ(グルー)コードのみを含む
  • ライセンス: **BSD(ISC ライセンス)**元の rsync 実装
  • 互換性:
    • 最新の rsync と互換性あり(テスト環境:バージョン 3.1.3)
    • プロトコルバージョン 27 をサポートする任意のバージョンでも動作
  • サポート対象:
    • 公式:OpenBSD
    • 他 UNIX システムでもコンパイル・動作可能(詳細は「移植性」参照)
  • 文書情報:
    • 公式ドキュメント:マニュアルページ(
      rsync(5)
      rsyncd(5)
      openrsync(1)
    • 「アーキテクチャ」と「アルゴリズム」の節は開発者向けの説明であり、公式文書ではありません

プロジェクト背景

  • 起源: OpenBSD 用 RPKI バリデーター
    rpki-client(1)
    プロジェクトの一部として記述
  • 資金源: NetNod, IIS.SE, SUNET, 6connect より提供

インストール方法

基本手順(最新 UNIX システム)

以下のコマンドを実行することでインストールできます。既存の rsync と併存可能です。

% ./configure
% make
# make install
  • 結果:
    openrsync
    ユーティリティおよびマニュアルページがインストールされる
  • アップグレード時は上記手順を再実行してください

サーバー利用設定

以下のように

--rsync-path=openrsync
を指定して実行します。

% rsync --rsync-path=openrsync src/* dst
% openrsync --rsync-path=openrsync src/* dst

重要: 両方のツール(openrsync と標準 rsync)を使用する場合は、共通のコマンドラインフラグを必ず利用してください(一覧は

openrsync(1)
を参照)。

アルゴリズムとブロック交換

アルゴリズム詳細

  • 参照文献:
    • Andrew Tridgell & Paul Mackerras: "The rsync algorithm"
    • Andrew Tridgell 博士論文: "Efficient Algorithms for Sorting and Synchronization"(ソースコード理解に推奨)
  • 構成要素:
    • 送信側 (sender): ソースファイルを管理
    • 受信側 (receiver): 宛先を管理

ブロック交換のフロー

ファイルリスト(名前・モード・変更時刻など)に基づき、両側でソートされた順序で処理します。

1. シンボリックリンク

  • 送信側への更新要求が発生しません
  • メタデータを確認し、正しい対象を修正

2. ディレクトリ

  • 存在しない場合は作成しますが、送信側への更新要求は発生しません

3. 通常ファイル(regular file)

処理手順:

  1. 最新判定: サイズと変更時刻が一致すれば最新とする
  2. ブロック分割: ファイルを固定サイズブロックに分割(倍数でない場合は最終ブロックが小さくなる。空の場合はゼロブロック)
  3. ハッシュ計算
    hash.c
    実装):
    • 1 つ目:Adler-32(4 バイト・高速)
    • 2 つ目:MD4(16 バイト・低速)
  4. 送信と照合
    block.c
    実装):
    • 受信側はハッシュを全て送信側に送る
    • 送信側は各バイトに対し高速ハッシュを計算し、一致を探る
    • 一致した場合は低速ハッシュで再確認(MD4 で完全一致か判定)
  5. データ転送:
    • 一致点以前のデータをストリームとして受信側に送信
    • ブロック識別子またはゼロ値を送信
    • 受信側はストリームを破棄し、指定されたブロックのみコピー
  6. ファイル末尾の場合:
    • ストリーム一括送信
    • 全体を MD4 ハッシュ計算(一致すれば完了)

ブロックサイズ

  • 計算式: ファイル全体の平方根(丸め上げ)
  • 制限事項:
    • 最小ブロックサイズ:700 バイト以上
    • 計算結果が整数でない場合、不明な理由により8 の倍数に切り上げられる
    • 例示定数としての「3」を使用する場合は
      ceil(sqrt(3))

アーキテクチャ

プロセス構成

セッションは以下の 2 つのプロセスに分かれます。

  • クライアントプロセス: ユーザー起動
  • サーバープロセス: SSH を介したオンデマンド起動、または永続的に動作するネットワークデーモン

リストと役割の判定

コマンドライン引数から送信側/受信側を自動判定します。

# クライアントが送信側 (ローカルデータをサーバーへ)
openrsync path/to/source host:destination

# クライアントが受信側 (サーバーデータを受け取り保存)
openrsync host:source path/to/destination

ホスト表記方法

  • ローカル:
    ../path/to/source ../another
  • リモートサーバー:
    host:path/to/source :path/to/another
  • リモートデーモン:
    rsync://host/module/path ::another

制約: ソースと宛先はすべてローカル、または同一ホスト上のすべてがリモートである必要があります(両方リモートは非推奨)。

  • リモートサーバーの場合: クライアントがフォークし、SSH でサーバー版を起動。双方は
    socketpair(2)
    パイプで通信。
  • リモートデーモンの場合: フォークせず、ネットワークソケット (
    socket(2)
    ) で接続。

サーバーコマンドライン

SSH セッション上での起動やデモンモードでも以下の形式が使用されます。

openrsync --server [--sender] . files...
  • files
    :受信モードは単一宛先ディレクトリ、送信モードはソースファイル一覧
  • 句点(
    .
    )の存在理由は未確定

実装担当ファイル

機能ファイル説明
メイン制御
main.c
ローカル性判定・ルート処理
サーバー機能
client.c
サーバー向けクライアントロジック
サーバー本体
server.c
サーバー実行主体
ネットワーク
socket.c
デーモン向けクライアントソケット処理
子プロセス管理
child.c
リモートサーバー起動管理
受信処理
receiver.c
ファイル宛先の管理
送信処理
sender.c
ソースファイルの管理

通信プロトコルと実装詳細

  • 使用プロトコル:
    rsync(5)
    (デーモン接続時は
    rsyncd(5)
    の手話式プロトコル併用)
  • 受信側の役割:
    1. 送信側にブロックメタデータをアップロード
    2. 送信されたデータを書き込む
  • 処理制御:
    • マルチタスク動作: アップローダー兼ダウンローダーとして実装
    • 実装ファイル:
      • アップローダー:
        uploader.c
      • ダウンローダー:
        downloader.c
    • 制御手法:イベントループと有限状態機(FSM)で入力/ディスク準備状況に応じた動作を管理

openrsync と標準 rsync の違い

  • rsync: 「ジェネレーター」という別モードが存在し、独立プロセスとしてフォークして通信。
  • openrsync: ジェネレーターと受信側を1 つのプロセスに統合。高速応答のためイベントループを使用。

セキュリティ

OpenBSD のネイティブ機能を活用した防御策を採用しています。

pledge(2) と unveil(2)

機能役割制限内容・例
pledge(2)システム操作権限の制限- 受信側:ディスク書き込みのみ許可
- dry-run モード (
-n
): 除外
- デーモン:DNS/ネットワークアクセス必須
unveil(2)ファイルシステムアクセス範囲の限定- root プライビレッジ不要
- 脱出(break out)防止
- 受信側で目的地ディレクトリ内の対象のみアクセス可能
  • chroot(2) との違い:
    pledge
    /
    unveil
    は root でも動作し、より軽量な制限が可能。

ハッシュ計算の安全性

  • サーバーモードでのみ適用
  • シード値生成のため**
    arc4random(3)
    **を使用(時間ベースの
    time(3)
    不使用)

移植性

公式サポート OS は OpenBSD ですが、他 OS への移植が積極的に行われています。

サポート状況と強制テスト

  • 対象 OS: Linux (glibc, musl), FreeBSD, NetBSD, Mac OS X, OmniOS
  • アーキテクチャ: x86_64, aarch64, s390x
  • 品質保証: GitHub CI メカニズムによる自動テストで対応が強制

移植上の課題

  • 核心的な問題: OpenBSD の
    pledge(2)
    および
    unveil(2)
    との適合性確保
    • これらの機能が欠けると、公開ネットワークから任意のデータを受け入れるリスクが生じる
    • (代替案として FreeBSD の Capsicum などが考えられるが、複雑度が高い)
  • Linux: セキュリティインフラが複雑で、適切にセキュア化するには専門的な知識が必要

コード量と信頼性について

openrsync は約 10,000 ラインの C コードですが、以下の問いかけと共に提供されています。

「私に間違いがないことを信じていただけるでしょうか?」

同じ日のほかのニュース

一覧に戻る →

2026/05/31 8:26

マイクロソフトが永続ライセンス付きのオフライン製品の機能制限を実施

## Japanese Translation: 2026 年 7 月 13 日、Microsoft は macOS および iOS 向けに永続ライセンス付きの Office アプリに対して重要な制限を施行し、Word、Excel、PowerPoint、Outlook、OneDrive のライセンス証明書が期限切れになった時点でユーザーを閲覧専用モードにロックします。これにより、これらの特定のデバイスでの完全な編集機能は事実上終了し、2023 年のサポート終了日以降もデータ安全性が恒久的に維持されるとの以前のアシuranse と大きな決別を示します。Windows や Android バージョンはこの証明書問題の影響を受けない一方、この機能劣化は Apple ハードウェア上の古い永続ライセンスを特定して対象としています。ユーザーは現在のソフトウェアを再インストールしても問題を修復することはできず、代わりに無料の Web アプリへ移行するか、新しいサブスクリプションベースのライセンスを購入する(または Office Home 2024 永続ライセンスの可能性もある)、あるいは LibreOffice、OnlyOffice、Pages のような代替スイートへ切り替える必要があります。Microsoft は Office 2021 ユーザーに対して限られた解決策を提供しており、バージョン 16.83 以降へのアップグレードが可能で、これは 2026 年 10 月までの新たな証明書を含んでいます。しかし、サポート終了済み Office 2019 を実行している場合に必要な閾値未満のハードキャップのため、有効なアップデートパスは存在しません。Microsoft は 2026 年 5 月中旬から影響を受ける顧客へ電子メールを送信し、代替策として無料の Microsoft 365 Personal トライアルを提供しています。この動きは、業界全体の広範な傾向を浮き彫りにしており、永続ライセンスは継続的な有料サポートや特定の技術パッチなしに長期的な機能維持のためにはますます信頼性が低いという事実を示しています。

2026/05/31 5:40

専門分野の知見こそが、本物の護城河であった。

## Japanese Translation: ソフトウェア開発における核心的な変化は、システム構築と検証を分離する「エージェント型 AI」の台頭であり、これにより深いドメイン知識が生のコーディングスキルよりも新たな最重要資産となっています。従来のエンジニアは、失敗を観察したり専門家の影を追うことによりドメインを習得しましたが、この育成型の道筋は現在、多くの場合に封殺されています。今日のエージェントは、物流スケジュールや給与計算規則といった複雑な業界データを調和させることで得られる暗黙的理解を再現するのが困難です。そのため、特定のバックグラウンドを持たない一般向けエンジニアは、AI が生成したコードを効果的に検証することができず、コーディングを行わない者もこれらの強力なツールを効果的に活用できません。未来の景観では、機械的なコーディング能力と深い業界専門知識を併せ持ち、「二重判断」を行う専門家—すなわちコードの健全性と事実の正確性の両方を保証する人材—が優位に立つでしょう。AI による抽象モデルの機械的翻訳がもはや独占的ではなくなる中、現実世界の法規制の実証済みモデルこそが決定的な資産となります。この移行は物流配車オペレーターなどの役割を再定義し、清らかなコードの生成が主たる制約ではなくなった時代において、ドメインの複雑性に対する人間の洞察が不可欠であることを証明しています。 ## Text to translate: No significant improvements are needed as the original summary is concise, accurate, and comprehensive. ## Summary: The central shift in software development is the emergence of Agentic AI, which separates building systems from verifying them, making deep domain knowledge the new most valuable asset rather than raw coding skills. Unlike traditional engineers who learned domains by observing failures and shadowing experts—a developmental path now blocked for many—today's agents struggle to replicate the tacit understanding gained from reconciling complex industry data like logistics schedules or payroll rules. Consequently, generalist engineers cannot effectively verify AI-generated code without this specific background, while non-coders remain unable to leverage these powerful tools effectively. The future landscape favors professionals who combine mechanical coding proficiency with profound industry expertise to perform "double judgment," ensuring both code soundness and factual accuracy. As mechanical translation of abstract models becomes less exclusive due to AI, verified models of real-world regulations become the critical asset. This transition elevates roles like logistics dispatchers, proving that human insight into domain complexities is irreplaceable in an age where generating clean code is no longer the primary constraint.

2026/05/29 11:49

砂漠の真ん中に貝殻を見つけた

## Japanese Translation: サウジアラビアのアルガット砂漠の崖基部で発見された目立つ岩石は、海岸線近くにはなく、地質学的証拠によるとジュラ紀(約 1500 万年前)には海洋の底だった場所で、貝殻のように見える。地域のパレオントロジー専門家がいなかったため、著者は DIY データ分析を用いてその系統を同定した。ほぼ 8,000 の貝殻種を含むデータセット(Zhang et al.)において、著者は各輪郭を 256x2 マトリクスとして表現し、輪郭間の二乗ユークリッド距離を計算し、主成分分析(PCA)を適用した。得られた 2 次元潜在空間では、負の PC1 値は丸みを、正の値は尖り具合を示し、PC2 は対称性または質量分布を捕捉していた。化石は最も近似的に*Sphincterochila candidissima*に類似しており、これは約 3800 万年前にのみ出現した種であり、ジュラ紀にはいなかった。PCA に基づくと形状はほぼ同一だが、時間的ギャップにより直接的な祖先関係は否定され、代わりに収斂進化が示唆される:無縁の生物が同様の環境圧力の影響を受けて類似の形態を発達させた。このプロジェクトでは、また shell.hawzen.me というインタラクティブなツールを提供しており、これは遠隔地の非専門家でも専門的な科学ツールにアクセスできるようにし、研究の民主化と地球の歴史に関する深遠な事実の解明を実現することを示している。

Openrsync: OpenBSD チームによる rsync の実装 | そっか~ニュース