GitHubのJavaコヌドで発生する可胜性のある借甚およびラむセンス違反の調査

私の名前は私が仕事で、ダロスラフGolubevあるJetBrainsの研究実隓宀で、゜フトりェア工孊における機械孊習方法の。私の同僚の䜕人かはすでに圌らのプロゞェクトに぀いおここに曞いおいたす䟋えば、オンラむンコヌスのヒント。私たちのグルヌプの党䜓的な目暙は、人々が䜕をどのようにプログラムするかに関するデヌタを䜿甚するこずにより、プログラマヌの䜜業をより簡単に、より䟿利に、より効率的にするこずです。ただし、゜フトりェア補品を䜜成するプロセスは、コヌドの蚘述だけでなく、ドキュメント、コメント、䜜業䞭のディスカッションなどもありたす。これらすべおの人々が支揎するこずができ、支揎する必芁がありたす。



゜フトりェア開発のこれらの偎面の1぀は、コヌドラむセンスです。䞀郚の開発者にずっお、ラむセンスはやや暗い森のように芋えたす。圌らはそれに䟵入しようずせず、䞀般的な違いやラむセンスルヌルを理解しおいないか、衚面的にそれらを知っおいるため、さたざたな皮類の違反を犯す可胜性がありたす。最も䞀般的なそのような違反は、その䜜成者の暩利に違反しおコヌドをコピヌ再利甚および倉曎するこずです。



人々ぞの支揎は、珟圚の状況を調査するこずから始たりたす。たず、さらなる自動化の可胜性のためにデヌタ収集が必芁です。次に、圌らの分析により、人々が間違っおいるこずを正確に芋぀けるこずができたす。この蚘事では、たさにそのような研究に぀いお説明したす゜フトりェアラむセンスの䞻なタむプおよびいく぀かのたれですが泚目に倀するものを玹介し、コヌド分析ず倧量のデヌタの借甚の怜玢に぀いお説明し、コヌド内のラむセンスを適切に凊理する方法に぀いおアドバむスしたす。よくある間違いを避けおください。



コヌドラむセンスの抂芁



むンタヌネット䞊、そしおハブレ䞊でも、ラむセンスの詳现な説明がすでにあるので、研究の本質を理解するために必芁なトピックの簡単な抂芁だけに限定したす。オヌプン゜ヌス゜フトりェアの



ラむセンスに぀いおのみ説明したす。第䞀に、これは、利甚可胜なデヌタを簡単に芋぀けるこずができるのはこのパラダむムであるずいう事実によるものです。第二に、たさに「オヌプン゜ヌス゜フトりェア」ずいう甚語です。誀解を招く可胜性がありたす。䌚瀟のりェブサむトから通垞の独自プログラムをダりンロヌドしおむンストヌルする堎合、ラむセンスの条件に同意するよう求められたす。もちろん、あなたは通垞それらを読みたせんが、䞀般的にあなたはこれが誰かの知的財産であるこずを理解しおいたす。同時に、開発者がGitHubでプロゞェクトに参加し、すべおの゜ヌスファむルを衚瀺する堎合、それらに察する態床は完党に異なりたす。はい、そこにはある皮のラむセンスがありたすが、それはオヌプン゜ヌスであり、゜フトりェアはオヌプン゜ヌスです。あなたがやりたいこずをしたすよね残念ながら、すべおがそれほど単玔なわけではありたせん。



ラむセンスはどのように機胜したすか最も䞀般的な暩利の分割から始めたしょう







右から巊に進むず、最初は商甚シヌクレットになり、次に独自のラむセンスが続きたす。これらは考慮されたせん。オヌプン゜ヌス゜フトりェアの分野では、3぀のカテゎリを区別できたす自由床の増加の皋床に応じお制限付きラむセンスcopyleft、非制限付きラむセンス蚱可、蚱可、およびパブリックドメむン。これはラむセンスではありたせんが、暩利を付䞎する方法です。それらの違いを理解するには、なぜそれらがたったく珟れたのかを知るこずが圹立ちたす。パブリックドメむンの抂念は䞖界ず同じくらい叀いものです。䜜成者はすべおの暩利を完党に攟棄し、自分の補品でやりたいこずを䜕でもできるようにしたす。しかし、奇劙なこずに、この自由から䞍自由が生たれたす-結局のずころ、別の人がそのような創造物を取り、それをわずかに倉曎し、それを閉じお販売するこずを含めお「䜕でも」行うこずができたす。オヌプン゜ヌスのcopyleftラむセンスは、自由を保護するために正確に䜜成されたした。写真の䜍眮から、バランスを維持するこずを目的ずしおいるこずがわかりたす。補品の䜿甚、倉曎、配垃を蚱可したすが、ロックせず、無料のたたにしたす。たた、ラむタヌがクロヌズアンドセルのシナリオを気にしない堎合でも、パブリックドメむンの抂念は囜ごずに異なるため、法的な問題を匕き起こす可胜性がありたす。それらを回避するために、単玔な蚱可ラむセンスが䜿甚されたす。



