今回はソフトウェアエンジニアじゃない人や学生にも、ソフトウェアエンジニアという職業には夢があるかもしれないと思ってもらうために書いています。そのため既に詳しい方からすると回りくどい説明も多いと思いますがご容赦下さい。
基本的に記事とかには技術的なことしか書かないスタンスでやってきましたが、今回の件はさすがに誰かに伝えておくべきだろうということで長々と垂れ流しました。
— スッキリごん! (@knqyf263) August 20, 2019
— tmk.nom (@tmknom) 2019年5月17日
また、Trivyは既存のツールを精度で倒すことを一つの目標としていたので、頑張って比較してグラフも載せたりしました。こんなことをしたら既存ツールの開発者達に怒られるかもしれない...とビクビクしていましたが、批判しているわけでもなく純粋に結果の比較だし良いかと思い最終的には乗せることにしました。
![f:id:knqyf263:20190819140458p:plain f:id:knqyf263:20190819140458p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/k/knqyf263/20190819/20190819140458.png)
精度比較
ちなみにあとで聞いたら脆弱性なんだけど明らかに影響が小さくノイズとなるものは意図的に出していない、といった思想や影響があるかどうかは分からないけど万が一影響がある場合は被害が大きそうだから誤検知になるかもしれないが出している、などポリシーによる違いもあるということだったので一旦グラフは削除しました。
Trivyを使って新たにサービスを作る人も出てくるほどになり、頑張って良かったなーとなって自分の中では一段落していました。
www.kennasecurity.com
— スッキリごん! (@knqyf263) 2019年5月24日
すると、そこにAqua Security社︵Aqua Security Software Ltd.︶のCTOから突然メールが来ます。件名は﹁Trivyについて﹂。Aqua Securityというのはアメリカとイスラエルに本社を持つセキュリティ企業で、自分が比較表の中に入れたツールを作った会社だったのでこんなものを載せるんじゃない!!と怒られると思ってビクビクしていました。内容を見ると、Trivyについて話がしたい、とのこと。絶対キレられるやつじゃん...訴訟とかになったら辛い...無視しようかな...でも無視すると裁判で不利になりそうだし...と恐る恐る返信をしました。そして次に返ってきたメールを見て驚きました。
﹁お前の作ったTrivyは素晴らしい。特にここの実装とあそこの実装は面白かった。自分達の作るソフトウェアにも活かせそうだ。ありがとう。もっと細かく話したいから電話しないか?﹂
という内容。かなり驚きました。普通作ったものの結果が微妙といった内容を書かれたらまずキレるところだと思うのですが、キレるどころか褒められた挙げ句感謝されました。凄い価値観を持った人達だなととても驚きましたし、まずキレるだろうっていう自分の価値観が恥ずかしくなりました。良いものは素直に取り込んでいくという考えを持っているから開発も早いのかもなどと考えました。そもそも国による価値観の違いかもしれないのですが、自分もそう考えられる人間になりたいと思いました。
— スッキリごん! (@knqyf263) 2019年5月18日
そういうわけで突然CTOと電話することになります。自分の英語力︵特にリスニング︶は全国大学生平均を下回っているので、電話でボディランゲージなしにまともに会話できるのか?!と不安でしたが、日常会話はさっぱりでも技術的な話だと知ってる単語が多く話す内容も予想がつくからか意外と何とかなりました。聞き取れないところはチャットに書いてもらえば良いです。
そうして実装の詳細説明などを何とか乗り切ったのですが、電話の最後にさらに驚く話をされます。それは、﹁TrivyをAqua Securityとして買いたい﹂という提案でした。OSSはソースコードが公開されていて誰でも使えるので買いたいってどういうこと?!と最初は混乱しましたが、TrivyのリポジトリをAqua Securityの下に移し、Aquaとしてメンテナンスして行きたいということのようでした。そしてそのためにお金も払うということでした。また、買収と同時に自分を社員として雇うので仕事としてメンテナンスを続けないか?という申し出も受けます。しかもそのチームはOSS開発専門チームなので他にも好きなOSSを作って良いという話でした。趣味で作っていたソフトウェアが企業に買われるなどということは夢にも思っていなかったので困惑しました。その場で決められるものでもなかったので考えさせて欲しいということで一旦電話を切りました。
概要
GW中に趣味で開発したソフトウェアを無料で公開したところAqua Securityという海外企業︵アメリカとイスラエルが本社︶から買収の申し出を受け、最終的に譲渡したという話です。さらに譲渡するだけでなく、Aqua Securityの社員として雇われて自分のソフトウェア開発を続けることになっています。つまり趣味でやっていたことを仕事として続けるということになります。 少なくとも自分の知る限り一個人で開発していたソフトウェアが企業に買収されるというのは頻繁に起こるものではないので、せっかくなので経緯をまとめておきます。自分みたいな特に取り柄もないソフトウェアエンジニアがこういう機会を貰えたのは、正直運によるところが大きいと感じています。ですが逆に言えば誰にでもチャンスがあるかもしれないと思ったので、誰かに夢や希望を与えられるかもしれないと思って書きました。 買収と言うと大きなお金を貰ったと思われがちですが、残念ながら受け取ったお金は億単位とかではないのでそういう点では夢がないかもしれないです。どちらかと言うと好き勝手やってただけなのにこんなに楽しい経験ができるよ、という方向性の話になります。そういうものに興味がある人は面白い話だと思います。 細かく書いてたら長くなったので、ソフトウェアエンジニアという職種に興味のある学生や、趣味で何かしら開発していきたい人や、趣味でやっていることが仕事になったら良いなと思っている人だけ読んでもらえればと思います。ということで自分が趣味でGWに作ったOSSはAqua Securityという海外企業に買われることになりました。開発は続けていくつもりなので今後ともよろしくお願いします。https://t.co/QS7kqVTg18
はじめに
自分は普通に大学を出て普通に企業に就職してIT企業で働いています。上ではソフトウェアエンジニアと書きましたが、実際にはセキュリティエンジニアです。なので基本的に業務ではセキュリティに関することをやっているのですが、プログラムを書く機会もあります。また、エンジニアの中には一定数存在すると思いますが、そもそもパソコンを触るのが好きなので休日でもプログラムを書いたりサーバいじったりしています。とはいえ全てを捧げるほどずっとやっているかと言うとそうでもありません。運動したり漫画読んだり二郎食べたりとか割と忙しくしています。ここは大事なので最初に説明しておきます。オープンソースソフトウェア︵OSS︶
休日に書いたプログラムとはいえ、良いものが出来たと思ったら他の人にも使ってもらいたいことがあります。そういう場合には最近だとオープンソースソフトウェア︵OSS︶としてインターネット上に公開されることが多くなっています。ソースコード︵コンピュータ言語で書かれたプログラムの設計図とか呼ばれるやつ︶をそのまま公開してしまって無料で誰でも使えるようにします。OSSの定義は厳密には﹁自由な再頒布﹂とか﹁派生物の自由な利用﹂とか色々ありますが、とりあえずは成果物を公開して誰でも使えるようにするし、さらに言えば誰でもいじれるようにするぐらいの認識で良いと思います。細かく知りたい人は色々調べてみて下さい。 ja.wikipedia.org そして、GitHubというOSSを公開するためのWebサイトが有り、世界中で広く使われています。 github.com また、個人だけではなく企業も利用しています。GoogleやMicrosoftやFacebookもOSSとしていくつものソフトウェアを公開しています。会社で作った利益を生み出す製品の設計図を公開して良いの?という話もありますが、これはIT業界の面白いところだと思います。公開できる部分だけ公開している企業もいれば、OSSの使い方サポートとしてお金を貰ったりする場合もあります。いずれにせよ、そのように世の中に還元するという姿勢がプログラマーたちからは評価され信頼に繋がり、ひいては売上につながったりするということが業界では認知されつつあります。もちろん無料で使えるんだからお金払わなくていいじゃんとなってしまうケースも有るため、必ずしもOSSにすることでうまくいくとは限りません。というか日本だと特にうまく行っているケースが少ない気もしています。今後どういう風になっていくのか分かりませんが、面白い業界だなと思っています。 さらに面白いのは、ソースコードが公開されているためコピーして自分で修正することも可能です。さらにコピーを修正するだけではなく、修正したからオリジナルに取り込んで欲しい、というリクエストを出すことも可能です。つまり、Facebookと何も関係ない人がFacebookのOSS修正を手伝うことが出来ます。そんなことして何になるんだという話もありますが、これはFacebookが良いプログラムを公開してくれたのでそのお礼、みたいな意味合いが強いと個人的には思っています。もちろんオリジナルが変更されていくとコピーが追従するのが難しくなるのでオリジナルに取り込まれる方が将来を考えると良いというメリットもあるのですが、少なくとも自分はそれ以上に感謝の気持ちで修正を手伝っています。 話を戻します。GitHub上ではアカウント作成すると自分用のページが作られます。そこで自分の作った好きなプログラムを公開することが出来ます。GitHubでは1つのプログラム置き場のことをリポジトリと呼びますが、そのリポジトリ一覧は自分の場合だと以下になります。 knqyf263 (Teppei Fukuda) / Repositories · GitHub ここで好きなリポジトリを自分で作って公開しておけば誰でも閲覧・利用ができます。これだけで立派なOSS活動です。趣味としてのOSS
自分も趣味で作ったソフトウェアはGitHub上で公開しています。誰かに使ってもらおうとか思っていなくても、自分のために作っていたら結構いい感じになったからせっかくだし公開しようとか、理由は何でも良いと思います。そんなに崇高な理由じゃなくて良いです。しかもお金貰っているわけでもないのでクオリティが低くても誰にも怒られないです。何でも良いからまずは公開してみると良いんじゃないかと思っています。 自分の場合は大体何か不満があって、それを改善するためのものを作ったから公開する、という感じが多いです。日頃から不満を溜めてる人のほうがアイディア出てきやすいんじゃないかなーとか勝手に思ってます。 それで、趣味なのに何をモチベーションにわざわざ公開するの?というところですが、やはり多くの人に使ってもらえると嬉しいです。そして何より全く知らない海外の人が自分のプログラム修正を手伝ってくれたりすると本当に嬉しいです。会ったこともない海外の人たちと何かを一緒に作っていくという体験ができる職業はとても少ないと思います。自分はこの職業以外思いつかないです。しかも、やたらと感謝されます。﹁君の作ったプログラムは僕のプログラマー人生を変えたよ﹂とか﹁本当に素晴らしいOSSだ。心より君を尊敬する。﹂といった事を平気で言われます。これだけでやってて良かったと思いますし、世の中の役に立っている実感を得られます。何か日常で辛いことがあっても、﹁でも自分見知らぬ土地の見知らぬ人々にリスペクトされてるから良いか﹂みたいな気持ちになれます。Trivyについて
自分が趣味で作ったOSSの中の一つにTrivyというものがあります。少し技術的な話になりますが、これはコンテナの脆弱性スキャナです。自分が作る前から似たソフトウェアは複数存在していたのですが、既存のものはどうしても使いにくいし精度も改善できる余地があるし、ということで作り始めました。 今年のGWは10日間の大型連休だったわけですが、この連休中に作り切るという目標でGW初日から作り始めました。実際には構想は大分前からあったのですが、真面目に作り始めたのはGWになってからです。結局10日間ずっとプログラムを書き続けました。もちろん友人と少し遊んだりはしましたが、寝る時間も勿体なかったのでモンスターエナジー買ってきて夜な夜な頑張ったりしました。妻からもこいつ正気か?みたいなプレッシャーを受けたりもしましたが、どうしても作りたかったので﹁GWはどこも混んでるし別の日に出かけたほうが﹂みたいなことを言って説得しました。理解のある妻に感謝です。 10日間で当初目標としていた機能は実装し終わったのですが、作っている途中にさらに改善できるポイントみたいなのが次々と見つかってしまい、最終的にはGW終わってから1週間ぐらい実装を続けました。 そのリポジトリが以下です。 GitHub - aquasecurity/trivy: A Simple and Comprehensive Vulnerability Scanner for Containers, Suitable for CI 今アクセスするとaquasecurity/trivyに転送されます。これは元々自分のリポジトリだったのですが、Aqua Security社に買われたために転送されるようになっています。この話は後ほどします。 そんなこんなで作り終わって公開したのですが、割と反響が大きく色んな国の言語でブログ書かれるぐらいまで広まりました。 日本で有名なブログを運営していらっしゃるクラスメソッドさんや dev.classmethod.jp セキュリティ企業の英語によるブログや www.prodefence.org 企業によるセキュリティツール︵雑に言えばセキュリティソフトウェアとほとんど同じ意味︶の一覧まとめや sysdig.com 中国語や www.freebuf.com フランス語や t.co トルコ語など medium.com 他にも色々なところで紹介して頂いています。 一つ注意なのですが、良いものを作っても使い方が全く分からなければ使って貰えません。なので、真面目に使ってもらいたいと思ったら使い方をきちんと書くことが重要です。日本人向けなら日本語で良いですが、海外の人にも使ってもらいたければ英語で書くことをおすすめします。自分はGoogle翻訳で雑な英語を書きましたが、それでも何とかなっています。 ソフトウェアの説明書のことをREADMEと言ったりするのですが、READMEが分かりやすいという反応を貰えたのは地味に嬉しかったです。TLに流れてきたコンテナの脆弱性スキャナがよさそう。ツールの良し悪しは試してないからまだ分からないけど、READMEが充実してて感動した。お手本のようなREADMEだ。見習わなきゃ。https://t.co/AVOneStFjw
![f:id:knqyf263:20190819140458p:plain f:id:knqyf263:20190819140458p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/k/knqyf263/20190819/20190819140458.png)
譲渡のオファー
一段落したので睡眠不足を解消すべく毎日寝るだけの生活をしていました。公開して1週間経ったけど誰かに使ってもらえるものになるのかとずっと不安があり、少しでも改善しようと寝られない日々を過ごしていたのでやっと休める。15時間ぐらい寝たい。
MicroScannerの検知精度が高くないってREADMEに書いちゃったので開発元のAqua Securityからいつキレられるか不安だったんだけど、Aqua SecurityのCTOから「お前のアプローチ良いね。OSSのセキュリティ向上のためのアイディアについて議論しないか?」ってメールが来て、この業界は最高だなって思った