Как экономически выгодно развитие программного обеспечения GNU?

10

Я прошу прощения, если этот вопрос не по теме, но это одновременно вопрос экономики и программирования. Если это должно пойти в другое сообщество SE, пожалуйста, укажите меня.

Теоретически, программное обеспечение GNU полностью разрабатывается добровольцами в свободное время или компаниями, которые добровольно финансируют программистов для разработки программного обеспечения GNU (используя доходы из другого сектора своей деятельности).

Я понимаю, как это может прекрасно работать для небольшого проекта, который может быть выполнен за пару дождливых выходных одним человеком (скажем, например, игрой в судоку), потому что в конце концов компьютерное программирование - чрезвычайно увлекательное и полезное хобби, и у меня нет проблем с тем, чтобы люди в свободное время разрабатывали небольшие или средние программы и делились ими со всем миром.

Проблема заключается в том, что это очень плохо масштабируется для больших программ по следующим причинам:

  1. Как бы ни было увлекательно программирование, так как проект, который должен быть реализован, становится больше, время, необходимое для реализации желаемой функциональности, растет чрезвычайно быстро. Разработка более масштабной программы занимает невероятное количество времени, например, человеку может легко потребоваться 15 лет свободного времени и отпуска, чтобы запрограммировать операционную систему, и к тому времени, когда его программное обеспечение будет выпущено, оно будет полностью устаревшим ,
  2. Поскольку другие люди пишут программы по-другому, как вы бы это делали, чтение и понимание чужого кода занимает много времени, в большинстве случаев столько же, сколько и написание собственного кода с нуля. Модификация чужого кода и попытка его улучшить, как это поощряется философией GNU, почти так же трудоемка, как и разработка собственного клона упомянутой программы с функциональностью, которую вы хотели бы добавить.
  3. Как только 2 или более человека будут сотрудничать для разработки более крупной программы, это создает множество проблем, связанных с принятием решений, которые никогда бы не возникли в проекте с одним разработчиком. В результате, например, если группа из 2 программистов сотрудничает для проекта, на создание которого у одного человека уйдет 10 лет, они не сделают его через 5 лет, но, вероятно, через 8 лет.
  4. Если люди, которые сотрудничают для одного и того же проекта, встречаются исключительно в Интернете, одному участнику проекта легко исчезнуть внезапно (либо потому, что он потерял интерес, либо потому, что физически он больше не может быть в Интернете), что делает сотрудничество даже Сильнее

Итак, хотя я прекрасно понимаю, как простые программы могут быть разработаны с помощью мышления GNU, я абсолютно не понимаю, как такие огромные программы, как GNU / Linux или gcc, возможны в этой модели. GCC составляет около 7 миллионов строк кода. Я знаю, что строки кода не имеют большого значения, так как на более поздней стадии проекта более продуктивным программистом будет тот, кто фактически удалит строки кода (упрощая и / или оптимизируя проект), но это дает представление о том, насколько проект gcc есть.

Так что теоретически любой может свободно модифицировать gcc в свободное время, но на практике? Он был разработан очень профессиональными людьми как работа, а не хобби. Любой, кто делает компилятор для хобби, в конечном итоге сдается, потому что цена / выгода не стоят того:

  • Разработка большой программы - это такой долгосрочный огромный проект, что они предпочли бы использовать свое свободное время, чтобы заниматься другими видами деятельности, которые являются более полезными или более приятными в краткосрочной перспективе.
  • Если бы они в любом случае разработали большую программу, они бы предпочли сделать это для компании, которая заплатит им, чем делать это бесплатно

Чтобы заинтересовать людей в разработке таких программ, как GNU / Linux, gcc или Open Office, в долгосрочной перспективе, это должно быть полезным. Итак, мой вопрос: почему люди участвуют в большом проекте GNU, если они не получают за это зарплату?

