
オープンソースとは、GitHubにコードを投げることです。それが何であり、何でないかを理解しましょう。
簡単に言えば、オープンソースプログラミングとは、誰でも自由に使用・変更できるコードを書くことです。しかし、Go言語についての古いジョークを聞いたことがあるでしょう。「ルールは一目で理解できるが、使いこなすには一生かかる」と言われています。実際、オープンソースコードを書くのも同じです。GitHub、Bitbucket、SourceForgeなどのサイトや、自分のブログやウェブサイトに数行のコードを投げるのは簡単ですが、効果的にするには个人的な努力と先見の明が必要です。
オープンソースプログラミングに対する誤解
まず明確にしておきたいのは、コードをGitHubの公開リポジトリに置くことが、コードをオープンソースにすることを意味するわけではないということです。ほとんどの世界では、創作者が何もしなくても、作品が作成された時点で著作権が自動的に発生します。創作者が許可するまで、著作権に関する権利を行使できるのは作者だけです。創作者の許可を得ていないコードは、いくら人々が使用していたとしても、時限爆弾であり、それを使用するのは愚かなことです。
一部の創作者は親切で、「明らかに私のコードは誰でも無料で使用できるように提供している」と考えています。彼らはコードを使用した人を訴えたくないと思っていますが、それはそのコードを安心して使用できることを意味するわけではありません。創作者がどれほど親切だと思っても、彼らは 権利 を持っています。明示的な許可なしにコードを使用、変更、または埋め込んだ人を訴えることができます。
明らかに、オープンソースライセンスを指定せずにソースコードをオンラインに公開し、他の人に使用して貢献してもらうことを期待するべきではありません。また、このようなコード、さらには許可されていない可能性のあるコードの使用も避けることをお勧めします。もしあなたが、以前の許可されていない可能性のあるコードに似た関数やルーチンを開発した場合、ソースコードの作者はあなたを著作権侵害で訴えることができます。
例えば、Jill SchmillがAwesomeLibを書き、明示的な許可なしにGitHubに置いたとします。Jill Schmillが誰も訴えなくても、AwesomeLibの完全な著作権をEvilCorpに売るだけで、EvilCorpは以前にこのコードを不正使用した人を訴えることができます。このような行動は、コンピュータセキュリティの脆弱性を埋め込むようなものであり、いつか誰かに利用されることになります。
ライセンスのないコードは危険です。覚えておいてください。
適切なオープンソースライセンスの選択
新しいプログラムを書こうとしていて、人々にオープンソースの形で使用してもらいたいと思っているなら、必要なのはライセンスを選択することだけです。宣伝されているように、GitHubがサポートしているchoosealicense.comから始めることができます。このサイトはシンプルな質問形式になっていて、非常に便利で迅速です。数回クリックするだけで適切なライセンスを見つけることができます。
警告:ライセンスを選ぶときは過度に自信を持たないでください。ApacheライセンスやGPLv3などの広く使用されているライセンスを選ぶと、人々は彼らとあなたがどのような権利を持っているかを簡単に理解でき、律師に抜け穴を調べてもらう必要もありません。選択したライセンスの使用数が少ないほど、問題が多くなります。
最も重要なポイントは:决して自分でライセンスを作ろうとしないでください! 自分でライセンスを作ると、みんなに混乱と迷惑を与えることになります。そうしないでください。既存のライセンスに必要な条項が見つからない場合は、既存のライセンスに要件を追加し、ユーザーに注意するために強調表示することができます。
「ライセンスなんて気にしない、もうコードをパブリックドメインに置いた」と言う人もいると知っています。しかし問題は、パブリックドメインの法的効力が世界中で認められているわけではないことです。国によって、パブリックドメインの効力と表現形式は異なります。一部の国の政府の管理下では、ソースコードをパブリックドメインに置くことさえできません。幸いなことに、Unlicenseはこれらの抜け穴を埋めることができます。その言語は簡潔で、「それをパブリックドメインに置く」ということを数語で明確に説明していますが、その効力は世界中で認められています。
ライセンスの導入方法
どのライセンスを使用するか決定したら、明確かつ曖昧さのない形で指定する必要があります。GitHub、GitLab、BitBucketなどのサイトで公開する場合は、多くのフォルダを作成する必要があります。ルートフォルダには、ライセンスをLICENSE.txtという名前のプレーンテキストファイルとして作成する必要があります。
LICENSE.txtファイルを作成した後、他にもやることがあります。重要なファイルごとに、ライセンスを宣言するコメントブロックを先頭に追加する必要があります。既存のライセンスを使用している場合は、このステップは非常に簡単です。# プロジェクト名 (c)2018 作者名、GPLv3ライセンス、詳細は https://www.gnu.org/licenses/gpl-3.0.en.html を参照のようなコメントブロックは、曖昧に言及されたライセンスよりもはるかに効力があります。
自分のウェブサイトに公開する場合は、手順はほぼ同じです。まずLICENSE.txtファイルを作成し、ライセンスを入れてから、ライセンスの出典を示します。
オープンソースコードの違い
オープンソースコードとプロプライエタリコードの主な違いの1つは、オープンソースコードが他の人に見せるために書かれていることです。私は40代のシステム管理者で、たくさんのコードを書いてきました。最初は仕事のためにコードを書き、会社の問題を解決するために書いたので、ほとんどのコードはプロプライエタリコードでした。このようなコードの目的は単純で、特定の場面で特定の方法で機能すればいいのです。
オープンソースコードは大きく異なります。オープンソースコードを書くときは、それが様々な環境で使用される可能性があることを知っています。おそらくあなたのユースケースの環境条件は限られていますが、あなたはそれが様々な環境で理想的に機能することを望んでいます。異なる人々がこれらのコードを使用すると、様々なユースケースが現れ、あなたが考えたことのないアイデアや競合が見られます。コードが全員を満足させる必要はありませんが、少なくとも彼らが直面する問題を適切に処理する必要があります。解決できない場合でも、一般的なロジックに戻ることができ、ユーザーに迷惑をかけることはありません。(例えば、「583行目でゼロ除算エラーが発生しました」は、コマンドライン引数を誤って提供したときの応答としては不適切です)
ソースコードはあなたをイライラさせることもあります。特に、間違った関数やサブプロシージャを何度も修正してようやく希望の結果が得られたとき、ため息をついて次のタスクに進むのではなく、他の人に何度も試した痕跡を見せたくないので、プロセスを整理します。たとえば、$variableや$lolをすべて意味のある$iterationcounterや$modelnameに置き換えます。これは、より多くの人々があなたのコードを使用できるように、専門的にコメントを入れることを意味します(あなたの背景知識のレベルにとってそれが難しくないにしても)。
このプロセスは、慣れていないことだから、多少苦痛と落胆を伴うことがあります。しかし、それによってあなたはより良いプログラマーになり、コードも向上します。たとえあなたのプロジェクトに貢献者があなた一人だけでも、コードを整理することで後の作業が大幅に節約されます。一年後にアプリのコードを見たとき、$modelnameと明確なコメントを書いたことを後悔しないでしょう。名前のない数列や、さらには$lolでさえないことを確認してください。
あなたは一人のために書いているのではない
オープンソースの真の核心はコードではなく、コミュニティです。より大きなコミュニティのプロジェクトはより長く存続し、人々に受け入れられやすくなります。したがって、コミュニティに参加するだけでなく、コミュニティの発展に多くのアイデアを提供し、自分のプロジェクトがコミュニティで使われるようにする必要があります。
バットマンは目標を達成するために暗闇の中で一人で大きな努力を払いましたが、あなたはそうする必要はありません。TwitterやRedditにログインするか、プロジェクト関係者にメールを送り、新しいプロジェクトの準備中であることを発表し、プロジェクトの設計意図と計画について詳しく話し合い、みんなに協力してもらい、データ入力や類似の使用例を募集し、そ