世界を動かす技術を、日本語で。

Show HN: Freenet、分散型アプリのためのピアツーピアプラットフォーム

概要

Freenet は分散型アプリケーションのための ピアツーピアプラットフォーム大手テック企業に依存しない 通信やコラボレーション、商取引を実現。 サーバー不要 で効率的にスケールし、アプリは ブラウザ上 で動作。 開発者・サポーター 向けの利点や支援方法も提供。 新設計 のFreenet(Hyphanet)はWebAssemblyや独自の整合性解決手法を採用。

Freenetの特徴

  • Freenetピアツーピア型 の分散型インターネット基盤
  • 通信・コラボレーション・商取引 のためのアプリケーション実行環境
  • 大手テック企業や中央サーバー への依存排除
  • アプリはブラウザ上 で動作、通常のWebサイトのような見た目
  • サーバー管理不要、クラウド利用料や利用規約の制約なし
  • プライバシー重視、ユーザー追跡なし、アプリの停止不可
  • RustやTypeScript などの一般的な開発言語でアプリ開発可能
  • オープンプロトコル に基づく相互運用性
  • グローバルネットワーク へのアプリ即時デプロイ可能
  • 寄付や助成金 による小規模チーム運営
  • 分散型インターネットインフラ 構築支援の重要性

Freenetのネットワーク構造と仕組み

  • ピア同士リング状 のネットワークを形成
  • スモールワールドネットワーク による効率的な通信経路
  • 数回のホップ で目的地に到達、 数百万ピア へのスケーラビリティ
  • サーバー不要、完全な分散型設計

ユーザー向け体験

  • Freenetアプリブラウザから即利用可能
  • 一般的なWebサイト のようなUI/UX
  • アプリ停止不可ユーザー追跡なし
  • クラウドではなくピアツーピア で動作
  • インストーラー による簡単導入、 River チャットなど即利用可能

開発者向けメリット

  • RustやTypeScript などの 馴染み深いツール で開発
  • サーバーやクラウド管理不要
  • 利用規約の制約なし
  • チュートリアルやドキュメント の提供
  • WebAssemblyコントラクト による柔軟なアプリ設計
  • グローバルな分散キー・バリュー型ストア として機能

サポーター・支援者向け

  • 助成金・寄付 による運営
  • 分散型インターネットインフラ の構築支援
  • 社会的意義 の高いプロジェクト

新Freenet(Hyphanet)のアーキテクチャ

  • 過去5年間 にわたる 全面的な再設計
  • Hyphanet としてリブランド
  • 2023年12月 以降稼働開始
  • River(分散型グループチャット)Delta(分散型CMS) などの初期アプリ
  • Atlas(分散型検索・レコメンド) など新アプリも開発中
  • ユーザーによる独自アプリ(ゲームなど) の開発実績
  • WebAssemblyコントラクト によるキーごとの状態管理
  • コントラクトごとに「merge」操作 を定義し、 整合性問題 を解決
  • マージ操作は可換(コミュタティブ)、どの順序でも同じ結果
  • ウイルスのように状態更新がネットワークに伝播
  • 数秒以内にグローバルな状態整合性 を実現
  • Webアプリはネットワークからダウンロード、ブラウザで実行
  • APIサーバーではなくローカルのFreenetピアとWebSocket接続
  • 主要デスクトップOS用インストーラー を提供、 モバイルは未対応
  • Riverチャット など、インストール後すぐ利用可能

関連リンク集

  • River(分散型グループチャット): https://github.com/freenet/river
  • Delta Syncの技術解説: https://freenet.org/about/news/summary-delta-sync/
  • クイックスタートガイド: https://freenet.org/quickstart/
  • FAQ(よくある質問): https://freenet.org/faq/
  • 開発者による講演動画: https://youtu.be/3SxNBz1VTE0

Hackerたちの意見

すごくクールなプロジェクトだね! > 「私が知る限り、整合性の問題に対するユニークな解決策を開発しました。すべての契約は、その関連する状態のために「マージ」操作を定義しなければなりません。この操作は可換である必要があり、つまり、複数の状態をどの順番でマージしても、同じ最終結果が得られるということです。これについてもっと学べるところはどこですか?CRDTやCmRDTとはどう違うの?」

これについても興味あるな。削除や変更をどうやって可換操作にできるのか、ちょっと理解できない。

