GNUソフトウェア開発はどのように経済的に持続しますか?


10

この質問がトピックから外れていることをお詫び申し上げますが、それは同時に経済とプログラミングの問題です。それが別のSEコミュニティに行くべきである場合は、私に教えてください。

理論的には、GNUソフトウェアは自由な時間にボランティアによって完全に開発されるか、またはプログラマーに自発的に資金提供してGNUソフトウェアの開発に(彼らの活動の別のセクターからの収入を使用して)企業によって開発されます。

数週間の雨の週末に1人の個人(たとえば、数独ゲームなど)で実行できる小規模なプロジェクトで、これが完全にうまく機能する方法を理解しています。そして、私が自由時間中に中小規模のプログラムを開発し、それらを世界に共有するのを見るのに問題はありません。

問題は、次の理由により、これが大規模なプログラムに対して非常にうまく機能しないことです。

  1. プログラミングと同じくらい楽しいですが、実装する必要があるプロジェクトが大きくなるにつれて、必要な機能を実装するのにかかる時間が非常に速くなります。大規模なプログラムの開発には信じられないほどの時間がかかります。たとえば、個人がオペレーティングシステムをプログラムするには、15年の自由時間と休暇が簡単にかかり、ソフトウェアがリリースされるまでに完全に時代遅れになります。 。
  2. 他の人があなたがそうした方法とは異なる方法でプログラムを書くので、他の誰かのコードを読んで理解することは、多くの場合、あなた自身のコードを一から書くのと同じくらい多くの時間がかかります。他の人のコードを修正してそれを改善しようとすることは、GNUの哲学によって奨励されているため、追加したい機能を備えた上記のプログラムの独自のクローンを開発するのとほとんど同じくらい時間がかかります。
  3. 2人以上の人が協力してより大きなプログラムを開発する必要があるとすぐに、これは単一の開発者プロジェクトでは決して発生しなかった多くの意思決定上の問題を引き起こします。その結果、たとえば、2人のプログラマーのグループが、1人の男性が作るのに10年かかるプロジェクトで共同作業を行った場合、5年ではなく、おそらく8年になるでしょう。
  4. 同じプロジェクトで共同作業をしている人々がインターネットでのみ会うと、プロジェクトの1人のメンバーが突然消える(彼が興味を失ったか、物理的にインターネットに接続できなくなったため)ため、簡単に共同作業を行うことができます。もっと強く

したがって、GNUの考え方で単純なプログラムを開発する方法は完全に理解していますが、このモデルでGNU / Linuxやgccなどの巨大なプログラムがどのように可能になるかはまったくわかりません。gccは約700万行のコードです。私はコードの行があまり意味がないことを知っています。プロジェクトの後の段階で、より生産的なプログラマーが実際にコードの行を削除する(プロジェクトを単純化および/または最適化する)ためですが、これにより、プロジェクトgccです。

理論的には、誰もが自由時間にgccを自由に変更できますが、実際には?それは趣味ではなく仕事として非常に専門的な人々によって開発されました。コンパイラーを趣味として作成する人はだれでも、コスト/利益に価値がないので、結局あきらめます。

  • 大規模なプログラムの開発は非常に長期的な巨大プロジェクトであり、彼らは自由時間を利用して、短期的にやりがいのある、またはより楽しい他の活動をしたいと考えています。
  • とにかく大規模なプログラムを開発する場合、彼らは無料で行うよりも、彼らにお金を払う会社のためにそれをしたいのです。

長期的にGNU / Linux、gcc、Open Officeなどのプログラムの開発に興味を持ってもらうには、やりがいがあります。だから私の質問は、大規模なGNUプロジェクトに給料がもらえないのに、なぜ貢献しているのですか?


ポイント2、3、および4についていくつかの証拠を提供できますか?私は2の点に最も同意しませんが、3と4は、オープンソースソフトウェアの開発時に私が実際に経験したことがない興味深い視点でもあります。時間があるときに、自分の経験で更新します
christopherlovell 2015

まあ2はプログラミング言語に大きく依存し、プログラムのアーキテクチャのドキュメントに力を入れています。証拠として、私は見つけることができ、このこのこの
Bregalad

@Bregaladコメント内の2つの例は9年以上前のものです。それ以来、オープンソースソフトウェアは長い道のりを歩んできました。ウェブの進化とgitなどのツールの普及により、優れた読みやすいコードの共有と開発がはるかに簡単になりました。
christopherlovell

1
SE / Programmersからの他の例で@Bregaladを使用すると、ほとんどすべての高評価の回答が、複雑さの2つ目の理由、つまり、コードの読み取りが必ずしもコードの書き込みよりも難しいとは言えないことに異議を唱えます。この時点での最後の文は、プロジェクトを最初から複製する方が、プロジェクトに追加するよりも簡単かもしれないということですが、コードを読まなくても、コードのしくみとアルゴリズムの再作成方法がわかっていることを前提としています。経験から、問題に対してエレガントで高性能なアルゴリズムを
開発

回答:


5

