Me disculpo 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 del SE, por favor indíqueme.
En teoría, el software de GNU es desarrollado íntegramente por voluntarios en su tiempo libre, o por empresas que financian voluntariamente a los programadores para que desarrollen software de GNU (utilizando los ingresos de otro sector de su actividad).
Entiendo cómo puede funcionar perfectamente bien para un proyecto a pequeña escala que puede ser realizado en un par de fines de semana lluviosos por un solo individuo (digamos por ejemplo un juego de sudoku), porque después de todo la programación informática es un pasatiempo extremadamente divertido y gratificante, y no tengo ningún problema en ver a la gente desarrollando pequeños o medianos programas durante su tiempo libre y compartiéndolos con el mundo.
El problema es que esta escala es extremadamente pobre para los programas más grandes por las siguientes razones:
- Por muy divertido que sea programar, a medida que el proyecto que hay que implementar se hace más grande, el tiempo que toma implementar la funcionalidad deseada crece extremadamente rápido. Un programa de mayor escala toma una increíble cantidad de tiempo para desarrollarse, por ejemplo podría fácilmente tomar 15 años de tiempo libre y vacaciones para que un individuo programe un sistema operativo, y para el momento en que su software sea liberado estará completamente obsoleto.
- Como otras personas escriben programas de otra forma que la que tú habrías hecho, leer y entender el código de otra persona toma mucho de tiempo, en la mayoría de los casos tanto como escribir tu propio código desde cero. Modificar el código de otra persona y tratar de mejorarlo, como lo alienta la filosofía GNU, es casi tan consumidora de tiempo como desarrollar tu propio clon de dicho programa con la funcionalidad que te gustaría añadir.
- 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 un solo desarrollador. El resultado es que, por ejemplo, si un grupo de 2 programadores colaboran 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 en el mismo proyecto se reúnen únicamente en Internet, es fácil que un miembro del proyecto desaparezca repentinamente (ya sea porque perdió el interés o porque físicamente ya no puede estar en Internet), lo que hace que la colaboración sea aún más difícil.
Así que, aunque entiendo perfectamente cómo se pueden desarrollar programas simples con la mentalidad GNU, no veo cómo programas tan enormes como GNU/Linux o gcc son posibles 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 idea de cuán masivo es un proyecto gcc.
Así que, en teoría, cualquiera puede modificar libremente el GCC en su tiempo libre, pero en la práctica Fue desarrollado por gente muy profesional como un trabajo, no como un hobby. Cualquiera que haga un compilador como hobby eventualmente se dará por vencido ya que el costo/beneficio no vale la pena:
- El desarrollo de un gran programa es un proyecto tan grande a largo plazo, que prefieren utilizar su tiempo libre para tener otras actividades más gratificantes o más agradables a corto plazo.
- Si desarrollaran un gran programa de todas formas, preferirían hacerlo para una compañía que les pague 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. Así que mi pregunta es: ¿Por qué hay gente contribuyendo al gran proyecto GNU, si no reciben un salario por ello?