Pido disculpas si esta pregunta está fuera de tema, pero es simultáneamente una pregunta de economía y de programación. Si debe ir a otra comunidad SE, por favor indíqueme.
En teoría, el software GNU está completamente desarrollado por voluntarios durante su tiempo libre, o por empresas que financian voluntariamente a programadores para desarrollar software GNU (utilizando los ingresos de otro sector de su actividad).
Entiendo cómo puede funcionar perfectamente bien para proyectos a pequeña escala que un solo individuo puede realizar en un par de fines de semana lluviosos (digamos, por ejemplo, un juego de sudoku), porque después de todo, la programación de computadoras es un pasatiempo extremadamente divertido y gratificante, y no tengo ningún problema en ver personas que desarrollan programas pequeños o medianos durante su tiempo libre y compartirlas con el mundo.
El problema es que esto se escala extremadamente mal para programas más grandes por las siguientes razones:
- Tan divertido como es la programación, a medida que el proyecto que debe implementarse se hace más grande, el tiempo que lleva implementar la funcionalidad deseada crece extremadamente rápido. Un programa a mayor escala requiere una cantidad increíble de tiempo para desarrollarse, por ejemplo, podría llevar 15 años de tiempo libre y vacaciones para que un individuo programe un sistema operativo, y para cuando se lance su software, será completamente obsoleto .
- Como otras personas escriben programas de otra manera que lo hubiera hecho, leer y comprender el código de otra persona lleva mucho tiempo, en la mayoría de los casos, tanto como escribir su propio código desde cero. Modificar el código de otra persona e intentar mejorarlo, como lo alienta la filosofía GNU, es casi tan lento como desarrollar su propio clon de dicho programa con la funcionalidad que le gustaría agregar.
- Tan pronto como 2 o más personas tengan que colaborar para desarrollar un programa más grande, esto crea muchos problemas de toma de decisiones que nunca surgirían en un proyecto de desarrollador único. El resultado es que, por ejemplo, si un grupo de 2 programadores colabora para un proyecto que tomaría 10 años para que un solo hombre lo haga, no lo harán en 5 años, sino probablemente en 8.
- Si las personas que colaboran para el mismo proyecto se reúnen únicamente en Internet, es fácil que un miembro del proyecto desaparezca repentinamente (ya sea porque perdió interés o porque físicamente ya no puede estar en Internet), lo que hace que la colaboración sea incluso Más fuerte
Entonces, si bien entiendo perfectamente cómo se pueden desarrollar programas simples con la mentalidad de GNU, no veo absolutamente cómo son posibles programas tan grandes como GNU / Linux o gcc en este modelo. gcc tiene alrededor de 7 millones de líneas de código. Sé que las líneas de código no significan mucho, ya que en una etapa posterior de un proyecto, el programador más productivo es el que realmente eliminará las líneas de código (simplificando y / u optimizando el proyecto), pero esto da una visión general de lo masivo que es un proyecto gcc es.
Entonces, en teoría, cualquiera puede modificar libremente gcc durante su tiempo libre, ¿pero en la práctica? Fue desarrollado por personas muy profesionales como un trabajo, no como un hobby. Cualquiera que haga un compilador como pasatiempo eventualmente se dará por vencido ya que el costo / beneficio no vale la pena:
- El desarrollo de un gran programa es un gran proyecto a largo plazo, prefieren utilizar su tiempo libre para realizar otras actividades que sean más gratificantes o más agradables a corto plazo.
- Si desarrollaran un programa grande de todos modos, preferirían hacerlo para una compañía que les pagaría que hacerlo gratis
Para que la gente se interese en desarrollar un programa como GNU / Linux, gcc u Open Office a largo plazo, debería ser gratificante. Entonces mi pregunta es: ¿por qué hay personas que contribuyen al gran proyecto GNU, si no reciben un salario por ello?