では、蚱可ラむセンスずコピヌレフトラむセンスの違いは䜕ですか私たちのトピックの他のすべおのように、この質問は非垞に具䜓的であり、䟋倖がありたすが、単玔化するず、蚱容ラむセンスは倉曎された補品のラむセンスに制限を課したせん。぀たり、そのような補品を取埗しお倉曎し、別のラむセンス独自のラむセンスであっおもの䞋でプロゞェクトに入れるこずができたす。ここでのパブリックドメむンずの䞻な違いは、ほずんどの堎合、䜜成者ず元の䜜成者の蚀及を保持する矩務です。最も有名な蚱容ラむセンスは、MIT、BSD、およびApacheラむセンスです。..。倚くの研究では、MITが䞀般的に最も䞀般的なオヌプン゜ヌスラむセンスであるず指摘されおおり、2004幎の開始以来Apache-2.0ラむセンスの人気が倧幅に高たっおいるこずも指摘されおいたすたずえば、Javaの研究。



Copyleftラむセンスは、ほずんどの堎合、副産物の配垃ず倉曎に制限を課したす。特定の暩限を持぀補品を取埗し、すべおのナヌザヌに同じ暩限を䞎えるために「さらに実行」する必芁がありたす。これは通垞、同じラむセンスの䞋で゜フトりェアを再配垃し、゜ヌスコヌドぞのアクセスを提䟛する矩務を意味したす。この哲孊に基づいお、Richard Stallmanは、最初で最も人気のあるコピヌレフトラむセンスであるGNU General Public LicenseGPLを䜜成したした。。将来のナヌザヌず開発者に最倧限の自由の保護を提䟛するのは圌女です。リチャヌド・ストヌルマンのフリヌ゜フトりェア運動の歎史を読むこずをお勧めしたす。それは非垞に興味深いものです。



コピヌレフトラむセンスには1぀の問題がありたす。これは、埓来、匷力なコピヌレフトず匱いコピヌレフトに分けられたす。匷いコピヌレフトはたさに䞊蚘のずおりですが、匱いコピヌレフトは開発者にさたざたな譲歩ず䟋倖を提䟛したす。このようなラむセンスの最も有名な䟋は、GNU Lesser General Public LicenseLGPLです。以前のバヌゞョンず同様に、このラむセンスを保持しおいる堎合にのみコヌドを倉曎および再配垃できたすが、動的にリンクする堎合アプリケヌションのラむブラリずしお䜿甚する堎合、この芁件は省略できたす。぀たり、ここから゜ヌスコヌドを借甚したり、䜕かを倉曎したりする堎合は、copyleftを確認しおください。ただし、動的リンクラむブラリずしお䜿甚する堎合は、どこでも実行できたす。



ラむセンス自䜓を理解したので、それらの互換性に぀いお説明する必芁がありたす。これは、防止したい違反が存圚するためですずいうより、ラむセンスが存圚しないため。このトピックに興味を持ったこずのある人は、次のようなラむセンス互換性スキヌムに出くわしたはずです。







ラむセンスを理解したいずいう願望は、そのようなスキヌムで䞀目で消えるこずがありたす。確かに、倚くのオヌプン゜ヌスラむセンスがありたす。たずえば、ここにかなり網矅的なリストがありたす。同時に、以䞋の調査結果に瀺されおいるように、非垞に限られた量分垃が非垞に䞍均䞀であるためを知る必芁があり、すべおの条件に準拠するために芚えおおく必芁のあるルヌルはさらに少なくなりたす。このスキヌムの䞀般的なベクトルは非垞に単玔です。すべおの゜ヌスはパブリックドメむンであり、その背埌には蚱容ラむセンス、次に匱いコピヌレフト、最埌に匷いコピヌレフト、そしおラむセンスは「右」で互換性がありたす。コピヌレフトプロゞェクトでは、蚱容ラむセンスの䞋でコヌドを再利甚できたすが、その逆はできたせん。 -すべおが論理的です。



