- Bitchatは、BluetoothメッシュネットワークとインターネットベースのNostrを組み合わせ、アカウント・電話番号・中央サーバーなしで動作するiOS・macOS向け分散型P2Pメッセージングアプリ
- オフラインではBluetooth LEで最大7ホップ中継をサポートし、インターネット接続時は290以上のNostrリレーを通じて、世界中および位置ベースのチャンネルに接続する
- プライベートメッセージはBluetoothのNoise Protocolを優先して使用し、接続できない場合はNostrのNIP-17に切り替え、どちらも不可能な場合は送信できるようになるまでキューに保持する
- geohashの精度に応じて、ブロック・近隣・都市・州・国単位のチャンネルを提供し、
/slap、/msg、/whoのようなIRC風コマンドと、3回タップしてデータを消去するEmergency Wipeをサポートする
- プロジェクトはパブリックドメインとして公開されており、Xcodeまたは
justで実行できるが、実機ビルドにはDeveloper Team IDとentitlement設定が必要
BluetoothとNostrを組み合わせた転送構造
- BitchatはBluetoothメッシュとNostrを組み合わせたiOS・macOSネイティブアプリで、App Storeでも提供されている
- Bluetoothメッシュネットワークは、インターネットなしで周辺デバイスを自動的に探索して接続する
- Bluetooth LEで直接P2P通信し、隣接デバイスを経由して最大7ホップまでメッセージを中継する
- Noise Protocolベースのエンドツーエンド暗号化と前方秘匿性をサポートする
- Bluetooth LEの制約に合わせた圧縮バイナリパケット形式と、バッテリー最適化されたデューティサイクルを使用する
mesh #bluetoothチャンネルは、抗議活動・災害・遠隔地などでのオフライン通信を対象とする
- Nostr転送レイヤーは、世界中の290以上のリレーを通じてインターネットメッセージングを提供する
- geohash座標で位置ベースのチャットルームを作成し、地域ごとに新しい一時的な暗号化IDを使用する
- プライベートメッセージはNIP-17 gift wrappingで保護する
- 位置チャンネルはインターネット接続が必要で、地域コミュニティ、現地イベント、地域ディスカッションに活用される
block 7文字: 都市ブロック
neighborhood 6文字: 区域・近隣
city 5文字: 都市
province 4文字: 州・道
region 2文字: 国・大規模地域
- プライベートメッセージのルーティングは、利用可能な転送手段を自動的に選択する
- 既存のNoiseセッションを利用できる場合は、高速でプライバシー性の高いBluetooth接続を優先する
- Bluetoothを使用できない場合は、受信者のNostr公開鍵とNIP-17を使ってリレーネットワークへ送信する
- どちらの方式も使用できない場合は、メッセージをキューに保持し、接続が成立すると自動的に配送する
- LZ4メッセージ圧縮、適応型バッテリーモード、ネットワーク最適化、IRC風コマンド、3回タップしてすべてのデータを即座に削除するEmergency Wipeも提供する
- 詳細なプロトコルはTechnical Whitepaperで確認できる
ビルド、ローカライズ、ライセンス
- Xcodeで実行するには、リポジトリで次のコマンドを使用する
cd bitchat
open bitchat.xcodeproj
- 実機で実行するには、ローカル設定とコード署名を準備する必要がある
cp Configs/Local.xcconfig.example Configs/Local.xcconfigで設定ファイルを複製する
- 新しいファイルにDeveloper Team IDを追加すると、デフォルトのBundle IDが
chat.bitchat.<team_id>に設定される
- entitlementの
group.chat.bitchatをgroup.<your_bundle_id>に手動で変更する必要がある
- macOSでは、
brew install just後にjust runで設定とソース実行が可能
- その後
just cleanを実行すると、モバイルアプリのビルド・開発用の元の状態に復元される
- ローカライズリソースは、アプリと共有拡張に分かれている
- 基本アプリの文字列と複数形ルールは、
bitchat/Localization/Base.lproj/のLocalizable.stringsとLocalizable.stringsdictに追加する
- 共有拡張の文字列は、
bitchatShareExtension/Localization/Base.lproj/Localizable.stringsで管理する
- キーは
app_info.features.offline.titleのように意図が分かるように作成し、可能な限り既存のキーを再利用する
- ローカライズ変更は、
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO buildでコンパイルを確認する
- プロジェクトはパブリックドメインで配布されており、詳細条件はLICENSEで確認できる
1件のコメント
Hacker News のコメント
昨日 Radicle デスクトップクライアントをインストールして新しいユーザー名とパスワードを入力したが、何も起きなかった。アプリを再起動してもアカウント作成・ログイン画面を通過できず、Radicle の利用はそこで終わった
可用性を重視するなら、
libs.gms.locationへの依存を見直し、F-Droid でも配布すべき(https://gitlab.com/fdroid/fdroiddata/-/merge_requests/24907#...)Fusion Festival で Bitchat を起動して歩き回り、約20台のデバイスといくつかのメッセージを見つけたが、自分が送ったメッセージには誰も返信しなかった。8万人中20台なので利用者がまったくいないわけではないが多くもなく、最大 2ホップ にとどまり、会場を横断できるほど十分な密度にはならなかった
席を並べて座るために50ドル余計に払いたくなくて、飛行機で同行者と離れてしまったときには役に立つ
BitChat に関心があるなら、人気が出たり一緒に使う相手に出会ったりしたときに備えて、とりあえずインストールしておく価値はある。実際に試してみると、Wi-Fi やモバイル通信なしでテキストをやり取りする感覚は非現実的だった
重複するジオハッシュも悪くはないが、トランシーバーのように片方だけが範囲内にいると会話の半分しか見えない混乱が心配だ。現在のジオハッシュは約1エーカーまで絞られていて精密すぎるが、12階建ての大学寮全体で1つのチャットルームを使う場合には役立つかもしれない
Radicle のサイトは Git リポジトリプラットフォームとして興味深いデザインを見せている。全幅の余白、よく整理されたナビゲーション構造、見やすいコードレンダリングが気に入った
Bitchat は AOS の プロジェクトだ。同じ AOS プロジェクトである ngit に再ホスティングしていない点が意外だ
Nostr 純粋主義に陥ると、投稿を見る人がわずか5人だけという結果になりがちだ。プロトコルは好きだが、ユーザーを増やすには、人々がすでにいる場所にアプリを置かなければならない
ほかの分散型メッセージング製品である Nostr や XMTP と比べて、特別な機能があるのか気になる
前日の関連議論:“Government orders GitHub to remove Bluetooth-based chat app Bitchat: Jack Dorsey”
https://news.ycombinator.com/item?id=49036433