Ich entschuldige mich, wenn diese Frage nicht zum Thema gehört, aber gleichzeitig eine Wirtschafts- und eine Programmierfrage ist. Wenn es zu einer anderen SE-Gemeinde gehen sollte, geben Sie mir bitte an.
Theoretisch wird GNU-Software ausschließlich von Freiwilligen in ihrer Freizeit oder von Unternehmen entwickelt, die freiwillig Programmierer finanzieren, um GNU-Software zu entwickeln (indem sie Einnahmen aus einem anderen Sektor ihrer Tätigkeit verwenden).
Ich verstehe, wie es für kleine Projekte, die an ein paar regnerischen Wochenenden von einer einzelnen Person durchgeführt werden können (sagen wir zum Beispiel ein Sudoku-Spiel), perfekt funktionieren kann, denn schließlich ist Computerprogrammierung ein äußerst lustiges und lohnendes Hobby. und ich habe kein Problem damit, Leute zu sehen, die in ihrer Freizeit kleine oder mittlere Programme entwickeln und sie der Welt mitteilen.
Das Problem ist, dass dies für größere Programme aus folgenden Gründen extrem schlecht skaliert:
- So unterhaltsam das Programmieren auch ist, je größer das zu implementierende Projekt wird, desto schneller wächst die Zeit für die Implementierung der gewünschten Funktionalität. Die Entwicklung eines größeren Programms nimmt unglaublich viel Zeit in Anspruch. Beispielsweise kann es leicht 15 Jahre Freizeit und Urlaubszeit dauern, bis eine Person ein Betriebssystem programmiert, und wenn seine Software veröffentlicht wird, ist es völlig veraltet .
- Da andere Leute Programme auf eine andere Weise schreiben, als Sie es getan hätten, nimmt das Lesen und Verstehen des Codes eines anderen viel Zeit in Anspruch, in den meisten Fällen genauso viel wie das Schreiben Ihres eigenen Codes von Grund auf neu. Das Ändern des Codes einer anderen Person und der Versuch, ihn zu verbessern, wie es durch die GNU-Philosophie gefördert wird, ist fast genauso zeitaufwändig wie das Entwickeln eines eigenen Klons des genannten Programms mit der Funktionalität, die Sie hinzufügen möchten.
- Sobald zwei oder mehr Personen zusammenarbeiten müssen, um ein größeres Programm zu entwickeln, entstehen viele Entscheidungsprobleme, die bei einem Projekt mit nur einem Entwickler niemals auftreten würden. Das Ergebnis ist, dass zum Beispiel, wenn eine Gruppe von 2 Programmierern für ein Projekt zusammenarbeitet, dessen Erstellung für einen einzelnen Mann 10 Jahre dauern würde, sie es in 5 Jahren nicht schaffen, aber wahrscheinlich in 8 Jahren.
- Wenn sich Personen, die für dasselbe Projekt zusammenarbeiten, ausschließlich im Internet treffen, kann ein Mitglied des Projekts leicht plötzlich verschwinden (entweder weil er das Interesse verloren hat oder weil er physisch nicht mehr im Internet sein kann), wodurch die Zusammenarbeit gleichmäßig wird Schwerer
Obwohl ich genau verstehe, wie einfache Programme mit der GNU-Denkweise entwickelt werden können, sehe ich absolut nicht, wie so große Programme wie GNU / Linux oder gcc mit diesem Modell möglich sind. gcc besteht aus rund 7 Millionen Codezeilen. Ich weiß, dass Codezeilen nicht viel bedeuten, da in einer späteren Phase eines Projekts der produktivere Programmierer tatsächlich Codezeilen entfernt (Vereinfachung und / oder Optimierung des Projekts), aber dies gibt einen Überblick darüber, wie umfangreich Code ist ein projekt gcc ist.
Theoretisch kann also jeder in seiner Freizeit gcc frei modifizieren, aber in der Praxis? Es wurde von sehr professionellen Leuten als Job entwickelt, nicht als Hobby. Jeder, der einen Compiler zum Hobby macht, wird irgendwann aufgeben, da sich Kosten / Nutzen nicht lohnen:
- Die Entwicklung eines großen Programms ist ein langfristig so großes Projekt, dass sie ihre Freizeit lieber für andere Aktivitäten nutzen möchten, die kurzfristig lohnender oder angenehmer sind
- Wenn sie sowieso ein großes Programm entwickeln würden, würden sie es lieber für ein Unternehmen tun, das sie bezahlt, als es kostenlos zu tun
Um die Leute langfristig für die Entwicklung eines Programms wie GNU / Linux, gcc oder Open Office zu interessieren, sollte es sich lohnen. Meine Frage lautet also: Warum tragen Menschen zu einem großen GNU-Projekt bei, wenn sie kein Gehalt dafür bekommen?
quelle
Antworten:
Zunächst möchte ich sagen, dass ich kein Programmierer bin und noch nie zu einem Open Source-Projekt beigetragen habe. Ich habe mich jedoch schon lange für Open Source interessiert und glaube, dass ich die allgemeinen Konzepte von Open Source und deren Funktionsweise verstehe.
Zunächst möchte ich sagen, dass Open Source nicht bedeutet, dass Sie mit der Software kein Geld verdienen können. Es bedeutet nur, dass der Code öffentlich verfügbar sein muss. Unternehmen wie Red Hat und Canonical verdienen Geld nicht mit dem Verkauf der Software, sondern mit dem Verkauf ihres Fachwissens. Wenn ich nicht möchte, dass meine Firma einen Linux-Server betreibt, kann ich die Software kostenlos herunterladen. Aber ich brauche jemanden, der es installiert, einrichtet und unterstützt. Hier kommt der Spezialist von zB Red Hat ins Spiel und verdient Geld. Für das Unternehmen ist dies sinnvoll, da die Einstellung eines eigenen Spezialisten wahrscheinlich viel teurer wäre. Dies gibt diesen Unternehmen auch einen Anreiz, den Kodex beizutragen. Sie möchten, dass ihr Produkt gut ist, damit die Menschen es und ihre Dienste nutzen können.
Aber lassen Sie uns über Ihre Punkte zur Skalierbarkeit sprechen.
Das Coole an Open Source ist, dass Sie nicht alles von Grund auf neu entwickeln müssen. Ein Betriebssystem wie Ubuntu wurde nicht von einer einzelnen Person erstellt. Stattdessen haben viele Leute zu verschiedenen Teilen des Systems beigetragen (eigentlich denke ich, dass es schwierig wäre, eine Person mit allen Fähigkeiten zu finden, um ein effektives Betriebssystem zu erstellen). Zum Beispiel entwickeln die Ubuntu-Leute den Linux-Kernel nicht. Sie verwenden nur eine von anderen entwickelte. Was ohne Open Source wahrscheinlich unmöglich war, ist jetzt möglich, weil man auf die Arbeit anderer Menschen aufbauen kann.
Das Lesen und Verstehen anderer Codes ist nicht zeitaufwändiger als das Schreiben eigener Codes. Zumindest nicht in vielen Fällen. Darüber hinaus müssen Sie nicht den gesamten von Ihnen verwendeten Code verstehen. Wenn ich ein Programm für Linux schreiben möchte, muss ich nicht verstehen, wie alle Teile in diesem Programm im Detail funktionieren. Ich muss nur wissen, was sie tun. Ich kann diese Teile dann nehmen und mit anderen Teilen zusammenfügen, um mein Programm zu erstellen. Oder ich kann ein vorhandenes Programm nehmen und es an meine Bedürfnisse anpassen.
Tools wie Git und Github machen die Zusammenarbeit unglaublich einfach. Sie erhalten nur den Code und nehmen Änderungen vor. Sie senden sie dann an die für das Projekt verantwortliche Person. Wenn es gut ist, wird es akzeptiert.
Menschen gehen die ganze Zeit in Projekte hinein und aus ihnen heraus. Aber wenn das Projekt beliebt ist, wird genug daran arbeiten.
Hier sind einige Gründe, warum Open Source funktioniert.
Ich denke, der Hauptgrund, warum Open Source-Software so gut geworden ist, ist, dass die große Anzahl von Leuten, die an einem Projekt arbeiten, ein Maß an Fachwissen sicherstellt, das ich in einem kleinen Entwicklerteam nur schwer archivieren kann. Obwohl es seltsam erscheinen mag, scheint diese einzige Tatsache alle negativen Probleme aufzuwiegen, die bei Open Source auftreten können.
In der kommerziellen Programmierung stirbt das Projekt mit der Firma. Nehmen wir an, Sie haben eine Software von einem Unternehmen, das dann schließt. Dann sind Sie fertig, da Sie keine Updates und Fehlerbehebungen erhalten und neue Software benötigen, um Schritt zu halten. Mit Open Source können Sie einfach ein anderes Unternehmen finden, das Ihre Software unterstützt oder selbst entwickelt.
Wenn Sie immer noch interessiert sind, empfehle ich Ihnen, die Kathedrale und den Basar zu lesen
quelle
Open-Source-Softwareentwicklung wird aus verschiedenen Gründen durchgeführt, aber es ist ein weit verbreitetes Missverständnis, dass sie hauptsächlich von Hobbyisten oder professionell, aber als Nebenprojekt durchgeführt wird. Ich beantworte diese Frage für Open Source im Allgemeinen und nicht für GNU-lizenzierte Software im Besonderen. Aber meine Antwort ist inklusive.
Angenommen, ich bin ein Softwareentwickler (ich bin) und arbeite an einem komplexen Softwareprojekt (ich bin). Eine gute Architektur zerlegt ein Problem in unabhängige Teile, und im Verlauf der Entwicklung werden die Entwickler häufig erkennen, dass einige Teile, die sie benötigen, vielen Problemen gemeinsam sind. Hier sind einige typische Wege vorwärts:
Die Vorteile von 2-4 sind, dass mehr Menschen sowohl zum Design als auch zum Code des Projekts beitragen und es in eine Art Ökosystem geht, in dem starke Ideen überleben (wenn Sie so wollen, durch Fortpflanzung) und schwache nicht. Bugfixing und Feature-Addition werden zu Community-Bemühungen. In den Szenarien 2 und 3 profitieren die Entwickler, die das Projekt übernehmen, von soliden technischen Prinzipien und ausgereiftem Code. 3 und 4 sind korrelativ. In Szenario 4 profitieren die Entwickler davon, wenn andere Personen den Code übernehmen und verbessern und etwas zurückgeben (Nr. 3). Es ist vorteilhaft, einen Beitrag zum Projekt zu leisten, damit Ihre Verbesserungen zementiert werden, wenn andere Korrekturen und Verbesserungen hinzukommen, von denen Sie weiterhin profitieren. Nach meiner Erfahrung sind all diese Szenarien alltäglich.
Bei meinem aktuellen Softwareprojekt bin ich einer von ungefähr 12 Entwicklern und habe ungefähr zwei Jahre an einem System gearbeitet. Wir haben rund 5.000 Open-Source-Projekte aufgenommen! Wir haben nur wenige neue FOSS-Projekte hervorgebracht und zu vielleicht einem halben Dutzend beigetragen. Wir sind in diesem Fall keine besonders guten Bürger (andere Unternehmen sind viel besser), aber dies zeigt Ihnen, wie einfach das alles funktioniert. Selbst bei kleinen Projekten können Beiträge von Open Source leicht zu Dutzenden oder Hunderten zählen. Wenn wir keine Open-Source-Software verwenden würden, würden die Entwicklungskosten um den Faktor 100-10.000 steigen.
Die Skalierbarkeit erfolgt aufgrund der Modularität des Designs und auch durch diese Art des Überlebens des besten Prozesses, bei dem Code überarbeitet, gegabelt usw. werden kann. Überlebensfähigkeit ist normalerweise besser als proprietäre Alternativen, denn selbst wenn der Code nicht mehr gepflegt wird, ist er da draußen und andere Leute, die Wert darin finden, können ihre eigene Gabelung davon pflegen. Unternehmen kommen und gehen und Mitarbeiter werden eingestellt und kündigen noch schneller. Wenn Sie eine Softwareabhängigkeit hinzufügen, für die Sie nicht über den Quellcode verfügen oder die nur von einem kleinen internen Team verwaltet werden muss, besteht ein erhebliches Risiko. Bei großen Projekten wie dem Linux-Kernel, gcc, Android und anderen beteiligen sich häufig viele Unternehmen aktiv.
Es ist nicht wahr, dass es einfacher ist, guten und korrekten Code zu schreiben, als ihn zu lesen (in den meisten Fällen). Sie müssen auch nicht die gesamte von Ihnen verwendete Software lesen, selbst wenn Sie Änderungen vornehmen. Man muss tief in Abschnitte eintauchen und viel lesen, aber nicht das Ganze. Ich könnte hier mehr über Unit-Tests sagen, werde dies aber der Kürze halber weglassen.
Der Großteil der Open-Source-Software wird nicht von Menschen in ihrer Freizeit entwickelt. Die Praxis ist so phänomenal vorteilhaft, dass sie ohne einen optimierenden Markt funktioniert. Ich persönlich vermute, dass ein marktorientierter Ansatz sehr hilfreich wäre, aber ich weiß nicht, wie dieser Ansatz aussehen könnte. Die Leute argumentieren, dass es einen Markt gibt, auf dem der Ruf die Währung ist, aber ich denke nicht, dass dies ein genaues Modell ist. Eine Währung bei der Arbeit ist die Zeit, die benötigt wird, um eine neue Software einzuführen. Sie möchten etwas finden und verwenden, das aktiv, einfach, gut dokumentiert usw. ist. Wie ein Käufer suchen Sie also nach dem Produkt mit der besten Qualität für den geringsten Zeitaufwand.
quelle