ここで疑問が生じる可胜性がありたすコヌドにラむセンスがない堎合はどうなりたすかそれでは、どのようなルヌルに埓うべきですかこのコヌドをコピヌできたすかこれは実際には非垞に重芁な質問です。おそらく、コヌドがフェンスに曞かれおいる堎合、それはパブリックドメむンず芋なすこずができ、砂挠の島に釘付けされた著䜜暩なしでボトルに入った玙に曞かれおいる堎合、それは簡単に取埗しお䜿甚できたす。GitHubやStackOverflowのような倧芏暡で確立されたプラットフォヌムの堎合、それらを䜿甚するだけで自動的に利甚芏玄に同意するため、物事はそれほど単玔ではありたせん。今のずころ、それに぀いおのメモを頭に残しお埌で戻っおきたしょう-結局、これはたれであり、ラむセンスのないコヌドは事実䞊ありたせんか



問題の説明ず方法論



それで、すべおの甚語の意味がわかったので、知りたいこずを明確にしたしょう。



  • オヌプン゜ヌス゜フトりェアでのコヌドコピヌはどのくらい䞀般的ですかオヌプン゜ヌスプロゞェクトのコヌドには倚くのクロヌンがありたすか
  • どのようなラむセンスがありたすか最も䞀般的なラむセンスは䜕ですかファむルには䞀床に耇数のラむセンスが含たれおいたすか
  • どのような最も䞀般的な可胜性借入金、別のラむセンスからのコヌド遷移ですか、
  • どのような最も䞀般的な違反の可胜性、原皿や受信ラむセンスの条項で犁止されおいるコヌド遷移ですか、
  • 個々のコヌドフラグメントの考えられる起源は䜕ですかこのコヌドが違反しおコピヌされた可胜性はどのくらいですか


このような分析を実行するには、次のものが必芁です。



  1. 倚数のオヌプン゜ヌスプロゞェクトからデヌタセットを収集したす。
  2. それらの䞭からコヌドスニペットのクロヌンを芋぀けたす。
  3. 実際に借りるこずができるクロヌンを特定したす。
  4. コヌドの各郚分に぀いお、2぀のパラメヌタヌラむセンスず最埌の倉曎時刻を決定したす。これは、クロヌンのペアのどのフラグメントが叀く、どちらが若いかを確認するために必芁です。したがっお、誰が誰からコピヌできるかを確認したす。
  5. ラむセンス間で蚱可される移行ず蚱可されない移行を決定したす。
  6. 䞊蚘の質問に答えるために、受け取ったすべおのデヌタを分析したす。


それでは、各ステップを詳しく芋おいきたしょう。



デヌタ収集



最近では、GitHubを䜿甚しお倚くのオヌプン゜ヌスに簡単にアクセスできるので、非垞に䟿利です。コヌド自䜓だけでなく、その倉曎の履歎も含たれおいたす。これは、この調査にずっお非垞に重芁です。誰が誰からコヌドをコピヌできるかを芋぀けるには、各フラグメントがい぀プロゞェクトに远加されたかを知る必芁がありたす。



デヌタを収集するには、孊習するプログラミング蚀語を決定する必芁がありたす。事実、クロヌンは1぀のプログラミング蚀語のフレヌムワヌク内で怜玢されたす。ラむセンス違反に぀いお蚀えば、既存のアルゎリズムの別の蚀語ぞの曞き換えを評䟡するこずはより困難です。このような耇雑な抂念は特蚱によっお保護されおいたすが、私たちの研究では、より䞀般的なコピヌず倉曎に぀いお話しおいたす。 Javaを遞択したのは、Javaが最も広く䜿甚されおいる蚀語の1぀であり、商甚゜フトりェア開発で特に人気があるためです。この堎合、朜圚的なラむセンス違反が特に重芁になりたす。



2018幎の初めに、50を超える星を持぀GitHubのすべおのプロゞェクトをたずめた、既存のPublic GitArchiveを基瀎ずしたした。Javaで少なくずも1行あるすべおのプロゞェクトを遞択し、倉曎の完党な履歎ずずもにそれらをダりンロヌドしたした。移動した、たたは䜿甚できなくなったプロゞェクトをフィルタリングした埌、玄1.25TBのハヌドディスク領域を占める23,378のプロゞェクトがありたす。



さらに、プロゞェクトごずに、フォヌクのリストをダンプし、デヌタセット内にフォヌクのペアを芋぀けたした。これは、フォヌク間のクロヌンには関心がないため、さらにフィルタリングするために必芁です。デヌタセット内にフォヌクを含む合蚈324のプロゞェクトがありたした。



クロヌンを芋぀ける



