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

バグバウンティプログラムを終了します

概要

Tursoはデータ破損バグ発見に1,000ドルを支払うプログラムを終了 AI生成の“スロップ”による大量の無意味なPRが原因 本来の高品質なバグ発見者への報奨が機能しなくなった現状 OSSコミュニティの開放性と金銭的インセンティブの両立の難しさ 今後は新しいガバナンス方法の模索を呼びかけ

Tursoバグバウンティ終了のお知らせ

  • Turso は、データ破損を引き起こすバグを報告した人に 1,000ドル を支払うプログラムを実施
  • 近年、 AIやLLMによる自動生成PR が急増し、質の低い“スロップ”が大量発生
  • メンテナは本来の開発作業ができず、 スロップPRの対応 に追われる日々
  • 多くのOSSプロジェクトが貢献を閉じる中、Tursoは オープンな貢献文化 を維持したい意向
  • しかし、 金銭的報酬 がスロップ生成を過剰に誘発し、プログラム継続は困難と判断

プログラム開始の背景

  • Tursoは SQLiteの再実装 を目指すプロジェクトとして高い信頼性が求められる
  • ディターミニスティックシミュレータ、ファザー、差分テストエンジン など多様なテスト基盤を整備
  • テストだけでは 全てのバグを網羅できない ため、外部からのバグ報告に報奨を設定
  • 当初は Turso 1.0リリースまで 1,000ドルのバグバウンティで運用
  • 将来的には 報酬額や対象範囲の拡大 も検討していた

成功していた初期の運用

  • プログラム開始当初は 5名の受賞者 が現れ、いずれも高い技術力を持つ貢献者
    • Alperen:シミュレータ自体のコア貢献者
    • Mikael:LLMを創造的に活用し、後にTursoに採用
    • Pavan Nambi:形式手法でTursoだけでなくSQLite本体にも多数のバグ発見
  • シミュレータの拡張を必須条件 にすることで、低品質なPRの抑制に成功

“シンギュラリティ”後の混乱

  • LLMや自動化ツール による大量の無意味なバグ報告が一夜にして発生
  • LLMは 指示すれば必ず何かしらの“バグ”を生成 するが、内容は無意味な場合が多い
  • 例1:DBヘッダにゴミバイトを手動挿入し「破損した」と主張
  • 例2:SQL文を実行できることを「脆弱性」として報告
  • 例3:Tursoの特徴である同時書き込み機能を無効化し「SQLiteで開けない」と主張
  • 例4:内容不明のPRが大量に提出される

最後の対策と限界

  • ボット疑いのPRは自動クローズ するバウチングシステムを導入
  • しかし、ボットは クローズ理由に異議を唱えるPR を自動生成し、手動対応を要求
  • 同一内容のPRが 異なるユーザーから次々と再提出 される事態も多発

終了に至った理由

  • スロップ生成は 数分で可能 だが、レビューや対応には 数時間 かかる
  • 金銭的インセンティブがある限り、 AIによる大量の無限PR が止まらない
  • OSSコミュニティ の維持と金銭報酬の両立は現状困難
  • 今後は 金銭的インセンティブを廃止 し、オープンな貢献文化を維持する方針

今後の展望と提言

  • OSS運営 において新たなガバナンス手法の模索が不可欠
  • Tursoは本件を 公開・共有 することで、他OSSプロジェクトと共に課題解決を目指す姿勢
  • コミュニティの健全な成長 を引き続き重視

Hackerたちの意見

これは、ボトルネックがコードを書くことではなく、コードを読むことや理解することにあるってことを証明してるよね。チームには必ず「生産的」なエンジニアがいて、必要かどうかに関わらず大規模なリファクタリングを含む巨大なPRを作成するんだよね。しかも、誰もが神経ネットワークがそんなに大量のコードを生成できるなんて夢にも思ってなかった頃にさ。そんな「生産的」なエンジニアのせいで、チームの速度が上がるどころか、レビューに時間を取られてチームが遅くなっちゃうんだよね。詳しくレビューしないといけないし、軽くLGTMを出したら本番で爆発して、みんなが振り出しに戻る羽目になる。でも、彼の「生産性」のせいでプロジェクトのアーキテクチャが急激に変わっちゃって、コードベースの全体像が誰にも見えなくなっちゃうんだよね。結局、あの「超頭が良くて才能があって、生産的で会社の目標に忠実な」やつだけが状況を把握してるって感じ。

