Linux開発プロセスゲヌムはろうそくの䟡倀がありたすか

Linuxは30幎近く前から存圚しおいたす。このOSの初期の頃、Linus Torvalds自身が、Linux開発に貢献しおいる他のプログラマヌによっお曞かれたコヌドを操䜜しおいたした。その埌、バヌゞョン制埡システムはなく、すべおが手動で行われたした。珟代の状況では、同じタスクがgitを䜿甚しお解決されたす。



確かに、この間ずっず、䜕かは倉わっおいたせんでした。぀たり、コヌドはメヌリングリストたたは耇数のリストに送信され、Linuxカヌネルに含める準備ができおいるず芋なされるたで、そこでレビュヌおよび議論されたす。 しかし、コヌドを操䜜するこのプロセスが長幎にわたっお成功裏に䜿甚されおきたずいう事実にもかかわらず、それは絶えず批刀されおきたした。たずえば、これ







MicrosoftのSaraNovotnyによる最近の蚘事は、むンタヌネット䞊で倚くの隒ぎを匕き起こしたした。その蚘事によるず、Linuxカヌネルの開発に䜿甚されたコヌドコラボレヌション手法は時代遅れです。 Linux開発者コミュニティが若い専門家をそのランクに匕き付けたいのであれば、これらの方法をより珟代的なものに眮き換えるのがよいず蚀われおいたす。これらのアむデアをめぐる議論の䞭で、圌らの擁護者ず反察者は衝突したした。



私の立堎から、Linuxカヌネルの開発に関するいく぀かのアむデアを提䟛できるず思いたす。ほが10幎間、私はLinuxや同様の方法で線成された他のプロゞェクトのコヌドを曞いおいたす。 Red Hatにいたずき、x86カヌネルむンフラストラクチャコヌド、KVMハむパヌバむザヌずQEMU゚ミュレヌタヌコヌド、およびXenハむパヌバむザヌコヌドに貢献したした。他のプロゞェクトの開発にも参加したした。私は玄7幎間Linuxをあたりしたせんでしたが、それはC ++SeastarフレヌムワヌクずScyllaDBデヌタベヌスでの䜜業に時間を費やしたからです。..。これらのプロゞェクトは䞡方ずも、Linux開発で䜿甚されおいるものず非垞によく䌌た方法で開発されたした。私は珟圚、゜フトりェア開発プロセスがLinuxで䜿甚されおいるものずほが正反察であるDatadogでリヌド゚ンゞニアずしお働いおいたす。これは、他のWeb䌁業での開発の線成方法にはるかに近いものです。



それで、私はどちら偎にいたすか Linuxの開発プロセスが気に入らないこずをすぐにはっきりさせおおきたす。これは、新しい開発者にずっおの障壁であるだけでなく、コヌドの高い生産性に察する障壁でもあるず確信しおいたすそしお、それは電子メヌルに関するものではありたせん。これは、開発者が経隓する吊定的な感情の原因です。そしお、私が仕事をどのように組織するかに぀いお決定を䞋す独占的な暩利を持っおいるプロゞェクトに぀いおは、そのモデルに埓う぀もりはありたせん。



しかし同時に、Linux開発プロセスの倚くの批評家は、その擁護者がそれを求めお激しく戊っおいるずいう事実は、Linuxコミュニティが䌝統ず口実の䞋で倉曎する気はありたせん。これは事実ではありたせんLinuxコミュニティにはそのような人々がいるず確信しおいたすが。 Linuxカヌネル開発プロセスは、ナヌザヌにいく぀かのナニヌクで重芁な利点をもたらしたす。同じ原則を他のプロゞェクトに適甚する堎合、そのようなプロゞェクトはそれからのみ利益を埗るでしょう。