まず、私はプログラマーではなく、オープンソースプロジェクトに貢献したことがないということを述べたいと思います。しかし、私はオープンソースに長い間興味を持っており、オープンソースの一般的な概念とそれがどのように機能するかを理解していると信じています。

そもそも、オープンソースはソフトウェアでお金を稼ぐことができないという意味ではありません。これは、コードが公開されている必要があることを意味します。Red HatやCanonicalなどの企業は、ソフトウェアを販売するのではなく、専門知識を販売することで収益を上げています。Linuxサーバーを実行したくない場合は、無料でソフトウェアを入手できます。しかし、私は誰かがそれをインストールして、セットアップして、サポートを与える必要があります。これは、たとえばRed Hatのスペシャリストがやって来て、お金を稼ぐところです。会社にとってそれは理にかなっています、なぜなら彼ら自身の専門家を雇うことはおそらくはるかに高価になるでしょうから。これはまた、これらの企業にコードを提供するインセンティブを与えます。彼らは彼らの製品が良いものであることを望んでいるので、人々はそれを彼らのサービスによって使用するでしょう。

しかし、スケーラビリティに関するあなたのポイントについて話しましょう。

  1. オープンソースの優れた点は、すべてをゼロから開発する必要がないことです。Ubuntuのようなオペレーティングシステムは、1人で構築したものではありません。代わりに、システムのさまざまな部分に多くの人々が貢献してきました(実際には、すべてのスキルと効果的なオペレーティングシステムを備えた1人を見つけるのは難しいと思います)。たとえば、Ubuntuの人々はLinuxカーネルを開発していません。彼らは他の人が開発したものを使用します。したがって、オープンソースがなければおそらく不可能だったことが、今では可能です。

  2. 他のコードを読んで理解することは、独自のコードを書くよりも時間がかかりません。少なくとも多くの場合はそうではありません。さらに、使用するすべてのコードを理解する必要はありません。Linux用のプログラムを作成する場合、そのプログラムのすべての部分がどのように機能するかを詳しく理解する必要はありません。私は彼らが何をしているのかを知る必要があります。次に、これらのパーツを取り、他のパーツと組み合わせてプログラムを作成します。または、既存のプログラムを使用して、必要に応じて変更することもできます。

  3. gitやgithubなどのツールを使用すると、コラボレーションが非常に簡単になります。コードを取得して変更するだけです。次に、プロジェクトの担当者に提出します。よろしければ受け付けます。

  4. 人々は常にプロジェクトに出入りします。しかし、プロジェクトが人気がある場合は、十分に取り組みます。

オープンソースが機能する理由をいくつか紹介します。

  1. オープンソースソフトウェアが非常に良くなった主な理由は、プロジェクトに取り組んでいる多数の人々が、小さな開発者チームでアーカイブするのが難しいレベルの専門知識を保証しているためだと思います。奇妙に思えるかもしれませんが、この単一の事実は、オープンソースで発生する可能性のあるすべてのマイナスの問題を上回るようです。

  2. 商用プログラミングでは、プロジェクトは会社と共に死にます。次に、ある会社のソフトウェアを使用して終了するとします。その後、更新やバグ修正を受け取らず、最新のソフトウェアを使用する必要があるため、ねじ込みます。オープンソースを使用すると、ソフトウェアをサポートするか、自分で開発する別の会社を見つけることができます。

それでも興味がある場合は、 大聖堂とバザールを読むことをお勧めします


私はあなたの言ったことに同意しませんが、実際には、私の質問には答えられないので、私は答えを受け入れることができません。あなたは私にGNUの素晴らしさを納得させようとしているように見えますが、私は長い間、すでに納得しているので無駄です。また、誰かが他の人のコードを変更して適応すること、およびソフトウェアプロジェクトで作業している複数の人を調整することの困難さを真剣に過小評価します。私の質問では問題を誇張したかもしれませんが、それでも大きな問題になる可能性があります。大規模な GNUソフトウェアが経済的にどのように持続するかはまだわかりません。
Bregalad

たぶん、あなたはそれをstackoverflowに投稿して、実際のプログラマーから回答を得るべきです。彼らは実際の経験に基づいて適切にあなたに答えを与えることができます。
Rud Faden、

1
Red Hatについてのあなたの主張はそのままですが、彼らの仕事の提案をざっと見てみると、それらのほとんどは販売、マーケティング、およびテクニカルサポートに関連しており、開発の始まりはごくわずかです。(これは、彼らの収入がどこから来て、どのように彼らの収入が分配されるかとして良い指標を与えます)。また、この質問はおそらくスタックオーバーフローでトピック外のフラグが付けられます(ただし、確実にするためにヘルプを再読する必要があります)
Bregalad

@Bregaladただし、他人のコードを変更している場合でも、あなたは、何かがどのように機能するかを彼らに尋ねるために、利用するコミュニティを持っています。(これは、コミュニティ全体のソフトウェアの改善ではなく、個人またはお金に焦点が当てられているため、独自のソフトウェア開発者やビジネス全般にとっては異質の概念である可能性があります)。また、コミュニティの人々は、ソフトウェアを自分で何かに使用する可能性も高いため、そのソフトウェアを実行し続けることに関心を持っています。そうでなければ、なぜ彼らは貢献しているのですか?(おそらく名声...しかし、オープンソースプロジェクトが死んだ場合、それはどのように役立ちますか?)
leeand00