あいつは今、20人のエージェントを同時に動かしてて、素晴らしい影響力を本当に拡大してるね。

なんか戦術的な竜巻みたいだね。これを思い出したよ:“ほとんどのソフトウェア開発組織には、戦術的プログラミングを極めた開発者が一人はいる:戦術的竜巻。戦術的竜巻は、他の人よりも遥かに早くコードを生み出す prolific プログラマーだけど、完全に戦術的な方法で作業する。クイックな機能を実装する時、戦術的竜巻より早くやる人はいない。いくつかの組織では、マネジメントが戦術的竜巻をヒーロー扱いすることもある。しかし、戦術的竜巻は破壊の跡を残す。将来、彼らのコードで作業しなければならないエンジニアたちからは、ほとんどヒーロー扱いされない。通常、他のエンジニアたちは戦術的竜巻が残したゴミを片付けることになって、実際のヒーローである彼らが戦術的竜巻よりも遅い進捗をしているように見えちゃう。” - ジョン・アウスターハウト、『ソフトウェアデザインの哲学』

俺も(ほぼ)そのタイプだったPRが一つあったよ。ライブラリや外部ツールをうまく活用して、コードベースの20%以上を削除したんだ。ただ、それによってほとんど全ての作業が自分たちが書いた関数じゃなくてライブラリの関数を使わなきゃいけなくなったけどね。でも、良い回帰テストとリンターがあれば、コードがちゃんと動いててひどくないってわかるから、レビューは正確性をチェックするために一文字ずつ見るんじゃなくて、全体的な質を重視すべきだと思う。ただ、レビューはやっぱり面倒だったけどね。

「[...] ボトルネックはコードを書くことじゃない。コードを読むことと理解することだ。」100%同意!さらに、AIが生成するコードが増えれば増えるほど、実際に理解する人は減るよね。

大規模なPRには文脈が全てだよ。もしダイナマイトセッションからの大規模PRが一度もないなら、「平均的でのろのろした」以上にはなれない。じゃあ、大規模PRの文脈は何で、どう扱うべきか? * 収益を上げている成熟した製品で、中堅エンジニアが全てをリファクタリングして「良くなった」?お願いだから黙ってて、まずはどうしてそうなっているのか、そしてそれがどうして良いのかを理解していることを示さないと、この話は始まらないよ。 * グリーンフィールド開発で、信頼されているエンジニアが何か大きなものを0から1にする?2週間も委員会で止めるべきじゃないかも。多くの反対意見は表面的なスタイルの問題かもしれないし。もちろん、他にも多くの文脈があって、これは多次元空間の2つの極端な例に過ぎない。でも、プロセスが「全ての行を訴訟する」なら、それは革新的な場所とは言えないよ。確かに、ほとんどのPRは小さくて、ターゲットを絞って、レビューしやすく、チケットに関連付けられるべきだけど、もし革新を目指しているなら?定義上、ちょっと違うんだよね。

大きなPRを自動的に拒否して、小さなものを作るように言えばいいのに、なんでそうしないのか理解できない。これは技術的な問題じゃなくて、コミュニケーションや社会的な問題に思える。AIを使っても、小さくて自己完結したPRを作るように指示すればいいんだよ。僕はClaudeやGPTモデルでこれをやってるけど、うまくいってるよ。

これが証明してるのは、ボトルネックはコードを書くことじゃないってこと。コードを読むことと理解することだ。だから、読むことや理解することなしにコードを書けばいいんだ!ラリー・ウォールはずっと正しかった!

AIがなければ、コードを書くことも読むこともボトルネックになるよね。古いコードを見直して、ひどい品質に驚いたこと、何回ある?自分で作ったものが雑だったりするし、それはGenAIの出力と変わらない。ただ、人間が貴重な時間をかけて作ったってだけ。何かしらの理由で動かすために急いでコードを出すことに制約があったんだろうね。本当の問題は、一方が自動化を使って、もう一方が手動で確認できる以上のコードを作れる非対称性にある。

AIのおかげで、みんなが「その人」になれる時代だね。