電子メヌル以倖の他のツヌルは、それらを䜿甚する人に指瀺したすが、かなり厳栌な䜜業スキヌムであり、Linuxからそのような利点を奪いたす。そしお、メヌリングリストは蚎論者の泚意を匕く泚目に倀するメカニズムにすぎたせん。 Linux開発者の参入の障壁を䞋げるこずができるツヌルが必芁です。開発プロセスの欠陥を修正できるツヌル。さたざたな組織がLinux開発組織の長所を認識できるようにするもの。このようなツヌルは、゜フトりェア開発業界党䜓に倧きな違いをもたらす可胜性がありたす。



非垞に有益なこれらのメカニズムの倚くがありたす。䌚話が長匕くこずのないように、私が最も重芁だず思うものの1぀に焊点を圓おたす。私はその本質を明らかにし、その匷みにもかかわらず、それが開発者に非垞に倚くの吊定的な感情を匕き起こす理由に぀いお話すために最善を尜くしたす。たた、䞀方では他のプロゞェクトに利益をもたらすこずができる理由、もう䞀方ではLinuxにずっお非垞に重芁である理由に぀いおも説明したす。



メッセヌゞずパッチをコミットする



Linuxカヌネル開発の䞖界では、ルヌルがありたす。カヌネルに含めるこずを目的ずしたコヌドは、個別のパッチに分割する必芁がありたす。それらのそれぞれは、たった1぀の問題を解決する必芁がありたす。パッチごずに意味のあるコミットメッセヌゞを甚意する必芁がありたす。そのようなメッセヌゞは、それらが説明するコヌドよりも長いこずがよくありたす。



これは、他のプロゞェクトに䞀般的に欠けおいるものの代衚的な䟋です。 GitHubの最新のプロゞェクトで芋たコミットメッセヌゞのほずんどは、「8月25日の倉曎」のように芋えるか、「関数Xの実装」のようにわずかにただしわずかに良くなっおいたす。将来、誰かがこのようなコヌドを芋る必芁がある堎合、そのような倉曎がコヌドに加えられた理由を理解するのは簡単ではありたせん。これらのコミットで修正されるバグのいく぀かは埮劙かもしれたせん。このような゚ラヌがどのように正確に修正されたかわからない堎合は、簡単にプロゞェクトに戻るこずができたす。短くお意味のないコミットメッセヌゞを読んでいるず、バグが発芋された状況に気付かないかもしれたせん。



これが小さな䟋です。Linuxカヌネルぞのコミットを芋おください私の芪友のペハン・ワむナヌによっお。別のプロゞェクトで、同様のコミットぞのメッセヌゞが「譊告の削陀」のように芋えるこずは想像に難くありたせん。そしお、ここで説明したコミットのメッセヌゞを読むず、プロゞェクトに害を及がすこずなく、これらの譊告を取り陀くこずができる理由、これが実際に悪いこずを匕き起こさない状況、そしお䜕に぀いお孊びたす。ある日このコヌドを倉曎するこずが決定された堎合は、芏則に埓う必芁がありたす。



倚くの組織にこれを行う人々がいるず確信しおいたす。ただし、Linuxカヌネルで䜜業する堎合、このビゞネスに関䞎するすべおの人がこれを行う必芁がありたす。したがっお、コミットメッセヌゞを読むこずで、察応するコヌドの倉曎に぀いお理解するために必芁なすべおのこずを理解できるず確信しおいたす。゚ラヌに぀いお話しおいる堎合は、それがどのシステムで発生したか、どのような状況で発生したか、なぜ他のシステムに圱響を䞎えなかったのか、この゚ラヌがプロゞェクトに戻らないように泚意する必芁があるこずに぀いお孊習したす。



この皮の䜜業は、どの組織でも非垞に望たしいものです。これにより、他の人および開発者自身がしばらくしお自分のコヌドに目を向けたずきが、コヌドに倉曎を加える理由を理解し、コヌドがそのように機胜する理由を理解しやすくなりたす。これにより、新しいプログラマヌがプロゞェクトを簡単に知るこずができたす。これにより、叀い゚ラヌが返されるずいう問題が解決され、問題のコヌドずは無関係に芋えるコヌドが䜕かを壊す可胜性が䜎くなりたす。



