knqyf263's blog

自分のためのメモとして残しておくためのブログ。

趣味で作ったソフトウェアが海外企業に買われるまでの話

今回はソフトウェアエンジニアじゃない人や学生にも、ソフトウェアエンジニアという職業には夢があるかもしれないと思ってもらうために書いています。そのため既に詳しい方からすると回りくどい説明も多いと思いますがご容赦下さい。

基本的に記事とかには技術的なことしか書かないスタンスでやってきましたが、今回の件はさすがに誰かに伝えておくべきだろうということで長々と垂れ流しました。

概要

GW中に趣味で開発したソフトウェアを無料で公開したところAqua Securityという海外企業(アメリカとイスラエルが本社)から買収の申し出を受け、最終的に譲渡したという話です。さらに譲渡するだけでなく、Aqua Securityの社員として雇われて自分のソフトウェア開発を続けることになっています。つまり趣味でやっていたことを仕事として続けるということになります。

少なくとも自分の知る限り一個人で開発していたソフトウェアが企業に買収されるというのは頻繁に起こるものではないので、せっかくなので経緯をまとめておきます。自分みたいな特に取り柄もないソフトウェアエンジニアがこういう機会を貰えたのは、正直運によるところが大きいと感じています。ですが逆に言えば誰にでもチャンスがあるかもしれないと思ったので、誰かに夢や希望を与えられるかもしれないと思って書きました。

買収と言うと大きなお金を貰ったと思われがちですが、残念ながら受け取ったお金は億単位とかではないのでそういう点では夢がないかもしれないです。どちらかと言うと好き勝手やってただけなのにこんなに楽しい経験ができるよ、という方向性の話になります。そういうものに興味がある人は面白い話だと思います。

細かく書いてたら長くなったので、ソフトウェアエンジニアという職種に興味のある学生や、趣味で何かしら開発していきたい人や、趣味でやっていることが仕事になったら良いなと思っている人だけ読んでもらえればと思います。

はじめに

自分は普通に大学を出て普通に企業に就職してIT企業で働いています。上ではソフトウェアエンジニアと書きましたが、実際にはセキュリティエンジニアです。なので基本的に業務ではセキュリティに関することをやっているのですが、プログラムを書く機会もあります。また、エンジニアの中には一定数存在すると思いますが、そもそもパソコンを触るのが好きなので休日でもプログラムを書いたりサーバいじったりしています。とはいえ全てを捧げるほどずっとやっているかと言うとそうでもありません。運動したり漫画読んだり二郎食べたりとか割と忙しくしています。ここは大事なので最初に説明しておきます。