Bregalad
источник
Не могли бы вы предоставить некоторые доказательства для пунктов 2, 3 и 4? Я больше не согласен с пунктом 2, но 3 и 4 также являются интересными точками зрения, которых я не испытывал при разработке программного обеспечения с открытым исходным кодом. Я буду обновляться с моим собственным опытом, когда у меня будет время
christopherlovell
Колодец 2 сильно зависит от языка программирования и усилий, приложенных к документации архитектуры программы. Что касается доказательств, я могу найти это , это и это
Bregalad
@Bregalad два ваших примера в вашем комментарии старше 9 лет. С тех пор программное обеспечение с открытым исходным кодом прошло долгий путь, благодаря развитию Интернета и популяризации таких инструментов, как git, которые значительно упрощают совместное использование и разработку хорошего, читабельного кода.
Кристоферловелл
1
@Bregalad в вашем другом примере от SE / Programmers, почти каждый высоко оцененный ответ оспаривает вашу вторую причину большей сложности, а именно, что чтение кода не обязательно сложнее, чем его написание. Последнее предложение под этим пунктом, что клонирование проекта с нуля может быть проще, чем добавление к нему, предполагает, что вы знаете, даже не читая код, как он работает и как воссоздать алгоритм. По опыту могу сказать, что изобрести элегантный и эффективный алгоритм для задачи - гораздо более сложная задача, чем ее кодирование :)
christopherlovell

Ответы:

5

Я хотел бы начать с того, что я не программист и никогда не участвовал ни в одном проекте с открытым исходным кодом. Тем не менее, я давно интересуюсь открытым исходным кодом и считаю, что понимаю общие концепции открытого исходного кода и то, как он работает.

Прежде всего, я хотел бы сказать, что открытый исходный код не означает, что вы не можете зарабатывать деньги на программном обеспечении. Это просто означает, что код должен быть общедоступным. Такие компании, как Red Hat и Canonical, зарабатывают деньги не путем продажи программного обеспечения, а за счет продажи своего опыта. Если я не хочу, чтобы моя компания запускала сервер Linux, я могу получить программное обеспечение бесплатно. Но мне нужен кто-то, чтобы установить его, настроить и оказать поддержку. Это где специалист из Red Hat приходит и зарабатывает деньги. Для компании это имеет смысл, потому что найм собственного специалиста, вероятно, будет гораздо дороже. Это также дает этим компаниям стимул внести свой код. Они хотят, чтобы их продукт был хорошим, чтобы люди пользовались им и своими услугами.

Но давайте поговорим о ваших соображениях о масштабируемости.

  1. Крутая вещь с открытым исходным кодом заключается в том, что вам не нужно разрабатывать все с нуля. Операционная система, такая как Ubuntu, не была создана ни одним человеком. Вместо этого многие люди внесли свой вклад в различные части системы (на самом деле я думаю, что было бы трудно найти одного человека со всеми навыками, чтобы сделать и эффективную операционную систему). Например, люди из Ubuntu не разрабатывают ядро ​​Linux. Они просто используют один, разработанный другими. Так что то, что было без открытого источника, вероятно, невозможно, теперь возможно, потому что вы можете опираться на работу других людей.

  2. Чтение и понимание чужого кода не занимает больше времени, чем написание собственного. По крайней мере, не во многих случаях. Кроме того, вам не нужно понимать весь код, который вы используете. Если я хочу написать программу для Linux, мне не нужно понимать, как все части этой программы работают в деталях. Я просто должен знать, что они делают. Затем я могу взять эти части и соединить их с другими частями для создания моей программы. Или я могу взять существующую программу и изменить ее для своих нужд.

  3. такие инструменты, как git и github, позволяют невероятно легко сотрудничать. Вы просто получаете код и вносите изменения. Затем вы отправляете их лицу, ответственному за проект. Если это хорошо, это будет принято.

  4. люди все время входят и выходят из проектов. Но если проект популярен, над ним будет достаточно работать.