すごくクールなプロジェクトですね!ありがとう! > もっと詳しく知るにはどこを見ればいいですか?動画を見てもいいなら、3月にこの話をしたので、かなり包括的だと思いますよ: https://youtu.be/3SxNBz1VTE0?si=R4ifrsfEUJfvjDPx 記事の方がいいなら、こちらをおすすめします: https://freenet.org/about/news/summary-delta-sync/ > これはCRDTやCmRDTとどう違うの?非常に関連性が高いです。Freenetの契約状態をCmRDTとして見ることができ、マージ操作の詳細はWebAssembly契約で指定されています。

CvRDT(状態ベースのCRDT)にすごく似てるね。彼らはこれを可換モノイドとして説明してるけど、つまり結合性と可換性があるってこと。CvRDTは冪等性も必要だから、重複データを扱えるようにしないといけない。冪等性があるか、ネットワークプロトコルがデータ自体の外で重複排除を処理するかのどちらかだね。ペイロードやアプリケーションがマージ操作を定義するのは賢いと思う。これが意味するのは、契約が冪等性を選択できるってことだよね、もしそれがまだ存在しないなら。Freenetが追加したもう一つの点は、これをDHTルーティングとサブスクリプションでやってるところで、もっと基本的なピアメッシュではないってこと。これはブロックチェーンとは全然違って、取引には向いてないだろうね。

いいね!こういうWASMで定義されたネットワークの挙動を見たかったんだ(やった、任意の整合性アルゴリズム!)。もっと詳しく探ってみる必要があるね :) (試してみたいのは、graphqlの代わりに、リクエストと一緒にWASMのバイナリをサーバーに送って、レスポンスのフィールドをフィルタリングしたり、リクエストをパイプラインしたり、「エラーがあったら失敗する」や「エラーをリクエストにペアリングする」みたいなことを定義すること。場合によっては、呼び出し先の内部リトライを制御することもできるかも。)

ありがとう、実はそれは前に考えたアイデアなんだ。GETリクエストにいくつかのwasmを埋め込んで(ネットワークから完全な契約状態を取得するやつ)、それをリクエスト者に返す前に状態を前処理できるようにするっていう。問題は、Freenetが中間ピアが契約状態をキャッシュできる必要があるから、最終的にはやらないことにしたんだけど、将来的に再考するかもしれない。

「ゴーストキー」に対するより良いアプローチは、X量の暗号を0x0に送る(バーンする)ことを要求することだと思う。現在の実装(freenetへの寄付を要求する)は、基本的にfreenet財団に無限の評判を与えることになっていて、他の潜在的なプロジェクトがゴーストキーをアイデンティティとして受け入れることも含めて、分散化の側面を壊している感じがする。

ゴーストキーは、最終的には分散型の評判システムでの評判を立ち上げるための選択肢の一つに過ぎないと思う。シンプルさや匿名性、プロジェクトの資金調達に役立つという利点があるけど、君が指摘した通り、中央集権的なんだよね。君が提案するような暗号通貨ベースの解決策は、時間とともに発展する評判の立ち上げオプションの一つになることは間違いないよ。

とても興味深いね。イデオロギー的な動機を超えて、誰かがピアを運営するための長期的なインセンティブが何なのか気になる。例えば、Freenetがスケールに達した場合、周りに何らかの経済的な原則が必要になるかもしれない。Filecoinが分散ストレージを扱うのと似たような感じで、アプリの状態に関しても。これを実現する一つの方法は、ピアにアプリの状態を保持させて、信頼性高く提供させるために報酬を与えることかもしれない。

Freenetは余剰リソースだけを消費する予定なんだけど、ネットワークにリソースを提供することで得られる「カルマ」の概念を持つ評判システムを構築するつもりです。このカルマは、例えばRiverのVIPチャットルームのように、リソースへのアクセスを制限するために使われるかもしれません。可能性はたくさんあるけど、今のところユーザーはネットワークの成功を見たいという気持ちで動いていて、それが今の規模では十分なモチベーションになっているみたい。

なぜ匿名の相手とプライベートメッセージを交換したいの? - 秘密のカバルに参加していて、参加者の身元が互いに見えないようにしたいから。 - ジャーナリストで、敏感な問題や抑圧された国からの情報提供者と安全にやり取りしたいから。 - 違法な商品やサービスを売っているから。最初の二つの場合、ネットワークの別のコピーを運営することを考えるかもしれない。なぜなら、どうやら一つのスーパーノードが関与しているからで、スーパーノードをコントロールしたいかもしれないし、そうでないかもしれない。

