djc schreef op dinsdag 21 december 2010 @ 10:41:
[...]
Je draait oorzaak en gevolg om.
Als een open source-project groter wordt is het vaak handig om het onder te brengen in een stichting zodat het makkelijker wordt voor geinteresseerde partijen om geld te doneren. Mercurial (waar ik zelf aan meewerk) is een VCS dat met een groepje van een stuk of 7 actieve developers een product ontwikkelt dat gebruikt wordt door Sun/Oracle en Mozilla. Na enige tijd hebben we Mercurial ondergebracht bij de Software Freedom Conservancy, die beheren onze fondsen (maar doen niets aan development).
Mozilla is wel begonnen bij Netscape, maar er is inderdaad een stichting (en later ook een bedrijf, respectievelijk de Mozilla Foundation en de Mozilla Corporation) omheen opgezet om de fondsen die binnengehaald werden effectief om te zetten om de producten te verbeteren (zowel ingehuurde developers -- die overigens meestal al actief waren voordat ze werden ingehuurd -- als infrastructuur). De Linux-kernel is een ander voorbeeld van een nogal succesvol product. Je kan wel zeggen dat ontwikkeling nu grotendeels betaald wordt door Red Hat, IBM en Google, maar dat is pas gekomen nadat het een succes werd. De Apache HTTP server was er al voor de Apache Foundation, enzovoorts.
Dat je weinig kleine succesvolle projecten kunt vinden betekent wellicht dat kleine succesvolle projecten snel groter worden! Bijvoorbeeld Redis, Ruby on Rails, Django, Ruby en Python zelf, etc.
Jij gaat net als sommige anderen in deze thread voorbij aan wat FragFrog wil zeggen (denk ik), namelijk dat om een groter project succesvol voort te zetten moet je het team ook als team laten werken, je moet een richting hebben waarin het project zich beweegt, features die op die richting liggen moeten worden ontworpen, veelal met meerdere mensen binnen het team, er moet dus veel coordinatie plaatsvinden. Verder moet er veelal veel tijd gestoken worden in allerlei aspecten van het bouwen en beheren van de software.
Bijna alle non-corporated funded OSS wordt gebouwd volgens het principe van "wil je iets, stuur me dan maar een patch', of door 1 persoon die in zn vrije tijd wat code klopt. Het patch-driven development principe werkt totaal niet voor grote projecten: je komt nauwelijks vooruit, het is afhankelijk van wat men aandraagt, belangrijke wijzigingen zijn afhankelijk van de inzet van vrijwilligers en er is geen deadline/planning wanneer die dit opleveren, immers ze zijn niet je werknemers.
Om een groter project in goede banen te leiden kun je niet afhankelijk zijn van derden die 'wellicht' een bug patchen of een nieuwe feature aandragen: uberhaupt is het twijfelachtig of iemand een feature bouwt die precies in de richting van waarheen het project moet gaan. Wat er gebeurt is dat men de projectwerkzaamheden consolideert in een groep en zorgt dat de voortgang gewaarborgd is: bv door full time developers, een hechte kern van developers die bv dicht bijelkaar wonen of anderzinds dagelijks contact hebben, zodat richting, feature planning, wie doet wat, welke feature beinvloedt welke andere features etc. etc. allemaal makkelijker verloopt.
Wanneer een projectje klein is, en door 1 persoon behapt kan worden, dan zie je geen problemen. Maar zodra een projectje groter wordt, er een serie bugs staan te wachten alvorens nieuwe dingen in de code kan worden gebouwd, men moet besluiten wat te doen na de initiele release... dan wordt het kritiek en gaat bijna alle OSS software naar de slachtbank. De reden is simpel: niemand heeft zin om ellenlange lijsten bugs te fixen, men wil nieuwe dingen bouwen, immers, dat is niet saai. Ook wanneer de code niet optimaal geschreven is (bv zonder enige comments WAAROM de code zo is zoals ze is, design docs of anderzinds enige documentatie), is bugfixing nog naarder werk dan het al was. Na verloop van tijd is inbouwen van nieuwe dingen overigens ook geen fun meer, tenzij je dingen wilt breken en backwards compatibility je een worst zal zijn. Dan begint het spenderen van je vrije tijd aan dit soort projecten op 'werk' te lijken en haakt menigeen (ik durf wel te zeggen: bijna iedereen) af.
Een groep full-time developers, die betaald wordt om bugs te fixen, nieuwe dingen te bouwen binnen een vastgesteld kader, die kan dit wel, botweg omdat het hun werk is. De uitzondering die na zn baan nog tot 11-en OSS zit te schrijven om een idealistische reden daargelaten.
Ik zie je punt dan ook niet mbt 'de stichting of bedrijf is bedoeld om makkelijker geld te doneren', want daar is die constructie helemaal niet voor. Je kunt geen full-time developers betalen vanuit donaties alleen, wat is de motivatie om al dat geld op te branden? Immers je geeft het resultaat van wat je investeert weg.
Je voorbeeld mbt netscape is overigens fout. Andreesen is al vrij snel een bedrijf begonnen om de browser een commercieel succes te maken en dan met name via de webserver die Netscape verkocht (het was ook geen open source). De linux kernel lijkt ontwikkeld door een gezellige groep mensen, maar het is gewoon hardcore commerciele software, met het enige verschil dat de code beschikbaar is. Linux wordt al jaren ontwikkeld door developers die full time bezig zijn met linux kernel development, en daar gewoon voor betaald worden. Immers, het is de enige manier om ervoor te zorgen dat je wijzigingen kunt doorvoeren die als team gedragen worden.
En voordat iemand met zn naieve blik gaat beweren dat patch-driven development best werkt: nee, dat werkt voor geen meter: patches om een klein bugje te fixen: soit. Patches die lappen code refactoren en nieuwe features daardoor mogelijk maken en/of nieuwe features aandragen die bv meerdere subsystemen wijzigen... no way. Je krijgt dus een poliepenstructuur van code en dat valt binnen de korste keren in elkaar. Je krijgt features aangeleverd die nodig zijn voor de submitter, maar wellicht voor 90% van de gebruikers irrelevant, en andersom: naar werk dat wel relevant is voor 90% van de users blijft liggen omdat niemand het wil doen. Mooi voorbeeld is de linq provider van NHibernate. Dat is gewoon erg veel werk (lees: 8-10 maanden minimaal, full time). Nu hebben ze een 'linq provider' in 3.0 die veel dingen niet doet, gewoon omdat de enige persoon die zich daar toch voor heeft ingezet niet zoveel tijd had. Iemand anders had wel veel tijd maar geen zin om een linq provider te maken dus bedacht 'yet another query system', wat 1) ook weer niet 100% dekkend is en 2) niet standaard.
Bij een bedrijf-backed OSS project heb je dit veel minder: het voortbestaan van het project is van belang, niet wat de committers nodig hebben op die dag.