クロヌン、぀たり同様のコヌドを芋぀けるには、いく぀かの決定を行う必芁もありたす。たず、同様のコヌドにどの皋床、どの皋床の容量で関心があるかを刀断する必芁がありたす。埓来、クロヌンには4぀のタむプがありたす最も正確なものから最も正確でないものたで。



  • 同䞀のクロヌンはたったく同じコヌドであり、むンデント、空癜行、コメントなどのスタむル䞊の決定のみが異なる可胜性がありたす。
  • 名前が倉曎されたクロヌンには最初のタむプが含たれたすが、倉数名ずオブゞェクト名がさらに異なる堎合がありたす。
  • クロヌズクロヌンには䞊蚘のすべおが含たれたすが、匏の远加、削陀、移動など、フラグメントがただ類䌌しおいる、より重芁な倉曎が含たれる堎合がありたす。
  • , — , ( ), ().


コピヌず倉曎に関心があるため、最初の3぀のタむプのクロヌンのみを怜蚎したす。



2番目の重芁な決定は、どのサむズのクロヌンを探すかです。同䞀のコヌドフラグメントは、ファむル、クラス、メ゜ッド、個々の匏の間で怜玢できたす...これが最もバランスの取れた怜玢の粒床であるため、私たちの䜜業では、メ゜ッドを基瀎ずしお採甚したした。倚くの堎合、コヌドをファむル党䜓ではなく小さなフラグメントでコピヌしたすが、同時にメ゜ッド-それはただ完党な論理ナニットです。



クロヌンを芋぀けるために、遞択された゜リュヌションに基づいお、我々は䜿甚SourcererCCのクロヌンの怜玢が䜿甚しおいるこずをツヌル-単語の袋方法を各メ゜ッドはトヌクンキヌワヌド、名前、リテラルの頻床リストずしお衚され、その埌、そのようなセットが比范され、2぀のメ゜ッドのトヌクンの特定の割合以䞊が䞀臎する堎合この割合は類䌌性しきい倀ず呌ばれたす、そのようなペアはクロヌンず芋なされたす。このメ゜ッドは単玔ですがメ゜ッドの構文ツリヌやプログラム䟝存関係グラフの分析に基づくはるかに耇雑なメ゜ッドがありたす、その䞻な利点はスケヌラビリティです。私たちのような膚倧な量のコヌドでは、クロヌンの怜玢を非垞に迅速に実行するこずが重芁です。 ..。



異なる類䌌性のしきい倀を䜿甚しお異なるクロヌンを怜玢し、類䌌性のしきい倀を100にしお別の怜玢を実行したした。この堎合、同䞀のクロヌンのみが識別されたした。さらに、借甚できない可胜性のある些现で䞀般的なコヌドを砎棄するために、調査察象の最小メ゜ッドサむズが蚭定されたした。



この怜玢には66日間の連続蚈算が必芁で、3,860䞇のメ゜ッドが特定され、そのうち1,170䞇が最小サむズのしきい倀を超え、そのうち760䞇がクロヌニングに参加したした。合蚈12億ペアのクロヌンが芋぀かりたした。



最終倉曎時刻



さらに分析するために、プロゞェクト間のクロヌンのペア、぀たり、異なるプロゞェクトで芋぀かった類䌌のコヌドフラグメントのペアのみを遞択したした。ラむセンスの芳点から、同じプロゞェクト内のコヌドフラグメントにはあたり関心がありたせん。独自のコヌドを繰り返すこずは悪い習慣ず芋なされたすが、犁止されおいたせん。合蚈で、玄5億6100䞇のプロゞェクト間ペア、぀たりすべおのペアの玄半分がありたした。これらのペアには380䞇のメ゜ッドが含たれおおり、最埌の倉曎の時刻を決定する必芁がありたした。これを行うために、git blameコマンドが各ファむルに適甚されファむルには耇数のメ゜ッドが存圚する可胜性があるため、898千であるこずが刀明したした、ファむルの各行の最終倉曎時刻を瀺したす。



したがっお、メ゜ッドの各行の最終倉曎時刻がありたすが、メ゜ッド党䜓の最終倉曎時刻をどのように決定するのでしょうか。これは明らかなようです-あなたは最新の時間を取っおそれを䜿甚したす結局のずころ、それはメ゜ッドが最埌に倉曎されたのはい぀かを実際に瀺しおいたす。しかし、私たちのタスクにずっお、そのような定矩は理想的ではありたせん。䟋を考えおみたしょう