Вот несколько причин, почему работает с открытым исходным кодом.

  1. Я думаю, что главная причина того, что программное обеспечение с открытым исходным кодом стало настолько хорошим, заключается в том, что большое количество людей, работающих над проектом, обеспечивает уровень знаний, который мне сложно архивировать в небольшой команде разработчиков. Хотя это может показаться странным, этот единственный факт, кажется, перевешивает все негативные проблемы, которые могут возникнуть в open source.

  2. В коммерческом программировании проект умирает вместе с фирмой. Допустим, вы используете программное обеспечение от компании, которая затем закрывается. Тогда вы облажались, так как вы не будете получать обновления и исправления ошибок, и вам потребуется новое программное обеспечение, чтобы не отставать. С открытым исходным кодом вы можете просто найти другую компанию для поддержки вашего программного обеспечения или разработать его самостоятельно.

Если вы все еще заинтересованы, я предлагаю вам прочитать собор и базар

Руд Фаден
источник
Я не согласен ни с чем из того, что вы сказали, но на самом деле я не могу принять ответ, потому что он не отвечает на мой вопрос. Кажется, вы пытаетесь убедить меня, насколько хорош GNU, но это бесполезно, потому что я уже давно убежден. Вы также серьезно недооцениваете трудности модификации и адаптации чужого кода, а также координируете работу множества людей, работающих над программным проектом. Я мог бы преувеличить проблемы в моих вопросах, но все же, это может быть серьезной проблемой. Я до сих пор не знаю, как большое программное обеспечение GNU поддерживает экономически.
Брегалад
Может быть, вы должны опубликовать это в stackoverflow и получить ответ от некоторых настоящих программистов. Они могут правильно дать вам ответ на основе реального опыта.
Руд Фаден
1
Ваша точка зрения о Red Hat стоит, но после быстрого взгляда на их предложения о работе, большинство из них связаны с продажами, маркетингом и технической поддержкой, и только небольшой процент - это начало разработки. (Это дает хорошее представление о том, откуда поступает их доход и как распределяется их доход). Кроме того, этот вопрос, вероятно, будет отмечен не по теме в Переполнении стека (хотя мне придется перечитать справку, чтобы быть уверенным)
Bregalad
@Bregalad Но даже если вы модифицируете чужой код; у вас есть сообщество, на которое можно опираться, чтобы спросить их, как что-то работает. (Это может быть концепция, чуждая разработчикам проприетарного программного обеспечения или даже бизнесу в целом, поскольку здесь основное внимание уделяется человеку или деньгам, а не улучшению программного обеспечения ... для всего сообщества). Кроме того, люди в сообществе также заинтересованы в том, чтобы это программное обеспечение работало, поскольку они также, вероятно, используют его для чего-то сами; иначе почему они способствуют? (возможно, слава ... но если бы ваш проект с открытым исходным кодом умер, как бы это помогло?)
leeand00
@Bregalad Кроме того, поддержка проекта несколькими компаниями (компаниями, которые используют и кодируют программное обеспечение), а не одной точкой отказа одной компании-разработчика программного обеспечения, гарантирует, что вам с меньшей вероятностью придется извлекать преобразовывать и загружать ваши данные в другую систему когда какая-то другая компания терпит неудачу или съедается рынком.
leeand00
2

Разработка программного обеспечения с открытым исходным кодом осуществляется по разным причинам, но это распространенное заблуждение, что это делается в основном любителями или профессионально, но в качестве побочного проекта. Я отвечаю на этот вопрос для open-source в целом, а не для GNU-лицензированного программного обеспечения в частности. Но мой ответ включительно.