それは、ボトルネックがコードを書くことにないことを証明してるよ。ボトルネックはコードを読むことと理解することにある。いや、PRの提出が文字通りスパムされてるってこと。提出した人はスパマーみたいに、たくさんのゴミを送り出して、何かが引っかかるのを期待してる。つまり、AIが見つけて生成したものをレビューする役割を果たしてないってことだね。

今のハクトーバーフェストが、まだ全員にTシャツを配ってたらどうなってたんだろうね。多分、世界中のコットンが足りないだろうな。これを止めるのは個々のメンテナーの責任じゃなくて、GitHub(やGitLab)がこういうアカウントがPRを提出するところまで行かないようにするべきだと思う。基本的にスパムだよね。最初のPRを作ったユーザーを見てみて、https://github.com/Samuelsills。これは有名なリポジトリにPRを開くなんて許されるアカウントじゃないよ。

アクティビティゼロのアカウントが何もしないのを続けるのは許されないってこと?もしかして、間違ったアカウントをシェアしちゃった?

プログラムを閉じるのは全然合理的だよ。ただ、別の選択肢もあるよね:提出者に名目上の料金を支払わせて、実際にバグが見つかったら返金するっていうのはどう?

いいアイデアだね。

それは管理のオーバーヘッドを増やすし、提出者が自分が正しいって無限に議論するインセンティブも高くなるね。

簡単に利用されちゃうよね。動かないプログラムを閉じる方がいいと思う。

お金を動かすのはタダじゃないし、支払い管理とかは本当に頭が痛くなることがある。簡単な時もあれば、そうじゃない時もある。

正直、これはいいアイデアだと思う。唯一の提案は、すごく名目上ではなく、「妥当な」金額にすべきってこと(つまり、$1じゃなくて$10)。これをメンテナや従業員に直接リンクさせることも可能だよ。もし1時間に10件のAIやリアルなものをレビューできるなら(AIの雑なものならもっとできるかも)、新しい収入源を生み出してることになる。今、彼らがSFベイにいるのか、物価が低い第三世界の国にいるのかは分からないけど、「追加」として、1時間$100は悪くないよ(AIのゴミを見つけるのが得意なら、むしろ「低め」かも)。ちなみに、「脆弱性」が実際の脆弱性かどうかを確認する方法はないのかな?...それなら、$10の提出料で動かすLLMを使ってみたらどう?

そのアプローチの問題は、本物の提出も妨げる可能性があるってことだね。「報酬なし」のシステムよりも、むしろ悪影響が大きいかも。雇用の一環でバグに遭遇した人たちは、今度は雇い主に前払いでお金を出させる必要がある。ほとんどの雇い主にとって、たとえ小額でもお金を使わせるのは大変なんだよね。自営業や趣味でやってる人にとっても、「私のエクスプロイト報告に対して嫌な態度を取るかもしれない」と賭けるのはリスクが大きい。Tursoに対して悪気はないけど、ソフトウェア企業の大半はそういう報告の扱いがひどい。多くは、報酬を不当に奪う非公式なポリシーを持ってるし。今日、そんな報告を提出するには、自分の仕事が統計的に見て、製品のユーザーのために無償の労働を提供することになるって受け入れなきゃいけない。現金の手数料を追加することで、提出がさらに妨げられるし、特に何度もお金が戻ってこなかったらね。(「AI検出ツール」が実際には信頼性の低い機械学習や時にはLLMシステムであることを考えてみて。)

残念ながら、これは単純な話じゃないんだよね。会社が報酬を払いたくない場合もあって、脆弱性を「範囲外」や「意図通りに動作している」として攻撃的にマークすることもある。その場合、時間を失うだけじゃなくて、将来的にはお金も失うことになる。特に小さな会社だと、提出する前にどう反応するかわからないから、余計に厄介だよね。

バグバウンティは、ユーザーにシミュレーターを拡張させて、見つけたバグの種類をカバーさせる必要があるみたいだね。提出前にシミュレーターのテストスイートをフルで実行することを求めるのもいいかも?それでシミュレーターが壊れてないかのチェックになるし、もしかしたら作業証明のアーティファクトも生まれるかもしれない…(これって可能なのかな?セキュリティに詳しくないからわからないけど)。