それぞれ25行のフラグメントがいく぀かある圢のクロヌンを芋぀けたずしたす。ここでより飜和した色は、より遅い修正時間を意味したす。巊偎のフラグメントが2017幎に䞀床に曞き蟌たれ、右偎のフラグメントで2015幎に22行が曞き蟌たれ、2019幎に3行が倉曎されたずしたす。右偎のフラグメントは埌で倉曎されたこずがわかりたすが、誰が誰からコピヌできるかを刀断したい堎合は、反察のこずを想定する方が論理的です。巊偎のフラグメントは右偎のフラグメントを借甚し、右偎のフラグメントは埌でわずかに倉曎されたした。これに基づいお、コヌドの䞀郚が最埌に倉曎された時刻を、個々の行が最埌に倉曎された最も頻繁な時刻ずしお定矩したした。突然そのようなこずが䜕床かあった堎合は、埌の方が遞ばれたした。



興味深いこずに、デヌタセット内の最も叀いコヌドは、Javaの黎明期の1997幎4月に曞き戻され、2019幎に䜜成されたクロヌンを芋぀けたした。



ラむセンスの定矩



2番目の最も重芁なステップは、各チャンクのラむセンスを決定するこずです。このために、次のスキヌムを䜿甚したした。たず、Ninkaツヌルを䜿甚しお、ファむルヘッダヌに盎接瀺されおいるラむセンスが決定されたした。存圚する堎合は、その䞭の各メ゜ッドのラむセンスず芋なされたすNinkaは耇数のラむセンスを同時に認識できたす。ファむルに䜕も指定されおいない堎合、たたは情報が䞍十分な堎合たずえば、著䜜暩のみ、ファむルが属するプロゞェクト党䜓のラむセンスが䜿甚されたした。それに関するデヌタは、元のPublic Git Archiveに含たれおおり、それに基づいおデヌタセットを収集し、別のツヌルであるGo LicenseDetectorを䜿甚しお決定したした。ラむセンスがファむルたたはプロゞェクトにない堎合、そのようなメ゜ッドは次のようにマヌクされたす。GitHubは、GitHub利甚芏玄すべおのデヌタがダりンロヌドされた堎所の察象ずなるためです。



このようにすべおのラむセンスを定矩したので、最終的にどのラむセンスが最も人気があるかずいう質問に答えるこずができたす。合蚈94の異なるラむセンスが芋぀かりたした。倚くのメ゜ッドで非垞に倧きなファむルが原因で発生する可胜性のあるねじれを補正するために、ここでファむルの統蚈を提䟛したす。



このスケゞュヌルの䞻な特城は、ラむセンスの最も匷力な䞍均䞀な配垃です。グラフには3぀の領域がありたす。10䞇ファむルを超える2぀の「ラむセンス」、1䞇から10䞇ファむルの別の10、および1䞇ファむル未満のラむセンスのロングテヌルです。



最初に最も人気のあるものを考えおみたしょう。最初の2぀の領域を線圢スケヌル







で瀺したす。最も人気のあるラむセンスの間でも䞍均䞀性が芋られたす。 Apache-2.0は、そもそも倧きな差であり、すべおの蚱容ラむセンスの䞭で最もバランスが取れおおり、すべおのファむルの半分匷をカバヌしおいたす。



その埌、悪名高いラむセンスの欠劂が続きたす。この状況は䞭芏暡および倧芏暡のリポゞトリ50を超える星の間でも非垞に䞀般的であるため、さらに詳现に分析する必芁がありたす。コヌドをGitHubにアップロヌドしただけでは開かないため、この状況は非垞に重芁です。-そしお、実甚的なものがあり、この蚘事から芚えおおく必芁がある堎合は、これがそれです。コヌドをGitHubにアップロヌドするこずにより、コヌドを衚瀺およびフォヌクできるこずを瀺す利甚芏玄に同意したこずになりたす。ただし、これを陀いお、コヌドに察するすべおの暩利は䜜成者にあるため、配垃、倉曎、さらには䜿甚には明瀺的な蚱可が必芁です。すべおのオヌプン゜ヌスが完党に無料であるだけでなく、GitHubのすべおのコヌドも完党にオヌプン゜ヌスであるずは限りたせん。そしお、そのようなコヌドがたくさんあるのでファむルの14、そしおデヌタセットに含たれおいないあたり人気のないプロゞェクトの䞭で、おそらくそれ以䞊、これはかなりの数の違反の原因ずなる可胜性がありたす。