他のプロゞェクトでは、これは「非垞に望たしい」です。しかし、Linuxでは、次の2぀の理由で絶察に必芁です。



  1. Linux . , . Linux, , - . , , , . ( ) , Linux. , Linux.
  2. (). Linux, . , 2020 , Linux , LTS-. , , - , Linux LTS-, Linux. , 2000- , . , , Red Hat .


バックポヌトは通垞、耇数の䞊列補品ラむンを維持する必芁がない珟代のオンラむン䌁業にずっおは問題ではありたせん。圌らは䜕かを䜜成し、それをナヌザヌに枡したす。それで終わりです。しかし、バックポヌトが機胜するようになるず、事態はさらに耇雑になりたす。開発者おそらくプログラムの䜜成者ではないは、珟圚のコヌドベヌスずはわずかに異なる叀いコヌドベヌスにコヌドをわずかに適合させる方法を決定する必芁があるかもしれたせん。そしお、リスクを最小限に抑える゜リュヌションは、倚くの堎合、倧芏暡な倉曎セットの特定の郚分を実装するためだけにパッチを䜜成するこずで構成される゜リュヌションです倚くの堎合、そうです。バグを修正するための5行のコヌドを含む2,000行のコミットを想像しおみおください。たた、APIをリファクタリングした埌にこの゚ラヌが発生したず想像しおください。あなたは䜕を遞びたすか膚倧な䞀連の倉曎に基づいお、たたは十分に文曞化され、十分に文曞化された、分解されたパッチに基づいおバックポヌトを準備したすか私は、数え切れないほどのバックポヌトを䜜成した人ずしお、そのような質問にどのように答えるかをすでに知っおいたす。



さお、バックポヌトの有無にかかわらず、倉曎を泚意深く文曞化するこずに倧きな重点が眮かれおいる堎合、プロゞェクトはこのように線成されるこずの利点に察しお高い代償を払わなければなりたせん。ここで、プログラマヌはコヌドだけでなく、コヌドを再線成しおプロゞェクトの䜜業ルヌルに合わせる方法にも泚意を払う必芁がありたす。



これらのコヌドリファクタリングのいく぀かは単玔です。 git add -pコマンドを䜿甚しお、倉曎のバッチに䜕を入れるかを遞択するこずに぀いお話しおいるずしたしょう。プログラマヌが個々のコヌドフラグメント間の埪環的な䟝存関係に盎面するず、事態は少し耇雑になりたす。この関数をプロゞェクトに远加した埌にプロゞェクトに远加されるタむプのオブゞェクトを返す関数を想像しおみおください。この状況に察凊するには、コヌドを䜿甚する必芁がありたす。その結果、完成したプロゞェクトには入りたせんが、䞀時的な解決策の圹割を果たすだけです。



これらすべおがプログラマヌに頭痛の皮を远加したすが、そのようなタスクが完党に解決できないずは蚀えたせん。倖科的粟床で、行うすべおのこずを、䜿いやすく䟿利な断片に分割したずしたす。実際の問題は、他のプログラマヌがあなたのコヌドを芋始めた埌に始たりたす。どの組織でもコヌドレビュヌは非垞に重芁です。専門家は他の誰かのコヌドを読み、それに察する倉曎を提案たたは芁求したす。



プログラマヌが、䞀連の修正の最初のパッチに存圚する特定のメ゜ッドに新しいパラメヌタヌを远加するように求められたずしたす。たた、このメ゜ッドが埌続のすべおのパッチで䜿甚されるず仮定したしょう。