@Bregaladまた、単一のソフトウェア開発会社の障害点ではなく、複数の会社(ソフトウェアを使用およびコーディングする会社)でのプロジェクトの維持により、変換を抽出してデータを別のシステムにロードする必要が少なくなります。他の会社が失敗したり、市場に食いつぶされたりしたとき。
leeand00 2016年

2

オープンソースのソフトウェア開発はさまざまな理由で行われますが、それは主に愛好家または専門家によって、しかしサイドプロジェクトとして行われているという一般的な誤解です。私は一般的にオープンソースについてこの質問に答えています。特にGNUライセンスのソフトウェアについては答えていません。しかし、私の答えは包括的です。

私がソフトウェア開発者(私は)で、複雑なソフトウェアプロジェクト(私は)に取り組んでいるとします。優れたアーキテクチャは、問題を独立した部分に分解します。開発が進むにつれて、開発者は多くの場合、必要な部分が多くの問題に共通するものであることを認識します。次に、いくつかの典型的なパスを示します。

  1. 彼らは自分でその作品を開発し、それは会社の財産になります。または、別の会社からクローズドソースのソリューションを購入します。
  2. 彼らはこの問題を解決するオープンソースのプロジェクトを見つけ、それは完璧に適合し、ライセンスは適切です。彼らはそれを彼らのプロジェクトに組み込むだけです。それは、ライセンスとそれがどのように使用されるかによって、オープンソースである必要があるかもしれません。彼らはプロジェクトに貢献しません。
  3. 彼らは、この問題をほぼ解決するが、欠陥または欠陥のあるオープンソースプロジェクトを見つけました。彼らはそれを改善し、それらの改善をベースプロジェクトに貢献するかもしれません。
  4. 彼らは十分に好きなものを見つけられないので、彼らは独自のプロジェクトを開始し、それをオープンソース化することに決めました。

2-4の利点は、プロジェクトの設計とコードの両方に貢献する人が増えることであり、強力なアイデアが生き残る(ある場合は出産による)ようなエコシステムに入り、弱いアイデアは生き残らないということです。バグ修正と機能追加はコミュニティの努力になります。シナリオ2と3では、プロジェクトを採用する開発者は、健全なエンジニアリングの原則と成熟したコードの恩恵を受けます。3と4は相関しています。シナリオ#4では、他の人々がコードを採用して改善し、恩恵をもたらすと、開発者は恩恵を受けます(#3)。プロジェクトに貢献して、他の修正や改善がその上に追加されるときに、改善が統合されるようにすることは有益です。私の経験では、これらのシナリオはすべてありふれたものです。

現在のソフトウェアプロジェクトでは、私は約12人の開発者の1人であり、約2年間システムに取り組んできました。約5,000のオープンソースプロジェクトを組み込んでいます!私たちはほんのわずかの新しいFOSSプロジェクトを生み出し、おそらく6ダースに貢献しました。この場合、私たちは特に善良な市民というわけではありません(他の企業の方がはるかに優れています)が、これはすべてがどのように機能するかを示す実際の規模を示しています。小規模なプロジェクトであっても、オープンソースからの貢献は数十から数百に及ぶこともあります。オープンソースソフトウェアを使用しなかった場合、開発コストは100〜10,000倍になります。

スケーラビリティは、設計のモジュール性が原因で、また、コードがリファクタリングされたり、フォークされたりするような、この種の最適な生存プロセスを通じて発生します。コードがもはや維持されなくても、そこに存在し、それに価値を見つけた他の人々が自分のフォークを維持できるため、存続可能性は通常、独自の代替手段よりも優れています。企業が行き来し、従業員が雇用され、さらに早く辞任します。ソースコードがないソフトウェア依存関係を追加したり、社内の小さなチームだけが保守したりすると、かなりのリスクが発生します。Linuxカーネル、gcc、Androidなどの大規模プロジェクトには、多くの企業が積極的に貢献しています。

それが(ほとんどの場合)それを読むことよりも優れた正しいコードを書く方が簡単であるというのは本当ではありません。また、変更を加えている場合でも、使用しているすべてのソフトウェアを読む必要はありません。セクションを深く掘り下げて、たくさん読む必要がありますが、全体を読む必要はありません。単体テストについてここで詳しく説明できますが、簡潔にするために省略します。

オープンソースソフトウェアの大部分は、人々が自由な時間に開発するものではありません。このプラクティスは驚くほど有益であり、市場を最適化しなくても機能します。私はある種の市場主導のアプローチが大いに役立つと個人的には疑っていますが、そのアプローチがどのように見えるかはわかりません。評判が通貨である市場があると人々は主張しますが、私はそれが正確なモデルであるとは思いません。仕事の流れの1つは、新しいソフトウェアを採用するのにかかる時間です。アクティブでシンプル、優れたドキュメントなどを備えたものを見つけて使用したいと考えています。買い物客のように、最小限の時間で最高品質の製品を探しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.