FujisakiさよならLinux今日はびっくりしました。毎日お世話になっているLinux。その作者がついに嫌気がさしてカーネルのリポジトリからファイルをすべて消去するという痛ましい事件があったからです。本人によるものではありません。何なのか?といいますと、これは別人のforkされたリポジトリに書かれているものです。最初の画像はLinusのリポジトリのページだったはずです。Githubはすべてのfork間でデータを共有している?どうも、Githubではforkしたリポジトリすべてでデータを共有しており、かつ、githubにはあるコミットIDが自分のリポジトリにあるかそうでないかの区別が付かないようなのです。ブラウザだけでなく、gitを使っても、同じようにLinusのリポジトリからこのコミットを取り出すことができます。was....いや...これ...シンプルに頭おかしい仕様だろ...ジョークならいいけどさ今回はジョークだから、いいですよ。悪い大人が悪用したらどうなるんでしょうね?Linusに限らず、自分のリポジトリのURLで自分の名前を騙って意見などを書くことができるわけです。フェイクニュースの情報源にぴったりです。今回の例なら、「Linux開発者がLinuxを削除!Linuxを利用しているIT企業への影響は...」みたいな「ニュース」を書いたら市場が動いたりすらするかもしれません。フィッシングに使うこともできますね。「このコミットでセキュリティ問題を修正したらしい。詳しくはここのソースのn行目に書いてあるURLを見てくれ」と書いておけば、Linusのリポジトリなら信用できると思った人がリンクをクリックしてくれるかもしれません。任意のソースコードを実行させることだってできるかもしれません。上記に書いた通り、gitのコマンドを通してコミットIDの時点のスナップショットが取得できます。「このリビジョンで問題が修正されてるらしいから、使ってみて。fetchするといいよ」と言いながら複数行のコマンドを渡されたら、あなたは「Linusやその他有名な人・公式アカウントなどのURLなら大丈夫」と思ってターミナルにコピペしませんか?でもそのコミットは実はマルウェアが仕込まれてるバージョンかもしれません。オリジナルのリポジトリと同じSHA-1ハッシュのコミットが生成できれば、オリジナルのリポジトリを汚染することができるかもしれません。これはgithub側の実装次第なので、なんとも言えません。ストレージが高いのは分かるけど...なんでこんな事になってしまったのでしょう。これは推測ですが、たぶんストレージを節約したかったからだと思います。Linuxのリポジトリは数GBありますが、それを4万回もForkされたときに実直にコピーしてたら数10TBになってしまいます。悪意を抜きにすれば、forkしたリポジトリ間でデータを共有しても、とくに問題ありません。別人の書いたforkのコミットには、それぞれオリジナルの作者のものとは違うコミットIDが振られます。同じ根本から違う枝が生えるだけです。セキュリティの面では悪手です。今まで見た通りのことに加えて、最近信用性の下がってきた、SHA-1が問題になってきます。SHA-1はGitでそれぞれのコミットを識別するために使われます。セキュリティ担保のためには使われれてません(本人談)。データを共有したとなると、これはセキュリティ問題になりえます。githubのgitの実装次第ですが、もし同じコミットIDをpushしたときに上書きされるような挙動になっていた場合、fork先がfork元のリポジトリを汚染できてしまうかもしれません。github社は内製のgitサーバを用いており、それを知るすべはありません。すれば...SHA-1はまだそこまで破られてはいないので気にする必要は今のところないかもしれません。コミットをgpgで署名してなりすましを防ぐのは有効かもしれません。Gitの最初の開発者でもあるLinusは普段からしてないようですが...。一応、githubには署名されていないコミットにフラグを立てる機能があるので、これを有効にするのもいいかもしれません。そのフラグを忙しい現代人(スマホを覗くとだいたい暇つぶししてますけど)が見てくれるかどうかは別問題です。gitにもgithubにも飽きた正直なところ、飽きた。14年?くらい使ってるよ。githubも10年以上使ってるよ。