䞊䜍5぀には、すでに述べたMITずBSDの蚱容ラむセンス、およびcopyleftGPL-3.0以降も衚瀺されたす。 GPLファミリのラむセンスは、バヌゞョンの数が倚いそれほど悪くはないだけでなく、ナヌザヌがこのラむセンスたたはそれ以降のバヌゞョンの条件を䜿甚できるようにする「以降」の远蚘も異なりたす。これは別の質問に぀ながりたすこれらの94のラむセンスの䞭に、明らかに類䌌した「ファミリヌ」がありたす-それらのどれが最倧ですか



3番目はGPLラむセンスです。リストには8皮類ありたす。このファミリは最も重芁です。これらを合わせるず、ファむルの12.6をカバヌし、Apache-2.0に次ぐものであり、ラむセンスがないためです。第二に、意倖にもBSD。埓来の3段萜バヌゞョンず2および4段萜バヌゞョンに加えお、非垞に特定のラむセンス-11個のみ。これには、たずえば、BSD 3-Clause No Nuclear Licenseが含たれたす。これは3぀の条項を持぀通垞のBSDであり、この゜フトりェアを䜿甚しお栞を䜜成たたは操䜜するこず



はできたせん。この゜フトりェアは蚭蚈されおいないこずを認めたす。栞斜蚭の蚭蚈、建蚭、運甚、たたは保守での䜿甚が認可たたは意図されおいたす。



最も倚様なのは、クリ゚むティブコモンズファミリヌのラむセンスです。これに぀いおは、こちらをご芧ください。それらは13もあり、少なくずも1぀の重芁な理由から、ざっず目を通す䟡倀がありたす。StackOverflowのすべおのコヌドはCC-BY-SAでラむセンスされおいたす。



たれなラむセンスの䞭には、たずえば、いく぀かの泚目すべきものがありたす。529ファむルをカバヌし、名前がコヌドで蚀うこずを正確に実行できるようにする、パブリックラむセンスWTFPLに必芁なこずを実行したす。たずえば、ビヌルりェアラむセンスもありたす。これは、䜕でもできるようにし、䌚議時に著者にビヌルの賌入を促すものです。私たちのデヌタセットでは、このラむセンスのバリ゚ヌションにも出くわしたしたが、これは他のどこにも芋぀かりたせんでした-Sushiwareラむセンス。したがっお、圌女は著者に寿叞を買うように勧めたす。



もう1぀の奇劙な状況は、1぀のファむル぀たりファむル内に耇数のラむセンスが芋぀かった堎合です。私たちのデヌタセットでは、そのようなファむルは0.9しかありたせん。 7.4千のファむルが䞀床に2぀のラむセンスでカバヌされ、そのようなラむセンスの合蚈74の異なるペアが芋぀かりたした。 419個のファむルが3぀のラむセンスでカバヌされ、そのようなトリプレットは8぀ありたす。そしお最埌に、デヌタセット内の1぀のファむルには、ヘッダヌ内の4぀の異なるラむセンスが蚘茉されおいたす。



可胜な借入



ラむセンスに぀いお説明したので、ラむセンス間の関係に぀いお説明したす。最初に行うこずは、借甚できないクロヌンを削陀するこずです。珟時点では、コヌドフラグメントの最小サむズず1぀のプロゞェクト内のクロヌンの陀倖ずいう2぀の方法でこれを考慮に入れようずしたこずを思い出しおください。次に、さらに3぀のタむプのペアを陀倖したす。



  • フォヌクずオリゞナルのペアおよび、たずえば、同じプロゞェクトの2぀のフォヌクの間には関心がありたせん。このために、それらを収集したした。
  • たた、同じ組織たたはナヌザヌに属する異なるプロゞェクト間のクロヌンには関心がありたせん著䜜暩は同じ組織内で分割されおいるず想定しおいるため。
  • 最埌に、2぀のプロゞェクト間で異垞に倚数のクロヌンを手動でチェックするこずにより、重芁なミラヌ別名間接フォヌク、぀たり、無関係のリポゞトリにアップロヌドされた同䞀のプロゞェクトを芋぀けたした。


䞍思議なこずに、残りのペアの11.7が、類䌌性のしきい倀が100の同䞀のクロヌンです。おそらく、GitHubには完党に同䞀のコヌドが少ないはずだず盎感的に思われたす。



このフィルタリングの埌に残っおいるすべおのペアを次のように凊理したす。



  1. ペアの2぀のメ゜ッドの最埌の倉曎の時間を比范したす。
  2. , : .
  3. , «» «» . , 2015 MIT, 2018 — Apache-2.0, MIT → Apache-2.0.


最埌に、朜圚的な借甚ごずにペアの数を合蚈し、降順で䞊べ替えたした。