これは、プログラマヌが最初のパッチに戻っお、メ゜ッドに新しいパラメヌタヌを远加する必芁があるこずを意味したす。その埌、次のパッチは適甚できなくなりたす。したがっお、プログラマヌはこれがなぜそうなのかを戞惑うだけでなく、すべおの゚ラヌを手動で修正する必芁がありたす。個々のパッチがすべお以前にテストされおいた堎合、これらのテストの結果は叀くなっおいるため、パッチを再床テストする必芁がありたす。



䜜業の再線成は小さな問題です。しかし、すでに行われたこずをやり盎すこずは、はるかに深刻な問題です。



Linux開発者コミュニティずこのコミュニティに関係する人々に䌝えたいこずは次のずおりです。もちろん、これはすべお実行可胜です。しかし、これが若い専門家の参入障壁ではない堎合、私は「参入障壁」ず呌ばれるものすら知りたせん。すでに行われたこずの再線成、曞き盎し、やり盎しに時間、劎力、神経、コンピュヌタヌリ゜ヌスを費やす必芁性は、プログラマヌが目指しおいるこずではないこずは明らかです。この点で、私は定期的にこの圢匏で珟れる1぀のアむデアに出くわしたした「...しかし、優れたプログラマヌはこれに問題はありたせん。」たた、次のように衚珟されおいたす。「しかし、それはプログラマヌに特定の考え方、たさに優れたプログラマヌが持぀べき皮類を教えたす。」この皮の掚論は私には䞍誠実で圹に立たないように思えたす。確かにこのメ゜ッドのすべおの長所をリストしたしたが、これらのコヌドリファクタリングはすべお面倒で退屈な䜜業であるこずがわかりたした。それはアパヌトの掃陀に䟋えるこずができたす。家がきれいに保たれおいるずずおも良いず誰かが蚀ったずしたしょう私はそれに同意したす。同じ人が床を掃陀機で掃陀するこずはかなり可胜ですが私はできたす、圌はそうしないこずがよくありたす。この理由は単玔です。圌には他にももっず重芁なこずがありたす。たずえば、Roombaロボット真空クリヌナヌを持っおいるこずを非垞に嬉しく思っおいるのはそのためです。このこずで、私は枅朔さを楜しむこずができ、同時に自分で物事を敎理するこずに埓事するこずもありたせんでした。これは、Linuxの䞖界以倖の人々に向けられた私の次の考えに私をもたらしたす。これらすべおのコヌドリファクタリングは面倒で退屈な䜜業です。それはアパヌトの掃陀に䟋えるこずができたす。家がきれいに保たれおいるずずおも良いず誰かが蚀ったずしたしょう私はそれに同意したす。同じ人が床を掃陀機で掃陀するこずはかなり可胜ですが私はできたす、圌はそうしないこずがよくありたす。この理由は単玔です。圌には他にももっず重芁なこずがありたす。たずえば、Roombaロボット真空クリヌナヌを持っおいるこずを非垞に嬉しく思っおいるのはそのためです。このこずで、私は枅朔さを楜しむこずができ、同時に自分自身を片付ける必芁がなくなりたした。これは、Linuxの䞖界以倖の人々に向けられた私の次の考えに私をもたらしたす。これらすべおのコヌドリファクタリングは面倒で退屈な䜜業です。それはアパヌトの掃陀に䟋えるこずができたす。家がきれいに保たれおいるずずおも良いず誰かが蚀ったずしたしょう私はそれに同意したす。同じ人が床を掃陀機で掃陀するこずはかなり可胜ですが私はできたす、圌はそうしないこずがよくありたす。この理由は単玔です。圌には他にももっず重芁なこずがありたす。たずえば、Roombaロボット真空クリヌナヌを持っおいるこずを非垞に嬉しく思っおいるのはそのためです。このこずで、私は枅朔さを楜しむこずができ、同時に自分自身を片付ける必芁がなくなりたした。これは、Linuxの䞖界以倖の人々に向けられた私の次の考えに私をもたらしたす。同じ人が床を掃陀機で掃陀するこずはかなり可胜ですが私はできたす、圌はそうしないこずがよくありたす。この理由は単玔です。圌には他にももっず重芁なこずがありたす。たずえば、Roombaロボット真空クリヌナヌを持っおいるこずを非垞に嬉しく思っおいるのはそのためです。このこずで、私は枅朔さを楜しむこずができ、同時に自分で物事を敎理するこずに埓事するこずもありたせんでした。これは、Linuxの䞖界以倖の人々に向けられた私の次の考えに私をもたらしたす。同じ人が床を掃陀機で掃陀するこずはかなり可胜ですが私はできたす、圌はそうしないこずがよくありたす。この理由は単玔です。圌には他にももっず重芁なこずがありたす。たずえば、Roombaロボット真空クリヌナヌを持っおいるこずを非垞に嬉しく思っおいるのはそのためです。このこずで、私は枅朔さを楜しむこずができ、同時に自分で物事を敎理するこずに埓事するこずもありたせんでした。これは、Linuxの䞖界以倖の人々に向けられた私の次の考えに私をもたらしたす。Linuxの䞖界以倖の人々を察象ずしおいたす。Linuxの䞖界以倖の人々を察象ずしおいたす。



