Comment le développement de logiciels GNU se maintient-il économiquement?

10

Je m'excuse si cette question est hors sujet, mais c'est à la fois une question d'économie et de programmation. Si cela devait aller dans une autre communauté SE, veuillez me l'indiquer.

En théorie, les logiciels GNU sont entièrement développés par des bénévoles pendant leur temps libre, ou par des entreprises qui financent volontairement des programmeurs pour développer des logiciels GNU (en utilisant les revenus d'un autre secteur de leur activité).

Je comprends comment cela peut parfaitement fonctionner pour un projet à petite échelle qui peut être fait en quelques week-ends pluvieux par une seule personne (disons par exemple un jeu de sudoku), car après tout, la programmation informatique est un passe-temps extrêmement amusant et gratifiant, et je n'ai aucun problème à voir des gens développer des programmes petits ou moyens pendant leur temps libre et les partager avec le monde.

Le problème est que cela évolue extrêmement mal pour les programmes plus importants pour les raisons suivantes:

  1. Aussi amusant que soit la programmation, au fur et à mesure que le projet à implémenter devient plus grand, le temps nécessaire pour implémenter les fonctionnalités souhaitées augmente extrêmement rapidement. Un programme à plus grande échelle prend un temps incroyable à développer, par exemple cela pourrait facilement prendre 15 ans de temps libre et de vacances pour qu'un individu programme un système d'exploitation, et au moment où son logiciel sera publié, il sera complètement obsolète .
  2. Comme d'autres personnes écrivent des programmes d'une autre manière que vous l'auriez fait, lire et comprendre le code de quelqu'un d'autre prend beaucoup de temps, dans la plupart des cas autant que d'écrire votre propre code à partir de zéro. Modifier le code d'une autre personne et essayer de l'améliorer, comme cela est encouragé par la philosophie GNU, prend presque autant de temps que de développer votre propre clone dudit programme avec les fonctionnalités que vous souhaitez ajouter.
  3. Dès que 2 personnes ou plus devront collaborer pour développer un programme plus important, cela crée de nombreux problèmes de prise de décision qui ne se poseraient jamais sur un projet à développeur unique. Le résultat est que, par exemple, si un groupe de 2 programmeurs collabore pour un projet qui prendrait 10 ans à un seul homme, il ne le fera pas en 5 ans mais probablement en 8.
  4. Si les personnes qui collaborent pour le même projet se rencontrent uniquement sur Internet, il est facile pour un membre du projet de disparaître soudainement (soit parce qu'il a perdu tout intérêt, soit parce qu'il ne peut plus physiquement être sur Internet), rendant ainsi la collaboration encore Plus fort

Donc, même si je comprends parfaitement comment des programmes simples peuvent être développés avec la mentalité GNU, je ne vois absolument pas comment de tels programmes énormes tels que GNU / Linux ou gcc sont possibles sur ce modèle. gcc représente environ 7 millions de lignes de code. Je sais que les lignes de code ne signifient pas grand-chose, car à un stade ultérieur d'un projet, le programmeur le plus productif est celui qui supprimera les lignes de code (simplifiant et / ou optimisant le projet), mais cela donne un aperçu de la masse de un projet gcc est.

Donc en théorie, n'importe qui peut modifier librement gcc pendant son temps libre, mais en pratique? Il a été développé par des gens très professionnels comme un travail, pas comme un hobby. Quiconque fait un compilateur comme passe-temps finira par abandonner car le coût / avantage n'en vaut pas la peine:

  • Développer un grand programme est un projet énorme à long terme, ils préfèrent utiliser leur temps libre pour avoir d'autres activités plus gratifiantes ou plus agréables à court terme
  • S'ils devaient de toute façon développer un grand programme, ils préfèrent le faire pour une entreprise qui les paiera plutôt que de le faire gratuitement

Pour que les gens s'intéressent au développement d'un programme tel que GNU / Linux, gcc ou Open Office à long terme, cela devrait être gratifiant. Alors ma question est: pourquoi y a-t-il des gens qui contribuent à un grand projet GNU, s'ils ne reçoivent pas de salaire pour cela?

Bregalad
la source
Pourriez-vous fournir des éléments de preuve pour les points 2, 3 et 4? Je suis le plus en désaccord avec le point 2, mais les points 3 et 4 sont également des points de vue intéressants que je n'ai pas vraiment expérimentés lors du développement de logiciels open source. Je mettrai à jour avec mes propres expériences quand j'aurai le temps
christopherlovell
Le puits 2 dépend fortement du langage de programmation et des efforts consacrés à la documentation de l'architecture du programme. Quant à la preuve, je peux trouver ceci , ceci et cela
Bregalad
@Bregalad deux de vos exemples dans votre commentaire ont plus de 9 ans. Les logiciels libres ont parcouru un long chemin depuis lors, rendus possibles par l'évolution du Web et la vulgarisation d'outils tels que git qui facilitent le partage et le développement d'un bon code lisible.
christopherlovell
1
@Bregalad dans votre autre exemple de SE / Programmers, presque chaque réponse hautement cotée conteste votre deuxième raison de plus grande complexité, à savoir que la lecture de code n'est pas nécessairement plus difficile que de l'écrire. La dernière phrase sous ce point, que le clonage d'un projet à partir de zéro pourrait être plus facile que d'y ajouter, suppose que vous savez, sans même lire le code, comment il fonctionne et comment recréer l'algorithme. Je peux vous dire par expérience qu'inventer un algorithme élégant et performant pour un problème est une tâche beaucoup plus difficile que de le coder :)
christopherlovell