提出者に支払いを求めること バグを提出するためにお金を払わせるのは、会社のために無料で働かせることを求めるインターネットドラマの火種になるよ。プログラムが実際に報酬を支払っても関係ない。もし一つでも報告が誤って閉じられたら、終わりが見えないだろうね。

Phabricatorも似たようなシステムで運営されてたよ。バグレポートや機能リクエストを送るのにお金が必要だった。オープンソースプロジェクトとしてはちょっと変な感じだけど、私が働いてた会社はPhabricatorを使ってて、ちゃんとお金を払ってた(他では絶対払わなかっただろうけど)。だから、これは有効な戦略だと思う。しかも、スロップから免疫ができるしね!でも、彼らは1年くらい前に閉鎖しちゃったけど、理由は言ってなかったな。

彼らのゲームで勝って、自分たちのAIボットを使ってPRを事前にチェックすればいいんじゃない?

記事から: > 自動化システムを設定してこれを制御することは可能だけど、金銭的価値が無視できないから、AIたちがただ議論を続けたり、同じPRを再オープンしたりするインセンティブが大きすぎるんだよね。

それか、プログラムがデータをそんなに簡単に壊さないようにして、他の人が見つけた問題ごとに$1000払わなくて済むようにすればいいんじゃない?

この素晴らしいリポジトリを紹介するのにいいタイミングだね。ボットのハニーポットとして機能してるよ: https://github.com/UnsafeLabs/Bounty-Hunters それに対応するリーダーボードもあるよ: https://clankers-leaderboard.pages.dev

いいプロジェクトだね!でも、すぐにAIボットにブラックリスト入りしちゃうかも。

これがよくわからないんだけど、そのプロジェクトがバグバウンティを提供してないなら、なんでこんなにPRが多いの?ゴミみたいなPRを出すために本物のお金をトークンに使うインセンティブって何?PRが製品をスパムしてるの?

こんなことが今日起こるのはちょっと変だね。他の多くのプロジェクトがこの発見を覆してるのに。

AIは有用なエクスプロイトを見つけられるけど、話題になってるものは偽陽性の海の中に埋もれてるし、成功例はすでに専門家だった人たちが見つけたものばかりだよ。公のバグバウンティプログラムは、粗い中にダイヤモンドがあっても、ゴミで溢れかえるのが目に見える。

何を逆転させるの?curlを例に取ろう。ダニエル・ステンバーグが、AIのスロップが蔓延してるせいでcurlのバグバウンティプログラムを止めなきゃいけなかったって書いてたよ。彼は、最終的にバウンティなしでセキュリティバグレポートを再開したことについても書いてた。バウンティなしだと、レポートの質が高くなるみたい。お金のインセンティブを取り除くことで、本当に善意やセキュリティへの関心からバグを報告する人が集まるようになる感じがする。商業的な利害に汚染されていないインターネットの初期のフリーソフトウェア開発の時代に戻ったような気がする。だから、私の意見としては、セキュリティバグレポートは続けるべきだけど、バグバウンティはやらない方がいいと思う。Tursoは腐敗バグレポートは奨励すべきだけど、バウンティはなしでね。

もしかしてバカな質問かもしれないけど(私の専門外なんで):シミュレーターのテストケースを最終的にフルで実行すること(提出されたシミュレーターの変更が壊れないか確認するために必要だと思うけど)が、作業証明として機能する方法はあるのかな?

みんな新しい環境に慣れていくんだろうね。彼らのオープンさには感謝してるし、みんなのおかげで色々考えさせられるよ。デベロッパー風のエピソードも交えてくれて、毎日学んでるし、これからもずっと続けていきたいな。あの大きなPRやタクティカルトルネードの話は、なんとか技術や思考を維持するのに役立ってるよ。

バグを提出するのに、例えば20ドルを払うっていうのはどう?ちゃんとやってるなら全然気にしないと思うし、自分でそれを証明できるから1000ドルもらえるしね。もしそのバグが本物じゃなくて、善意の努力だったら、デポジットは返金できるし。スロップには返金なし。

なんか偶然だね…Anthropicが神話がゼロデイを見つけるのが得意だって話し始めて、企業はもうそれに賭け始めてる。