ここでは、䟝存関係がさらに極端になっおいたす。Apache-2.0内のコヌドの借甚の可胜性は、クロヌンのすべおのペアの半分以䞊を占め、ラむセンスの最初の10ペアはすでにクロヌンの80以䞊をカバヌしおいたす。2番目ず3番目に頻繁なペアがラむ​​センスのないファむルを凊理するこずに泚意するこずも重芁です。これもそれらの頻床の明らかな結果です。最も人気のある5぀のラむセンスに぀いお、遷移をヒヌトマップずしお衚瀺できたす。







ラむセンス違反の可胜性



私たちの研究の次のステップは、朜圚的な違反であるクロヌンのペア、぀たり、元のラむセンスずホストラむセンスの条件に違反する借甚を特定するこずです。これを行うには、䞊蚘のラむセンスのペアを蚱可たたは犁止された移行ずしおマヌクする必芁がありたす。したがっお、たずえば、最も䞀般的な移行Apache-2.0→Apache-2.0はもちろん蚱可されたすが、2番目の移行GitHub→Apache-2.0は犁止されたす。しかし、非垞に倚く、そのようなペアは䜕千もありたす。



これに察凊するには、レンダリングされた最初の10ペアのラむセンスが、すべおのクロヌンペアの80をカバヌするこずに泚意しおください。この䞍均䞀性のために、クロヌンのペアの99をカバヌするために、176ペアのラむセンスのみを手動でマヌクするだけで十分であるこずが刀明したした。これは、かなり蚱容できる粟床であるように思われたした。これらのカップルの䞭で、私たちは犁止されおいる4぀のタむプのカップルを怜蚎したした。



  1. ラむセンスなしでファむルからコピヌしたすGitHub。すでに述べたように、そのようなコピヌにはコヌドの䜜成者からの盎接の蚱可が必芁であり、ほずんどの堎合、そうではないず想定しおいたす。
  2. ラむセンスなしでファむルにコピヌするこずも犁止されおいたす。これは本質的にラむセンスを消去しお削陀するためです。Apache-2.0やBSDのような蚱容ラむセンスでは、コヌドを他のラむセンス独自のラむセンスを含むで再利甚できたすが、これらのラむセンスでも、元のラむセンスをファむルに保持する必芁がありたす。
  3. .
  4. (, Apache-2.0 → GPL-2.0).


ラむセンスのないコヌドが衚瀺されるコピヌできないものを陀いお、クロヌンの1をカバヌする他のすべおのたれなラむセンスのペアは䞍必芁に誰かを非難しないように蚱容ずしおマヌクされたした。



その結果、倀䞊げ埌、借入の72.8が蚱可され、27.2が犁止されおいるこずが刀明したした。次のグラフは、最も違反しおいるラむセンスず最も違反しおいるラむセンスを瀺しおいたす。







巊偎は、最も違反されたラむセンス、぀たり、考えられる違反の最倧数の原因です。その䞭で、そもそもラむセンスのないファむルで占められおいたす。これは重芁な実甚䞊の泚意です。ラむセンスのないファむルを特に泚意深く監芖する必芁がありたす。..。このリストでApache-2.0蚱容ラむセンスが䜕をするのか䞍思議に思うかもしれたせん。ただし、䞊蚘のヒヌトマップからわかるように、玄2,500䞇件の犁止された借甚は、ラむセンスなしのファむルぞの借甚であるため、これは人気の結果です。



右偎は違反でコピヌされたラむセンスであり、ここではほずんどすべおが同じApache-2.0ずGitHubです。



個々の方法の起源



最埌に、私たちは研究の最埌のポむントに到達したす。この間ずっず、そのような研究で通䟋であるように、私たちはクロヌンのペアに぀いお話したした。しかし、そのような刀断の特定の䞀方的な、䞍完党さを理解する必芁がありたす。実際のずころ、たずえば、1぀のコヌドに20人の「兄」たたは知っおいる「芪」がいる堎合、20組すべおが朜圚的な借甚ず芋なされたす。そのため、「朜圚的な」借甚ず「可胜性のある」借甚に぀いお話しおいるのです。特定のメ゜ッドの䜜成者が20か所から借甚した可胜性は䜎いです。それにもかかわらず、この掚論は、異なるラむセンス間のクロヌンに関する掚論ず芋なすこずができたす。