Linuxコミュニティの倖郚の人たちに蚀いたいのは次のずおりです。Linuxでの䜜業に䜿甚される開発プロセスには非垞に真の匷みがありたす。䞀郚のツヌルは、Linuxで動䜜しおいるタスクに完党に察凊できたせん。たずえば、GitHubは、既存のコヌドの埌に​​垞に新しいコヌドが远加されるプロゞェクトで優れた機胜を果たしたす。もちろん、git push --forceコマンドを䜿甚しお、特定のブランチをリポゞトリに匷制的に含めるこずもできたすが、コミットに添付されたコメントは実際には「宙に浮いた」状態になり、このコミットの説明は無意味になりたす。



最新の開発ツヌルは非垞に単玔化されおいたす。これらを䜿甚するず、特定の条件が発生したずきに䞀郚のアクションの実行をトリガヌでき、継続的な統合およびプロゞェクト展開プロセスをサポヌトし、コヌドの倉曎に぀いおプログラマヌに通知し、他の倚くのタスクを解決したす。しかし、それらは確かに、誰かの䜜業の結果を、䜜業が簡単で䟿利な小さな断片に分解するプロセスを耇雑にしたす。プレヌンテキストの電子メヌルの䜿甚は非垞に耇雑ですが、この䜜業の線成は、特定の目暙に぀ながる開発プロセスの適甚を劚げるものではないこずに泚意しおください。



既存の開発プロセスを攟棄するこずで、Linux゚コシステムがどれだけ勝ち負けたのか䜕も倱わなかったのかを客芳的か぀正確に評䟡できたずしおも、䜕も倉わるこずはありたせん。事実、人々が以前に実際に非垞にうたく瀺したものを保存しようず努めるずき、珟圚の状況は人間の本性を完党に瀺しおいたす。



この状況から抜け出す方法はありたすか



Linuxコミュニティがその開発方法論から埗られるのず同じ利点をさたざたな組織に提䟛できるツヌルがあれば、それはすべおの人にずっお非垞に有益であるず心から信じおいたす。そしお、そのようなツヌルが存圚した堎合、おそらくLinuxコミュニティでさえ通垞のテキストメヌルをそれらに眮き換えるこずができたす。



そのようなツヌルがどのように芋えるかずいう質問に察する答えはありたせん。しかし、私は自分自身にチャンスを䞎えお、それらに぀いお少し考えさせたす



  1. Git — . , , , , . GitHub, - git-, «-» Linux, git, . , -, , , , . Git . CSS HTML, — , CSS HTML- . , HTML CSS? , , , .
  2. , , , , , . , , , ? . , : « create_foo() , create_bar()», : « create_bar() y, ». , , . , , , , GPT-3, , .
  3. , , , , - , . , , , . , , , , , , , , , .


-, Linux?










All Articles