Допустим, я разработчик программного обеспечения (я), и я работаю над сложным программным проектом (я). Хорошая архитектура разбивает проблему на отдельные части, и по мере развития разработчики часто признают, что какой-то элемент, который им нужен, является общим для многих проблем. Вот несколько типичных путей продвижения вперед:

  1. Они сами разрабатывают этот кусок, и он становится собственностью компании. Или они покупают решение с закрытым исходным кодом у другой компании.
  2. Они находят проект с открытым исходным кодом, который решает эту проблему, и он идеально подходит, и лицензия подходит. Они просто включают его в свой проект, который может быть, а может и не нуждаться в открытом источнике в зависимости от лицензии и того, как он используется. Они не вносят свой вклад в проект.
  3. Они находят проект с открытым исходным кодом, который почти решает эту проблему, но имеет либо недостатки, либо недостатки. Они улучшают его и могут внести эти улучшения обратно в базовый проект.
  4. Они не находят ничего, что им нравится, поэтому они начинают свой собственный проект и решают открыть его.

Преимущества 2-4 состоят в том, что все больше людей вносят свой вклад как в дизайн, так и в код проекта, и он входит в некую экосистему, в которой сильные идеи выживают (путем размножения, если хотите), а слабые - нет. Исправление ошибок и добавление функций становятся усилиями сообщества. В сценариях № 2 и 3 разработчики, принимающие проект, извлекают выгоду из принципов звуковой инженерии и зрелого кода. 3 и 4 являются относительными. В сценарии № 4 разработчики выигрывают, когда другие люди принимают и улучшают код и возвращают (№ 3). Выгодно внести свой вклад в проект, чтобы ваши улучшения были закреплены, так как другие исправления и улучшения идут поверх них, и вы продолжаете извлекать из них пользу. По моему опыту, все эти сценарии являются обычным явлением.

В моем текущем программном проекте я один из 12 разработчиков и работал над системой около двух лет. Мы включили около 5000 проектов с открытым исходным кодом! Мы породили только несколько новых проектов FOSS и внесли свой вклад, возможно, в полдюжины. В этом случае мы не особенно хорошие граждане (другие компании намного лучше), но это показывает вам масштаб того, как все это работает. Даже в небольших проектах вклады с открытым исходным кодом могут легко исчисляться десятками или сотнями. Если бы мы не использовали программное обеспечение с открытым исходным кодом, затраты на разработку взлетели бы в 100–10 000 раз.

Масштабируемость происходит из-за модульности дизайна, а также благодаря такому процессу выживания наиболее приспособленных, где код может подвергаться рефакторингу, разветвлению и так далее. Выживаемость, как правило, лучше, чем проприетарные альтернативы, потому что даже если код больше не поддерживается, он существует, и другие люди, которые находят в нем ценность, могут поддерживать свою собственную ветвь. Компании приходят и уходят, а сотрудники нанимаются и уходят еще быстрее. Если вы добавляете программную зависимость, для которой у вас нет исходного кода или для которой требуется небольшая внутренняя команда, вы подвергаетесь значительному риску. В крупных проектах, таких как ядро ​​Linux, gcc, Android и другие, часто активно участвует большое количество компаний.

Неверно, что писать хороший и правильный код легче, чем читать (в большинстве случаев). Также вам не нужно читать все программное обеспечение, которое вы используете, даже если вы вносите изменения. Вы должны глубоко погрузиться в его разделы и читать много, но не все. Я мог бы сказать больше о модульных тестах, но для краткости опущу это.

Большая часть программного обеспечения с открытым исходным кодом не разрабатывается людьми в свободное время. Практика настолько феноменально полезна, что она работает без оптимизации рынка. Я лично подозреваю, что какой-то рыночный подход очень помог бы, но я не знаю, как этот подход может выглядеть. Люди утверждают, что есть рынок, где репутация является валютой, но я не думаю, что это точная модель. Одна валюта на работе - это время, необходимое для внедрения нового программного обеспечения. Вы хотите найти и использовать что-то активное, простое, с хорошей документацией и т. Д. Поэтому, как покупатель, вы ищете продукт наилучшего качества за минимальное время.

user149485
источник