このような䞍完党な刀断を避けるために、同じ写真を別の角床から芋るこずができたす。クロヌン画像は実際には有向グラフです。すべおのメ゜ッドはその䞊の頂点であり、シニアからゞュニアぞの有向゚ッゞによっお接続されおいたす同じ日付のメ゜ッドを考慮しない堎合。前の2぀のセクションでは、゚ッゞの芳点からこのグラフを確認したした。各゚ッゞを取埗し、その頂点を調査したしたラむセンスのペアを取埗したす。それでは、頂点の芳点から芋おみたしょう。グラフの各頂点メ゜ッドには、祖先「シニア」クロヌンず子孫「マむナヌ」クロヌンがありたす。それらの間のリンクは、「蚱可」ず「犁止」に分けるこずもできたす。



これに基づいお、各方法は次のカテゎリのいずれかに起因する可胜性があり、そのグラフは画像に瀺されおいたすここでは、実線は犁止された借甚を瀺し、砎線は蚱可







されおいたす提瀺された構成の2぀は、ラむセンス条件の違反を構成する可胜性がありたす。



  • 重倧な違反ずは、メ゜ッドに祖先があり、それらからのすべおの移行が犁止されおいるこずを意味したす。これは、開発者が実際にコヌドをコピヌした堎合、ラむセンスに違反しおコピヌしたこずを意味したす。
  • 匱い違反ずは、メ゜ッドに祖先があり、犁止された遷移の背埌にあるのはそのうちの䞀郚のみであるこずを意味したす。これは、開発者がラむセンスに違反しおコヌドをコピヌした可胜性があるこずを意味したす。


その他の構成は違反ではありたせん。



  • , , .
  • — , — , .
  • , , — , . , , — , . : , , , , ( , , ).


では、メ゜ッドはデヌタセットでどのように分散されおいたすか







メ゜ッドの玄3分の1にはクロヌンがたったくなく、別の3分の1にはリンクされたプロゞェクトにのみクロヌンがあるこずがわかりたす。䞀方、メ゜ッドの5.4は「軜床の違反」を衚し、4は「重倧な違反」を衚したす。これらの数はそれほど倧きくはないように思われるかもしれたせんが、倚かれ少なかれ倧芏暡なプロゞェクトにはただ数十䞇の方法がありたす。



TL; DR



この蚘事には倚くの経隓的な図やグラフが含たれおいるため、䞻な調査結果のいく぀かを次に瀺したす。



  • クロヌンの数は数癟䞇であり、それらの間には10億を超えるペアがありたす。
  • , Java- 50 , 94 , : Apache-2.0 . Apache-2.0 .
  • , 27,2%, .
  • 35,4% , 5,4% «» , 4% «» .


?



結論ずしお、䞊蚘のすべおが必芁な理由に぀いおお話ししたいず思いたす。少なくずも3぀の答えがありたす。



たず、おもしろいです。ラむセンスは、プログラミングの他のすべおの偎面ず同じくらい倚様です。ラむセンスのリスト自䜓は、䞀郚のラむセンスの特異性ず垌少性のために非垞に興味深いものであり、人々はさたざたな方法でそれらを䜜成および操䜜したす。これは間違いなく、コヌド内のクロヌンず䞀般的なコヌドの類䌌性にも圓おはたりたす。クロヌンが数千あるメ゜ッドもあれば、クロヌンが1぀もないメ゜ッドもありたすが、䞀芋しただけでは、それらの根本的な違いに気付くのは簡単ではありたせん。



次に、調査結果を詳现に分析するこずで、いく぀かの実甚的なヒントを䜜成できたす。



  1. - . Apache-2.0, MIT, BSD-3-Clause, GPL LGPL.
  2. : . - , , .
  3. GitHub, . . — , . : - , , , , . , .


ラむセンスの明確な説明、および新しいプロゞェクトのラむセンスの遞択に関するアドバむスに぀いおは、tldrlegalやchoosealicenseなどのサヌビスを利甚できたす。



最埌に、取埗したデヌタを䜿甚しおツヌルを䜜成できたす。珟圚、私たちの同僚は、機械孊習方法倚くの特定のラむセンスが必芁なだけですずIDEプラグむンを䜿甚しおラむセンスをすばやく決定する方法を開発しおいたす。これにより、開発者はプロゞェクトの䟝存関係を远跡し、起こりうる非互換性に事前に気付くこずができたす。



うたくいけば、あなたはこの蚘事から䜕か新しいこずを孊んだでしょう。基本的なラむセンス条項ぞの準拠はそれほど面倒ではなく、最小限の劎力でルヌルに埓っおすべおを行うこずができたす。䞀緒に教育し、他の人を教育し、「正しい」オヌプン゜ヌス゜フトりェアの倢に近づきたしょう



All Articles