注目すべきは、このプロジェクトは元のFreenet開発チームの仕事を捨てるという裏での決定から生まれたことだ。元のチームの誰にも相談せずに、異なる開発者による書き直しを選んだんだ。これは、事前の議論なしにメーリングリストで発表された象牙の塔の決定だった。古いチームは同意しなかったが、「理事会」の決定によって強行された。「理事会」は、10年以上プロジェクトに関与していなかった人々のグループだった。 https://www.mail-archive.com/devl@freenetproject.org/msg5526... もちろん、既存の元の「Freenet」の資金は新しいものに再利用された。新しい「Freenet」はもはや匿名性を設計目標としていないが、古いものは「Hyphanet」という新しい名前で存在し続けている。 https://www.hyphanet.org/

それを聞いてすごく嬉しいよ。元のFreenetの匿名性は、CSAMのことで悪名高い場所になってしまったからね。外部の人間として見ると、この新しい方向性はFreenetが新しいユーザーを引き寄せ、チームの元々の目標を達成するための正しい選択のように思える。

注目すべきは、このプロジェクトは元のFreenet開発チームの仕事を捨てるという裏での決定から生まれたことだ。これは誤ったナラティブだ。FreenetのFAQ[1]によると:Freenetはなぜ再設計され、リブランドされたのか?2019年、イアンは元のFreenetの後継を開発し始めた。内部では「Locutus」と呼ばれている。この再設計は、元のFreenetから学んだ教訓を取り入れ、現代の課題に対処するための根本的な再想像だった。元のFreenetは画期的だったが、以前の時代のために作られたものだ。Freenetが大きな変化を経験したのはこれが初めてではない。2005年頃、私たちはバージョン0.5から0.7に移行し、「フレンド・トゥ・フレンド」ネットワーキングを導入した。2023年3月、元のFreenet(2005年以降に開発された)は、既存のメンテナーの下で「Hyphanet」という独立したプロジェクトに分割された。同時に、「Locutus」は「Freenet」としてリブランドされ、この新しい方向性と焦点を示すために「Freenet 2023」とも呼ばれる。再設計されたFreenetは、より速く、柔軟で、ますます中央集権化されるウェブに対する堅牢で分散型の代替手段を提供するための準備が整っている。移行をスムーズにするために、古いfreenetproject.orgドメインはhyphanetのウェブサイトにリダイレクトされ、新しく取得されたfreenet.orgドメインは新しいアーキテクチャに使用された。元のFreenetのメンテナーは、再設計とリブランドの決定に同意しなかったことは重要だ。しかし、Freenetプロジェクトの設計者として、1年以上の議論の後、イアンはこのプロジェクトが今後も関連性を持ち、成功するためには必要な道だと感じた。 > 新しい「Freenet」はもはや匿名性を設計目標としていない、 新しいFreenetは、一律のアプローチを取るのではなく、匿名性のオプションをメニュー形式で提供し、違法コンテンツの問題にも対処することになる[2]。 [1] https://freenet.org/about/faq/#why-was-freenet-rearchitected... [2] https://freenet.org/about/faq/#how-does-freenet-handle-harmf...

彼はプロジェクトをフォークして、自分の道を進んだんだね。ここに問題があるとは思えないけど。これがインターネットでのオープンソースのやり方だよ。彼に参加する必要はないけど、彼も自分の道を進む権利があるんだ。

うーん、あんまり好きじゃないな。このプロジェクトはFreenetの名前を利用して人気を得ようとしてる感じがする。

古いものは「Hyphanet」という新しい名前の下で存在し続け、維持される Well、その名前はプロジェクトを地味な死に導く運命にしてるね。

自然なマージ関数がない値(または、わざわざ書きたくない場合)については、更新ログを同期するのが良いと思う?つまり、- 同期された値はクライアントの更新履歴で、ある最終的に一貫性のある順序でソートされている(例えば、ハイブリッド論理クロックで)。マージは更新セットの和を取る。- ユーザーが見る値は、これらの更新を順番に処理した結果で、任意の契約コードを使う。これはシンプルなラストライターウィンズの値には過剰だけど、かなり一般的なデータ型や任意の更新関数をサポートできる。アプリケーション固有の不変条件を保持するものも含めてね。Automerge CRDTライブラリはすでにこういう風に動いているけど[1][2]、JSONデータに特定の更新しか許可していない。契約を通じてコードを共有することで、任意のデータや更新に一般化する難しい部分を解決できる。

