Я прошу прощения, если этот вопрос не по теме, но это одновременно вопрос экономики и программирования. Если это должно пойти в другое сообщество SE, пожалуйста, укажите меня.
Теоретически, программное обеспечение GNU полностью разрабатывается добровольцами в свободное время или компаниями, которые добровольно финансируют программистов для разработки программного обеспечения GNU (используя доходы из другого сектора своей деятельности).
Я понимаю, как это может прекрасно работать для небольшого проекта, который может быть выполнен за пару дождливых выходных одним человеком (скажем, например, игрой в судоку), потому что в конце концов компьютерное программирование - чрезвычайно увлекательное и полезное хобби, и у меня нет проблем с тем, чтобы люди в свободное время разрабатывали небольшие или средние программы и делились ими со всем миром.
Проблема заключается в том, что это очень плохо масштабируется для больших программ по следующим причинам:
- Как бы ни было увлекательно программирование, так как проект, который должен быть реализован, становится больше, время, необходимое для реализации желаемой функциональности, растет чрезвычайно быстро. Разработка более масштабной программы занимает невероятное количество времени, например, человеку может легко потребоваться 15 лет свободного времени и отпуска, чтобы запрограммировать операционную систему, и к тому времени, когда его программное обеспечение будет выпущено, оно будет полностью устаревшим ,
- Поскольку другие люди пишут программы по-другому, как вы бы это делали, чтение и понимание чужого кода занимает много времени, в большинстве случаев столько же, сколько и написание собственного кода с нуля. Модификация чужого кода и попытка его улучшить, как это поощряется философией GNU, почти так же трудоемка, как и разработка собственного клона упомянутой программы с функциональностью, которую вы хотели бы добавить.
- Как только 2 или более человека будут сотрудничать для разработки более крупной программы, это создает множество проблем, связанных с принятием решений, которые никогда бы не возникли в проекте с одним разработчиком. В результате, например, если группа из 2 программистов сотрудничает для проекта, на создание которого у одного человека уйдет 10 лет, они не сделают его через 5 лет, но, вероятно, через 8 лет.
- Если люди, которые сотрудничают для одного и того же проекта, встречаются исключительно в Интернете, одному участнику проекта легко исчезнуть внезапно (либо потому, что он потерял интерес, либо потому, что физически он больше не может быть в Интернете), что делает сотрудничество даже Сильнее
Итак, хотя я прекрасно понимаю, как простые программы могут быть разработаны с помощью мышления GNU, я абсолютно не понимаю, как такие огромные программы, как GNU / Linux или gcc, возможны в этой модели. GCC составляет около 7 миллионов строк кода. Я знаю, что строки кода не имеют большого значения, так как на более поздней стадии проекта более продуктивным программистом будет тот, кто фактически удалит строки кода (упрощая и / или оптимизируя проект), но это дает представление о том, насколько проект gcc есть.
Так что теоретически любой может свободно модифицировать gcc в свободное время, но на практике? Он был разработан очень профессиональными людьми как работа, а не хобби. Любой, кто делает компилятор для хобби, в конечном итоге сдается, потому что цена / выгода не стоят того:
- Разработка большой программы - это такой долгосрочный огромный проект, что они предпочли бы использовать свое свободное время, чтобы заниматься другими видами деятельности, которые являются более полезными или более приятными в краткосрочной перспективе.
- Если бы они в любом случае разработали большую программу, они бы предпочли сделать это для компании, которая заплатит им, чем делать это бесплатно
Чтобы заинтересовать людей в разработке таких программ, как GNU / Linux, gcc или Open Office, в долгосрочной перспективе, это должно быть полезным. Итак, мой вопрос: почему люди участвуют в большом проекте GNU, если они не получают за это зарплату?