オープンソースソフトウェア(OSS

休日に書いたプログラムとはいえ、良いものが出来たと思ったら他の人にも使ってもらいたいことがあります。そういう場合には最近だとオープンソースソフトウェア(OSS)としてインターネット上に公開されることが多くなっています。ソースコード(コンピュータ言語で書かれたプログラムの設計図とか呼ばれるやつ)をそのまま公開してしまって無料で誰でも使えるようにします。OSSの定義は厳密には「自由な再頒布」とか「派生物の自由な利用」とか色々ありますが、とりあえずは成果物を公開して誰でも使えるようにするし、さらに言えば誰でもいじれるようにするぐらいの認識で良いと思います。細かく知りたい人は色々調べてみて下さい。

ja.wikipedia.org

そして、GitHubというOSSを公開するためのWebサイトが有り、世界中で広く使われています。

github.com

また、個人だけではなく企業も利用しています。GoogleMicrosoftFacebookOSSとしていくつものソフトウェアを公開しています。会社で作った利益を生み出す製品の設計図を公開して良いの?という話もありますが、これはIT業界の面白いところだと思います。公開できる部分だけ公開している企業もいれば、OSSの使い方サポートとしてお金を貰ったりする場合もあります。いずれにせよ、そのように世の中に還元するという姿勢がプログラマーたちからは評価され信頼に繋がり、ひいては売上につながったりするということが業界では認知されつつあります。もちろん無料で使えるんだからお金払わなくていいじゃんとなってしまうケースも有るため、必ずしもOSSにすることでうまくいくとは限りません。というか日本だと特にうまく行っているケースが少ない気もしています。今後どういう風になっていくのか分かりませんが、面白い業界だなと思っています。

さらに面白いのは、ソースコードが公開されているためコピーして自分で修正することも可能です。さらにコピーを修正するだけではなく、修正したからオリジナルに取り込んで欲しい、というリクエストを出すことも可能です。つまり、Facebookと何も関係ない人がFacebookOSS修正を手伝うことが出来ます。そんなことして何になるんだという話もありますが、これは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が分かりやすいという反応を貰えたのは地味に嬉しかったです。

また、Trivyは既存のツールを精度で倒すことを一つの目標としていたので、頑張って比較してグラフも載せたりしました。こんなことをしたら既存ツールの開発者達に怒られるかもしれない...とビクビクしていましたが、批判しているわけでもなく純粋に結果の比較だし良いかと思い最終的には乗せることにしました。

f:id:knqyf263:20190819140458p:plain
精度比較

ちなみにあとで聞いたら脆弱性なんだけど明らかに影響が小さくノイズとなるものは意図的に出していない、といった思想や影響があるかどうかは分からないけど万が一影響がある場合は被害が大きそうだから誤検知になるかもしれないが出している、などポリシーによる違いもあるということだったので一旦グラフは削除しました。

Trivyを使って新たにサービスを作る人も出てくるほどになり、頑張って良かったなーとなって自分の中では一段落していました。

www.kennasecurity.com

譲渡のオファー

一段落したので睡眠不足を解消すべく毎日寝るだけの生活をしていました。

すると、そこにAqua Security社(Aqua Security Software Ltd.)のCTOから突然メールが来ます。件名は「Trivyについて」。Aqua Securityというのはアメリカとイスラエルに本社を持つセキュリティ企業で、自分が比較表の中に入れたツールを作った会社だったのでこんなものを載せるんじゃない!!と怒られると思ってビクビクしていました。内容を見ると、Trivyについて話がしたい、とのこと。絶対キレられるやつじゃん...訴訟とかになったら辛い...無視しようかな...でも無視すると裁判で不利になりそうだし...と恐る恐る返信をしました。そして次に返ってきたメールを見て驚きました。

「お前の作ったTrivyは素晴らしい。特にここの実装とあそこの実装は面白かった。自分達の作るソフトウェアにも活かせそうだ。ありがとう。もっと細かく話したいから電話しないか?」

という内容。かなり驚きました。普通作ったものの結果が微妙といった内容を書かれたらまずキレるところだと思うのですが、キレるどころか褒められた挙げ句感謝されました。凄い価値観を持った人達だなととても驚きましたし、まずキレるだろうっていう自分の価値観が恥ずかしくなりました。良いものは素直に取り込んでいくという考えを持っているから開発も早いのかもなどと考えました。そもそも国による価値観の違いかもしれないのですが、自分もそう考えられる人間になりたいと思いました。

そういうわけで突然CTOと電話することになります。自分の英語力(特にリスニング)は全国大学生平均を下回っているので、電話でボディランゲージなしにまともに会話できるのか?!と不安でしたが、日常会話はさっぱりでも技術的な話だと知ってる単語が多く話す内容も予想がつくからか意外と何とかなりました。聞き取れないところはチャットに書いてもらえば良いです。

そうして実装の詳細説明などを何とか乗り切ったのですが、電話の最後にさらに驚く話をされます。それは、「TrivyをAqua Securityとして買いたい」という提案でした。OSSソースコードが公開されていて誰でも使えるので買いたいってどういうこと?!と最初は混乱しましたが、TrivyのリポジトリをAqua Securityの下に移し、Aquaとしてメンテナンスして行きたいということのようでした。そしてそのためにお金も払うということでした。また、買収と同時に自分を社員として雇うので仕事としてメンテナンスを続けないか?という申し出も受けます。しかもそのチームはOSS開発専門チームなので他にも好きなOSSを作って良いという話でした。趣味で作っていたソフトウェアが企業に買われるなどということは夢にも思っていなかったので困惑しました。その場で決められるものでもなかったので考えさせて欲しいということで一旦電話を切りました。

譲渡について

譲渡するかどうかはとても悩みました。やはり自分の作ったOSSというのは大なり小なり自分の子供みたいに感じている部分があります。それが別のところに行ってしまうのは寂しさもありますし、寝ずに頑張ったGWとかを思い出すと切なくなってやっぱりやめるか...みたいな気持ちになりました。本当は個人で頑張って作ったのに企業のものとなると、今から新たに知る人は完成度高くて当たり前みたいに感じるだろうしそれも何か嫌だなみたいな器の小さい事も思ったりしていました。そしてそのまま過ごしていたのですが、ここでOSSに関する難しい問題に直面します。

個人開発の持続性について

OSSはIssueと言って利用者が改善要望を出すことが可能です。「こんな機能が欲しい」とか「この環境だとうまく動きません」とかそういうやつです。最初は使われてる実感があって嬉しいため頑張って直していくのですが、これは実は段々辛くなってきます。まず趣味のOSSの場合はお金を貰っているわけでもありません。単に休日等の空いた時間に無償でやっているだけです。自分で楽しくてやっているうちは苦にならないのですが、他人に言われてやらないといけない状況になると途端に辛くなってきます。最初に書きましたが、休日は他にもやりたいことがあります。結婚しているので妻と出かけたりするのも大事ですし、休日なので休むことも大事です。ですが、Issueが多数来ると別のことをしていても気になるようになってきます。特に、「動かないので困っています」みたいなIssueが来ると急いで直さざるを得ません。あくまで趣味なのでスルー、と割り切ることも出来るのですが、多くの人に使われるようになると責任も感じてきて割り切るのは難しかったりします(もちろん人によってはバッサリ無視できるメンタルの人もいますし、そういう人は向いてると思います)。

自分が多くの人に使ってもらえるOSSを作ったのはこれが最初ではないのですが、過去の時にも同じ問題に直面していました。チームを組んでやっていれば良いですが、完全に自分のリポジトリともなるとそういうわけにも行きません。

譲渡の決断

このように個人による趣味のOSSというのは持続性の問題を抱えています。最初は楽しくて気力が持つので頑張れますが、義務になると辛くなります。とは書いたものの、それでも自分は割り切って楽しくやれている方ですが、趣味としてやるよりも企業が面倒見てくれたほうが持続性の面では良いなと考え始めます。趣味なので疲れたら終わり、ということで本当は良いですし引き継ぎたい人が勝手にコピーして引き継げるというのもOSSの良いところではあるのですが、せっかく欲しがってくれている企業があるのだから一緒にやるというのは悪くない選択肢だという結論に至ります。

何より自分が好きでやっていたことを仕事として引き続きやって良いと言われ、他にもOSS開発を仕事としてやって良いというのは自分にとっては天職に感じました。まだまだ作りたいものがたくさんあるので、譲渡は別としてもそのチームに入れること自体が本当に魅力に感じました。ですがそんなにうまい話はないというのは過去に経験していたので最初は乗り気じゃなくスルー気味でしたが、話しているうちに本当に良いツールだと考えてくれているし、それを作った自分に是非参加して欲しいという強い意志を感じました。

どのぐらい強い意志だったかと言うと、交渉のために日本人通訳を即座に用意してくれるぐらいです。いやお前英語頑張れよという話はありますが、契約の細かい話とか出来るほどの英語力はありませんし、勢いで押し切られるのを恐れて交渉が進まないぐらいならきちんと意思疎通して進めたいというAqua側の厚意だったと思います。

また、海外の就労ビザを出してくれて日本人が0の場所で働かせてもらえるというのも良い経験になるだろうと思いました。オフィスがある場所ならどこで働いても良いと言ってくれたのでセキュリティがホットなイスラエルを選びました。クビになってもその時はその時で日本に戻ればどこかで働けるだろうみたいな楽観的な考えもありました。この辺りの経緯はまた別で書きます。

などなど色々なことを総合して考えた結果、最終的に譲渡することに決めました。最初に書きましたが受け取ったお金はそこまで大きい金額ではないです。とはいえ数年働いて貰えるぐらいの金額ではあるので小遣いとしては十分すぎる金額です。

ちなみに金額交渉で下手に出ても良くないので大きい金額を伝えてみたのですが、「OSSは既にソースコードが公開されており技術を独占できるものではないので独占販売などは出来ない。これは誠意だと思って欲しい。」と言われました。確かにOSSなのに買うってどういうこと?!と最初思っていたので納得しました。冷静に考えればソースコードが公開されているのでパクろうと思えばいくらでもパクれるのに、わざわざ遠い島国の人間に連絡してお金を払って譲渡して欲しいというのは会社としての誠実さをとても感じました。もちろんもっと闘うことも出来たのですが、誠意だなと思ったので合意しました。きちんと特許などを取っていれば金額はもっと上げられたはずなので、真面目にお金を狙いに行く人は特許取っておくべきです。一度OSSにしてしまうと公知になるので難しくなるらしいです。その辺りはきちんと戦略を練らないとダメですね。

契約について

今後似たような状況になる人がいるかも知れないので少しアドバイスになりますが、条件面などの書類は弁護士にレビューしてもらったほうが良いです。特に訴えられうるリスクは減らすべきです。個人でやっているOSSだと特許侵害していたりライセンス違反したりしていることもあり得ます。そうなった場合に後で賠償みたいな文言が入っていると厳しいです。もちろんそうならないように最大限気をつけていますが、法律や特許のプロではないので厳密に問題ないと言い切るのは難しいです。その辺りはきちんと「自分の知りうる限り〜」などの文言を盛り込んでもらうと良いです。

今後について

Trivyは引き続きOSSとして開発を続けます。既にいくつか面白いアイディアを貰っていたりもするので、これからどんどん足していきます。他にもCNCFと距離が近くなったので新しいものも作っていきます。もっとも、何が起こるかわからないのですぐクビになるかもしれないし未来のことは不明です。

まとめ

ソフトウェアエンジニアという仕事は場所に囚われないので、今回のように海外から突然面白い話が降ってくることもあります。ただ何もしなくても降ってくるということはないので、せっかく何か作ったりしたら成果として見える形にしておくのがオススメです。価値観は人それぞれなので、必ず何か見える形にしなくてはならないということはないです。気が向いたらぐらいの軽さで良いと思います。

人生何があるか分からないです。この業界は動きが早いので数カ月後には自分を取り巻く環境も何もかも変わっているかもしれませんが、変化を楽しんでいきたいと思います。

おわり