Réponses:

5

Je voudrais commencer par dire que je ne suis pas programmeur et que je n'ai jamais contribué à aucun projet open source. Cependant, je suis intéressé par l'open source depuis longtemps et je crois que je comprends les concepts généraux de l'open source et comment cela fonctionne.

Pour commencer, je voudrais dire que l'open source ne signifie pas que vous ne pouvez pas gagner de l'argent avec le logiciel. Cela signifie simplement que le code doit être accessible au public. Des entreprises comme Red Hat et Canonical gagnent de l'argent non pas en vendant le logiciel, mais en vendant leur expertise. Si je ne souhaite pas que mon entreprise gère un serveur Linux, je peux obtenir le logiciel gratuitement. Mais j'ai besoin de quelqu'un pour l'installer, le configurer et apporter un soutien. C'est là que le spécialiste de Red Hat entre par exemple et gagne de l'argent. Pour l'entreprise, cela a du sens, car l'embauche de son propre spécialiste coûterait probablement beaucoup plus cher. Cela donne également à ces entreprises une incitation à contribuer au code. Ils veulent que leur produit soit bon pour que les gens l'utilisent et par leurs services.

Mais parlons de vos points sur l'évolutivité.

  1. La chose intéressante à propos de l'open source est que vous n'avez pas à tout développer à partir de zéro. Un système d'exploitation comme Ubuntu n'a pas été construit par une seule personne. Au lieu de cela, beaucoup de gens ont contribué à différentes parties du système (en fait, je pense qu'il serait difficile de trouver une personne avec toutes les compétences nécessaires pour créer un système d'exploitation efficace). Par exemple, le peuple Ubuntu ne développe pas le noyau Linux. Ils n'en utilisent qu'un développé par d'autres. Donc, ce qui était sans open source probablement impossible, est maintenant possible, car vous pouvez vous appuyer sur le travail d'autres peuples.

  2. Lire et comprendre les autres ne prend pas plus de temps que d'écrire le vôtre. Du moins pas dans de nombreux cas. Au-delà, vous n'avez pas besoin de comprendre tout le code que vous utilisez. Si je veux écrire un programme pour Linux, je n'ai pas besoin de comprendre comment toutes les parties de ce programme fonctionnent en détail. Je dois juste savoir ce qu'ils font. Je peux ensuite prendre ces parties et les assembler avec d'autres parties pour créer mon programme. Ou je peux prendre un programme existant et le modifier selon mes besoins.

  3. des outils comme git et github facilitent la collaboration. Vous obtenez simplement le code et apportez des modifications. Vous les soumettez ensuite au responsable du projet. S'il est bon, il sera accepté.

  4. les gens entrent et sortent des projets tout le temps. Mais si le projet est populaire, il y en aura assez.