自然なマージ関数がない値(または、わざわざ書きたくない場合)については、更新ログを同期するのが良いと思う?実際、現在のフレームワーク内でこれを実装することができるよ。例えば、私たちのグループチャットRiverでは、各ルームの状態が(おおよその)タイムスタンプでソートされた最近のN件のメッセージのリストを維持している。アイデアは、マージロジックを特定のアプリケーションのニーズに合わせて調整できることで、時間順のイベントログが一般的なパターンになると思う。

私は、私たちが使うサービスに対して分散型のアプローチを探るべきだと思う。ローカルファーストのアプローチにも重点を置いてほしいな。この実験は、UNIXの精神で、gitとテキストファイルを組み合わせてソーシャルネットワークを形成しているよ: https://github.com/dharmatech/9social 動画デモはこちら: https://youtu.be/q6qVnlCjcAI

面白いね、私たちもFreenetでgitリポジトリをホスティングする実験をしたことがあるよ。詳しくはここを見てね: https://github.com/freenet/freenet-git

すごく興味深いね!数ヶ月前にピアツーピアの現状を調べてるときに君のウェブページにたどり着いたんだ。p2pプロジェクトがまだ活発で嬉しいよ。

LLMドメインの外で、概念的に面白いことをしている人たちを見るのは新鮮だね。

状態のマージアプローチは、ユーザーに難しい問題を押し付けてるだけで、適切に解決するためのツールを与えてない気がする。例えば、認可されたユーザーグループが暗号署名や公開鍵/秘密鍵を使って投票できるアプリケーションを想像してみて。どうやって「みんなの状態が間違ってる、2024年のその投票は実際には成立した、だって私が投票したから、私の投票を見て」って言って接続するのを防げるの?状態マージャーは、既存の状態が2年間有効だったことや、その投票が遡及的に適用されるべきでないことをどうやって知るの?ブロックチェーンは、ブロックが古くなるにつれて状態がより権威を持つことでこれを解決してる。2024年のpoll_didnt_reach_quorumの状態遷移を元に戻すには、それ以降に作成されたすべてのブロックを巻き戻さなきゃいけなくて、PoW / PoSはそれを非常にコストがかかるものにしてるよ。関連する話だけど、君のデザインは、1人の参加者がネットワークに多くの大きな契約や大きな状態更新を流し込むシビル攻撃をどう防いでるの?

フィードバックありがとう。

「状態のマージアプローチは、ユーザーに厄介な問題を押し付けるだけで、問題を適切に解決するためのツールを与えていない気がする。」 私たちは多くのツールを作ってきて、グループチャットやCMS、SNSなどの実用的なアプリケーションを実装するのに使ってきたし、これからも他のツールをたくさん作っていくつもりだよ。Freenet向けのアプリケーションを設計するには、ちょっとした創造的な問題解決が必要だけど、各問題は一度解決すればいいだけだからね。 「どうして私が接続して、『みんなの状態は間違ってる。2024年の投票は定足数に達していなかったけど、実際には達成した。だって私が投票したから、その票を見せるよ。』と言えないの?」 状態のマージは、既存の状態が2年間有効だったことや、投票が遡及的に適用されるべきではないことをどうやって知るの?これをBitcoinのように、特定の時点で投票結果を「ロック」するメカニズムを持つことで解決できるかも。マイニングがブロックチェーンを繰り返しロックするのと同じようにね。 「関連する話だけど、あなたの設計は、1人の参加者がネットワークを大量の大きな契約や大きな状態更新で氾濫させるシビル攻撃をどう防ぐの?」 ネットワーク内のピアは、各接続されたピアのコスト/ベネフィットを追跡しているから、もしあるピアが提供する以上にリソースを消費し始めたら、その隣のピアは切断する、いわば免疫反応みたいなものだよ。ネットワークが大規模な攻撃を引き寄せるほど大きくなったら、私たちのアプローチを適応させる必要があると思うけど、今のところはしっかりした出発点があると思うよ。