Я прошу прощения, если этот вопрос не по теме, но это одновременно вопрос экономики и программирования. Если это должно пойти в другое сообщество SE, пожалуйста, укажите меня.
Теоретически, программное обеспечение GNU полностью разрабатывается добровольцами в свободное время или компаниями, которые добровольно финансируют программистов для разработки программного обеспечения GNU (используя доходы из другого сектора своей деятельности).
Я понимаю, как это может прекрасно работать для небольшого проекта, который может быть выполнен за пару дождливых выходных одним человеком (скажем, например, игрой в судоку), потому что в конце концов компьютерное программирование - чрезвычайно увлекательное и полезное хобби, и у меня нет проблем с тем, чтобы люди в свободное время разрабатывали небольшие или средние программы и делились ими со всем миром.
Проблема заключается в том, что это очень плохо масштабируется для больших программ по следующим причинам:
- Как бы ни было увлекательно программирование, так как проект, который должен быть реализован, становится больше, время, необходимое для реализации желаемой функциональности, растет чрезвычайно быстро. Разработка более масштабной программы занимает невероятное количество времени, например, человеку может легко потребоваться 15 лет свободного времени и отпуска, чтобы запрограммировать операционную систему, и к тому времени, когда его программное обеспечение будет выпущено, оно будет полностью устаревшим ,
- Поскольку другие люди пишут программы по-другому, как вы бы это делали, чтение и понимание чужого кода занимает много времени, в большинстве случаев столько же, сколько и написание собственного кода с нуля. Модификация чужого кода и попытка его улучшить, как это поощряется философией GNU, почти так же трудоемка, как и разработка собственного клона упомянутой программы с функциональностью, которую вы хотели бы добавить.
- Как только 2 или более человека будут сотрудничать для разработки более крупной программы, это создает множество проблем, связанных с принятием решений, которые никогда бы не возникли в проекте с одним разработчиком. В результате, например, если группа из 2 программистов сотрудничает для проекта, на создание которого у одного человека уйдет 10 лет, они не сделают его через 5 лет, но, вероятно, через 8 лет.
- Если люди, которые сотрудничают для одного и того же проекта, встречаются исключительно в Интернете, одному участнику проекта легко исчезнуть внезапно (либо потому, что он потерял интерес, либо потому, что физически он больше не может быть в Интернете), что делает сотрудничество даже Сильнее
Итак, хотя я прекрасно понимаю, как простые программы могут быть разработаны с помощью мышления GNU, я абсолютно не понимаю, как такие огромные программы, как GNU / Linux или gcc, возможны в этой модели. GCC составляет около 7 миллионов строк кода. Я знаю, что строки кода не имеют большого значения, так как на более поздней стадии проекта более продуктивным программистом будет тот, кто фактически удалит строки кода (упрощая и / или оптимизируя проект), но это дает представление о том, насколько проект gcc есть.
Так что теоретически любой может свободно модифицировать gcc в свободное время, но на практике? Он был разработан очень профессиональными людьми как работа, а не хобби. Любой, кто делает компилятор для хобби, в конечном итоге сдается, потому что цена / выгода не стоят того:
- Разработка большой программы - это такой долгосрочный огромный проект, что они предпочли бы использовать свое свободное время, чтобы заниматься другими видами деятельности, которые являются более полезными или более приятными в краткосрочной перспективе.
- Если бы они в любом случае разработали большую программу, они бы предпочли сделать это для компании, которая заплатит им, чем делать это бесплатно
Чтобы заинтересовать людей в разработке таких программ, как GNU / Linux, gcc или Open Office, в долгосрочной перспективе, это должно быть полезным. Итак, мой вопрос: почему люди участвуют в большом проекте GNU, если они не получают за это зарплату?
источник
Ответы:
Я хотел бы начать с того, что я не программист и никогда не участвовал ни в одном проекте с открытым исходным кодом. Тем не менее, я давно интересуюсь открытым исходным кодом и считаю, что понимаю общие концепции открытого исходного кода и то, как он работает.
Прежде всего, я хотел бы сказать, что открытый исходный код не означает, что вы не можете зарабатывать деньги на программном обеспечении. Это просто означает, что код должен быть общедоступным. Такие компании, как Red Hat и Canonical, зарабатывают деньги не путем продажи программного обеспечения, а за счет продажи своего опыта. Если я не хочу, чтобы моя компания запускала сервер Linux, я могу получить программное обеспечение бесплатно. Но мне нужен кто-то, чтобы установить его, настроить и оказать поддержку. Это где специалист из Red Hat приходит и зарабатывает деньги. Для компании это имеет смысл, потому что найм собственного специалиста, вероятно, будет гораздо дороже. Это также дает этим компаниям стимул внести свой код. Они хотят, чтобы их продукт был хорошим, чтобы люди пользовались им и своими услугами.
Но давайте поговорим о ваших соображениях о масштабируемости.
Крутая вещь с открытым исходным кодом заключается в том, что вам не нужно разрабатывать все с нуля. Операционная система, такая как Ubuntu, не была создана ни одним человеком. Вместо этого многие люди внесли свой вклад в различные части системы (на самом деле я думаю, что было бы трудно найти одного человека со всеми навыками, чтобы сделать и эффективную операционную систему). Например, люди из Ubuntu не разрабатывают ядро Linux. Они просто используют один, разработанный другими. Так что то, что было без открытого источника, вероятно, невозможно, теперь возможно, потому что вы можете опираться на работу других людей.
Чтение и понимание чужого кода не занимает больше времени, чем написание собственного. По крайней мере, не во многих случаях. Кроме того, вам не нужно понимать весь код, который вы используете. Если я хочу написать программу для Linux, мне не нужно понимать, как все части этой программы работают в деталях. Я просто должен знать, что они делают. Затем я могу взять эти части и соединить их с другими частями для создания моей программы. Или я могу взять существующую программу и изменить ее для своих нужд.
такие инструменты, как git и github, позволяют невероятно легко сотрудничать. Вы просто получаете код и вносите изменения. Затем вы отправляете их лицу, ответственному за проект. Если это хорошо, это будет принято.
люди все время входят и выходят из проектов. Но если проект популярен, над ним будет достаточно работать.
Вот несколько причин, почему работает с открытым исходным кодом.
Я думаю, что главная причина того, что программное обеспечение с открытым исходным кодом стало настолько хорошим, заключается в том, что большое количество людей, работающих над проектом, обеспечивает уровень знаний, который мне сложно архивировать в небольшой команде разработчиков. Хотя это может показаться странным, этот единственный факт, кажется, перевешивает все негативные проблемы, которые могут возникнуть в open source.
В коммерческом программировании проект умирает вместе с фирмой. Допустим, вы используете программное обеспечение от компании, которая затем закрывается. Тогда вы облажались, так как вы не будете получать обновления и исправления ошибок, и вам потребуется новое программное обеспечение, чтобы не отставать. С открытым исходным кодом вы можете просто найти другую компанию для поддержки вашего программного обеспечения или разработать его самостоятельно.
Если вы все еще заинтересованы, я предлагаю вам прочитать собор и базар
источник
Разработка программного обеспечения с открытым исходным кодом осуществляется по разным причинам, но это распространенное заблуждение, что это делается в основном любителями или профессионально, но в качестве побочного проекта. Я отвечаю на этот вопрос для open-source в целом, а не для GNU-лицензированного программного обеспечения в частности. Но мой ответ включительно.
Допустим, я разработчик программного обеспечения (я), и я работаю над сложным программным проектом (я). Хорошая архитектура разбивает проблему на отдельные части, и по мере развития разработчики часто признают, что какой-то элемент, который им нужен, является общим для многих проблем. Вот несколько типичных путей продвижения вперед:
Преимущества 2-4 состоят в том, что все больше людей вносят свой вклад как в дизайн, так и в код проекта, и он входит в некую экосистему, в которой сильные идеи выживают (путем размножения, если хотите), а слабые - нет. Исправление ошибок и добавление функций становятся усилиями сообщества. В сценариях № 2 и 3 разработчики, принимающие проект, извлекают выгоду из принципов звуковой инженерии и зрелого кода. 3 и 4 являются относительными. В сценарии № 4 разработчики выигрывают, когда другие люди принимают и улучшают код и возвращают (№ 3). Выгодно внести свой вклад в проект, чтобы ваши улучшения были закреплены, так как другие исправления и улучшения идут поверх них, и вы продолжаете извлекать из них пользу. По моему опыту, все эти сценарии являются обычным явлением.
В моем текущем программном проекте я один из 12 разработчиков и работал над системой около двух лет. Мы включили около 5000 проектов с открытым исходным кодом! Мы породили только несколько новых проектов FOSS и внесли свой вклад, возможно, в полдюжины. В этом случае мы не особенно хорошие граждане (другие компании намного лучше), но это показывает вам масштаб того, как все это работает. Даже в небольших проектах вклады с открытым исходным кодом могут легко исчисляться десятками или сотнями. Если бы мы не использовали программное обеспечение с открытым исходным кодом, затраты на разработку взлетели бы в 100–10 000 раз.
Масштабируемость происходит из-за модульности дизайна, а также благодаря такому процессу выживания наиболее приспособленных, где код может подвергаться рефакторингу, разветвлению и так далее. Выживаемость, как правило, лучше, чем проприетарные альтернативы, потому что даже если код больше не поддерживается, он существует, и другие люди, которые находят в нем ценность, могут поддерживать свою собственную ветвь. Компании приходят и уходят, а сотрудники нанимаются и уходят еще быстрее. Если вы добавляете программную зависимость, для которой у вас нет исходного кода или для которой требуется небольшая внутренняя команда, вы подвергаетесь значительному риску. В крупных проектах, таких как ядро Linux, gcc, Android и другие, часто активно участвует большое количество компаний.
Неверно, что писать хороший и правильный код легче, чем читать (в большинстве случаев). Также вам не нужно читать все программное обеспечение, которое вы используете, даже если вы вносите изменения. Вы должны глубоко погрузиться в его разделы и читать много, но не все. Я мог бы сказать больше о модульных тестах, но для краткости опущу это.
Большая часть программного обеспечения с открытым исходным кодом не разрабатывается людьми в свободное время. Практика настолько феноменально полезна, что она работает без оптимизации рынка. Я лично подозреваю, что какой-то рыночный подход очень помог бы, но я не знаю, как этот подход может выглядеть. Люди утверждают, что есть рынок, где репутация является валютой, но я не думаю, что это точная модель. Одна валюта на работе - это время, необходимое для внедрения нового программного обеспечения. Вы хотите найти и использовать что-то активное, простое, с хорошей документацией и т. Д. Поэтому, как покупатель, вы ищете продукт наилучшего качества за минимальное время.
источник