Voici quelques raisons pour lesquelles l'open source fonctionne.

  1. Je pense que la raison principale pour laquelle les logiciels open source sont devenus si bons est que le grand nombre de personnes travaillant sur le projet assure un niveau d'expertise que j'ai du mal à archiver dans une petite équipe de développeurs. Bien que cela puisse sembler étrange, ce seul fait semble l'emporter sur tous les problèmes négatifs qui peuvent survenir en open source.

  2. En programmation commerciale, le projet meurt avec la firme. Permet de vous dire par certains logiciels d'une entreprise qui ferme ensuite. Ensuite, vous êtes foutu, car vous ne recevrez pas de mises à jour et de corrections de bogues, et vous aurez besoin d'un nouveau logiciel pour suivre. Avec l'open source, vous pouvez simplement trouver une autre entreprise pour vous soutenir ou le développer vous-même.

Si vous êtes toujours intéressé, je vous suggère de lire La Cathédrale et le Bazar

Rud Faden
la source
Je ne suis pas en désaccord avec ce que vous avez dit, mais vraiment, je ne peux pas accepter la réponse, car elle ne répond pas à ma question. Vous semblez essayer de me convaincre de la qualité de GNU, mais cela ne sert à rien car je suis déjà convaincu depuis longtemps. Vous sous-estimez également sérieusement les difficultés de modifier et d'adapter le code de quelqu'un d'autre, ainsi que de coordonner plusieurs personnes travaillant sur un projet logiciel. J'aurais peut-être exagéré les problèmes dans mes questions, mais cela peut quand même être un problème majeur. Je ne sais toujours pas comment le gros logiciel GNU se maintient économiquement.
Bregalad
Vous devriez peut-être le publier sur stackoverflow et obtenir une réponse de certains vrais programmeurs. Ils peuvent correctement vous donner une réponse basée sur une expérience réelle.
Rud Faden
1
Votre point sur Red Hat est vrai, mais après un rapide coup d'œil à leurs propositions d'emploi, la plupart d'entre elles sont liées aux ventes, au marketing et au support technique, et seuls de petits pourcentages ouvrent le développement. (Cela donne une bonne indication de l'origine de leurs revenus et de la façon dont leurs revenus sont distribués). En outre, cette question serait probablement signalée hors sujet sur Stack Overflow (bien que je devrai relire l'aide pour être sûr)
Bregalad
@Bregalad Mais même si vous modifiez le code de quelqu'un d'autre; vous avez une communauté sur laquelle s'appuyer, pour leur demander comment quelque chose fonctionne. (Cela peut être un concept étranger aux développeurs de logiciels propriétaires ou même aux entreprises en général, car l'accent est mis sur l'individu ou l'argent, et non sur l'amélioration du logiciel ... pour l'ensemble de la communauté). De plus, les membres de la communauté ont également intérêt à maintenir ce logiciel en marche, car ils l'utilisent probablement aussi pour quelque chose eux-mêmes; sinon pourquoi contribuent-ils? (peut-être la gloire ... mais si votre projet open source mourait, comment cela aiderait-il?)
leeand00
@Bregalad En outre, la pérennité du projet pour plusieurs sociétés (sociétés qui utilisent et codent le logiciel) plutôt qu'un seul point de défaillance de société de développement de logiciels garantit que vous êtes moins susceptible d'avoir à extraire la transformation et à charger vos données dans un autre système lorsqu'une autre entreprise tombe en panne ou est rongée par le marché.
leeand00
2

Le développement de logiciels open source se fait pour diverses raisons, mais c'est un malentendu commun qu'il est fait principalement par des amateurs ou professionnellement, mais en tant que projet parallèle. Je réponds à cette question pour l'open source en général, pas pour les logiciels sous licence GNU en particulier. Mais ma réponse est inclusive.

Disons que je suis développeur de logiciels (je le suis) et que je travaille sur un projet logiciel complexe (je le suis). Une bonne architecture décompose un problème en éléments indépendants et, au fur et à mesure du développement, les développeurs reconnaissent souvent que certains éléments dont ils ont besoin sont communs à de nombreux problèmes. Voici quelques pistes typiques à suivre:

  1. Ils développent cette pièce eux-mêmes et elle devient la propriété de l'entreprise. Ou ils achètent une solution de source fermée d'une autre entreprise.
  2. Ils trouvent un projet open source qui résout ce problème et c'est un ajustement parfait et la licence est appropriée. Ils l'intègrent simplement dans leur projet, qui peut ou non avoir besoin d'être open source en fonction de la licence et de la façon dont elle est utilisée. Ils ne contribuent pas en retour au projet.
  3. Ils trouvent un projet open source qui résout presque ce problème mais qui présente soit des défauts, soit des déficiences. Ils l'améliorent et peuvent apporter ces améliorations au projet de base.
  4. Ils ne trouvent pas ce qu'ils aiment assez, alors ils démarrent leur propre projet et décident de l'open source.

Les avantages de 2-4 sont que plus de personnes finissent par contribuer à la fois à la conception et au code du projet, et cela entre dans une sorte d'écosystème où les idées fortes survivent (par procréation si vous le souhaitez) et les faibles ne le font pas. La correction de bugs et l'ajout de fonctionnalités deviennent des efforts de la communauté. Dans les scénarios 2 et 3, les développeurs adoptant le projet bénéficient de principes d'ingénierie solides et d'un code mature. 3 et 4 sont corrélatifs. Dans le scénario # 4, les développeurs bénéficient lorsque d'autres personnes adoptent et améliorent le code et donnent en retour (# 3). Il est avantageux de contribuer à nouveau au projet afin que vos améliorations soient consolidées au fur et à mesure que d'autres correctifs et améliorations s'ajoutent à eux, dont vous continuez à bénéficier. D'après mon expérience, tous ces scénarios sont courants.

Sur mon projet logiciel actuel, je suis l'un des 12 développeurs et je travaille sur un système depuis environ deux ans. Nous avons intégré environ 5 000 projets open-source! Nous n'avons engendré que quelques nouveaux projets FOSS et contribué à peut-être une demi-douzaine. Nous ne sommes pas particulièrement de bons citoyens dans ce cas (d'autres entreprises sont bien meilleures), mais cela vous montre l'ampleur du fonctionnement de tout cela. Même sur de petits projets, les contributions open-source peuvent facilement se chiffrer par dizaines ou centaines. Si nous n'utilisions aucun logiciel open source, les coûts de développement augmenteraient d'un facteur 100 à 10 000.

L'évolutivité se produit en raison de la modularité de la conception et également grâce à ce type de processus de survie du plus adapté où le code peut être refactorisé, bifurqué, etc. La survie est généralement meilleure que les alternatives propriétaires car même si le code n'est plus maintenu, il existe et d'autres personnes qui y trouvent de la valeur peuvent en conserver leur propre fork. Les entreprises vont et viennent et les employés sont embauchés et quittent encore plus rapidement. Si vous ajoutez une dépendance logicielle dont vous n'avez pas le code source ou que vous n'avez qu'une petite équipe interne à gérer, vous courez un risque important. Les grands projets comme le noyau Linux, gcc, Android et d'autres ont souvent un grand nombre d'entreprises qui contribuent activement.

Ce n'est pas vrai qu'il est plus facile d'écrire du code correct et correct que de le lire (dans la plupart des cas). Vous n'avez pas non plus à lire tous les logiciels que vous utilisez même si vous apportez des modifications. Vous devez plonger profondément dans certaines sections et lire beaucoup, mais pas dans son ensemble. Je pourrais en dire plus ici sur les tests unitaires, mais j'oublierai cela par souci de concision.

La majorité des logiciels open source n'est pas développé par les gens pendant leur temps libre. La pratique est tellement bénéfique qu'elle fonctionne sans optimisation du marché. Personnellement, je soupçonne qu'une sorte d'approche axée sur le marché aiderait grandement, mais je ne sais pas à quoi pourrait ressembler cette approche. Les gens soutiennent qu'il existe un marché où la réputation est la monnaie, mais je ne pense pas que ce soit un modèle précis. Une monnaie au travail est le temps qu'il faut pour adopter un nouveau logiciel. Vous voulez trouver et utiliser quelque chose qui est actif, simple, avec une bonne documentation, etc. Donc, comme un acheteur, vous recherchez le meilleur produit de qualité pour le moins de temps investi.

user149485
la source