Управление проектом NumPy и принятие решений#

Цель этого документа — формализовать процесс управления, используемый проектом NumPy как в обычных, так и в чрезвычайных ситуациях, и прояснить, как принимаются решения и как взаимодействуют различные элементы нашего сообщества, включая взаимосвязь между открытой совместной разработкой и работой, которая может финансироваться коммерческими или некоммерческими организациями.

Сводка#

NumPy — это проект, принадлежащий сообществу и управляемый сообществом. По возможности, решения о направлении развития проекта принимаются на основе консенсуса сообщества (но обратите внимание, что «консенсус» здесь имеет несколько техническое значение, которое может не соответствовать ожиданиям всех — см. ниже). Некоторые члены сообщества дополнительно вносят вклад, работая в руководящем совете NumPy, где они отвечают за содействие достижению консенсуса сообщества, за управление ресурсами проекта и — в крайних случаях — за принятие решений по проекту, если обычный процесс на основе сообщества нарушается.

Проект#

Проект NumPy (The Project) — это проект программного обеспечения с открытым исходным кодом, аффилированный с некоммерческим фондом NumFOCUS 501(c)3. Цель проекта — разработка программного обеспечения с открытым исходным кодом для вычислений на основе массивов в Python, и в частности numpy пакет, вместе с сопутствующим программным обеспечением таким как f2py и расширения NumPy Sphinx. Программное обеспечение, разработанное Проектом, выпускается под открытой лицензией BSD (или аналогичной), разрабатывается открыто и размещается в публичных репозиториях GitHub под numpy Организация GitHub.

Проект разрабатывается командой распределенных разработчиков, называемых Участниками. Участники — это лица, которые внесли код, документацию, дизайны или другую работу в Проект. Любой может быть Участником. Участники могут быть связаны с любым юридическим лицом или не связаны ни с одним. Участники участвуют в проекте, отправляя, рецензируя и обсуждая Pull Requests и Issues на GitHub, а также участвуя в открытых и публичных обсуждениях Проекта на GitHub, в почтовых рассылках и других каналах. Основой участия в Проекте являются открытость и прозрачность.

Сообщество проекта состоит из всех Участников и Пользователей проекта. Участники работают от имени и несут ответственность перед более широким сообществом проекта, и мы стремимся сделать барьер между Участниками и Пользователями как можно ниже.

Проект формально аффилирован с фондом NumFOCUS 501(c)3 (https://numfocus.org/), который выступает в качестве его финансового спонсора, может владеть товарными знаками проекта и другой интеллектуальной собственностью, помогает управлять пожертвованиями проекта и действует как родительское юридическое лицо. NumFOCUS — единственное юридическое лицо, имеющее формальные отношения с проектом (см. раздел Институциональные партнёры ниже).

Управление#

В этом разделе описывается модель управления и руководства Проектом.

Основы управления проектом:

  • Открытость и прозрачность

  • Активный вклад

  • Институциональный нейтралитет

Принятие решений на основе консенсуса сообществом#

Обычно все решения по проекту принимаются консенсусом всех заинтересованных участников. Основная цель этого подхода — обеспечить, чтобы люди, наиболее затронутые и вовлечённые в любое изменение, могли внести свои знания, будучи уверенными, что их голоса будут услышаны, поскольку тщательный обзор широкого сообщества — это лучший известный нам механизм для создания качественного программного обеспечения.

Механизм, который мы используем для достижения этой цели, может быть незнаком тем, кто не имеет опыта работы с культурными нормами свободного/открытого программного обеспечения. Мы приводим краткое описание здесь и настоятельно рекомендуем всем участникам дополнительно прочитать Глава 4: Социальная и политическая инфраструктура классической работы Карла Фогеля Создание программного обеспечения с открытым исходным кодом, и в частности раздел о Консенсусная Демократия, для более подробного обсуждения.

В этом контексте консенсус не требуют:

  • что мы ждем, чтобы запросить мнение каждого по каждому изменению,

  • что мы когда-либо проводим голосование по чему-либо,

  • или что все счастливы или согласны с каждым решением.

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

Как мы узнаем, что достигнут консенсус? В принципе, это довольно сложно, поскольку консенсус определяется отсутствием вето, что требует от нас доказательства отрицания. На практике мы используем комбинацию нашего лучшего суждения (например, простое и неспорное исправление ошибки, размещенное на GitHub и проверенное основным разработчиком, вероятно, подходит) и максимальных усилий (например, все существенные изменения API должны быть размещены в списке рассылки, чтобы дать более широкому сообществу шанс обнаружить проблемы и предложить улучшения; мы предполагаем, что любой, кому достаточно важен NumPy, чтобы использовать право вето, должен быть в списке рассылки). Если никто не комментирует в списке рассылки через несколько дней, то, вероятно, всё в порядке. И в худшем случае, если изменение окажется более спорным, чем ожидалось, или критический отзыв задержится из-за чьего-то отпуска, это не большая проблема: мы извиняемся за неверную оценку ситуации, создать резервную копию и разобраться с ситуацией.

Если необходимо применить формальное вето, оно должно состоять из:

  • однозначное заявление о применении вето,

  • объяснение, почему он вызывается, и

  • описание условий (если есть), которые убедили бы наложившего вето снять его.

Если все предложения по решению какой-либо проблемы отклонены, то по умолчанию побеждает статус-кво.

В худшем случае, если участник действительно злоупотребляет своим правом вето деструктивным образом, нанося ущерб проекту, он может быть исключён из проекта по решению Совета управления — см. ниже.

Руководящий совет#

Проект будет иметь Руководящий совет, состоящий из участников проекта, которые внесли существенный вклад по качеству и количеству, поддерживаемый в течение как минимум одного года. Общая роль Совета заключается в обеспечении, с учетом мнения сообщества, долгосрочного благополучия проекта, как технически, так и как сообщества.

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

Совет по управлению и его члены играют особую роль в определённых ситуациях. В частности, Совет может, при необходимости:

  • Принимать решения об общем объеме, видении и направлении проекта.

  • Принимать решения о стратегических сотрудничествах с другими организациями или лицами.

  • Принимать решения по конкретным техническим вопросам, функциям, ошибкам и запросам на слияние. Они являются основным механизмом руководства процессом проверки кода и слияния запросов на слияние.

  • Принимайте решения о Сервисах, которые запускаются Проектом, и управляйте этими Сервисами на благо Проекта и Сообщества.

  • Обновить политические документы, такие как этот.

  • Принимать решения, когда обычное обсуждение в сообществе не приводит к консенсусу по вопросу за разумное время.

Однако основная ответственность Совета — облегчать обычную процедуру принятия решений сообществом, описанную выше. Если нам когда-либо придётся вмешаться и формально отменить решение сообщества ради здоровья проекта, мы сделаем это, но будем считать, что достижение этой точки указывает на провал в нашем руководстве.

Принятие решений советом#

Если Совету по управлению потребуется принять формальное решение, то они будут использовать форму Процесс голосования Apache Foundationво входном массиве.

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

Членство в совете#

Список текущих членов Совета по управлению поддерживается на странице О нас.

Чтобы стать кандидатом в Совет управляющих, человек должен быть участником проекта, который внёс вклад, значительный по качеству и количеству, и поддерживал его как минимум в течение одного года. Потенциальные члены Совета номинируются существующими членами Совета и становятся членами после достижения консенсуса существующими членами Совета и подтверждения, что потенциальный член заинтересован и готов выполнять эти обязанности. Совет будет первоначально сформирован из существующих основных разработчиков, которые, по состоянию на конец 2015 года, были значительно активны в течение последнего года.

При рассмотрении потенциальных участников Совет будет оценивать кандидатов с комплексным взглядом на их вклад. Это будет включать, но не ограничиваться кодом, ревью кода, инфраструктурной работой, участием в почтовых рассылках и чатах, помощью сообществу/развитием сообщества, образованием и продвижением, дизайнерской работой и т.д. Мы сознательно не устанавливаем произвольные количественные метрики (например, «100 коммитов в этом репозитории»), чтобы избежать поощрения поведения, которое ориентируется на метрики, а не на общее благополучие проекта. Мы хотим поощрять разнообразный спектр происхождения, взглядов и талантов в нашей команде, поэтому мы явно не определяем код как единственную метрику, по которой будет оцениваться членство в совете.

Если член Совета становится неактивным в проекте в течение периода в один год, он будет рассматриваться для удаления из Совета. Перед удалением, неактивному члену предложат выяснить, планируют ли они вернуться к активному участию. Если нет, они будут удалены немедленно после голосования Совета. Если они планируют вернуться к активному участию в ближайшее время, им будет предоставлен льготный период в один год. Если они не вернутся к активному участию в течение этого периода времени, они будут удалены голосованием Совета без дальнейшего льготного периода. Все бывшие члены Совета могут быть рассмотрены для членства снова в любое время в будущем, как и любой другой участник проекта. Ушедшие члены Совета будут перечислены на веб-сайте проекта с указанием периода, в течение которого они были активны в Совете.

Совет оставляет за собой право исключить текущих членов, если они считаются активно вредными для благополучия проекта, и попытки коммуникации и разрешения конфликта не увенчались успехом. Это требует консенсуса оставшихся членов.

Конфликт интересов#

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

  • Финансовые интересы, такие как инвестиции, трудоустройство или контрактная работа вне Проекта, которые могут повлиять на их работу в Проекте.

  • Доступ к конфиденциальной информации их работодателя, которая потенциально может просочиться в их работу над Проектом.

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

Частные сообщения Совета#

В максимально возможной степени обсуждения и деятельность Совета будут публичными и проводиться в сотрудничестве и обсуждении с участниками проекта и сообществом. У Совета будет частный список рассылки, который будет использоваться экономно и только когда конкретный вопрос требует конфиденциальности. Когда необходимы частные коммуникации и решения, Совет постарается обобщить их для сообщества после удаления личной/частной/конфиденциальной информации, которую не следует публиковать в открытом интернете.

Подкомитеты#

Совет может создавать подкомитеты, которые обеспечивают руководство и направление для конкретных аспектов проекта. Как и Совет в целом, подкомитеты должны вести свою работу открыто и публично, если только конфиденциальность не требуется специально. Частные сообщения подкомитетов должны происходить в основном приватном списке рассылки Совета, если не требуется иное.

Подкомитет NumFOCUS#

Совет будет поддерживать один узконаправленный подкомитет для управления взаимодействием с NumFOCUS.

  • Комитет NumFOCUS состоит из 5 человек, которые управляют финансированием проекта, поступающим через NumFOCUS. Ожидается, что эти средства будут расходоваться в соответствии с некоммерческой миссией NumFOCUS и направлением проекта, определенным полным Советом.

  • Этот подкомитет НЕ должен принимать решения о направлении, объеме или техническом направлении проекта.

  • Этот подкомитет будет состоять из 5 членов, 4 из которых будут текущими членами Совета, а 1 — внешним по отношению к Руководящему совету. Не более 2 членов подкомитета могут отчитываться одному человеку через трудоустройство или контрактную работу (включая отчитывающегося, т.е. максимум — отчитывающийся + 1). Это позволяет избежать эффективного большинства, зависящего от одного человека.

Текущий состав подкомитета NumFOCUS указан на странице О нас.

Институциональные партнеры и финансирование#

Руководящий совет является основным руководящим органом проекта. Никакое внешнее учреждение, физическое или юридическое лицо не имеет возможности владеть, контролировать, узурпировать или влиять на проект, кроме как участвуя в проекте в качестве участников и членов совета. Однако, поскольку учреждения могут быть важным механизмом финансирования проекта, важно официально признать участие учреждений в проекте. Это институциональные партнеры.

Институциональный участник — это любой индивидуальный участник проекта, который вносит вклад в проект в рамках своих служебных обязанностей в институциональном партнере. Аналогично, институциональный член совета — это любой член руководящего совета проекта, который вносит вклад в проект в рамках своих служебных обязанностей в институциональном партнере.

С этими определениями, Институциональный Партнер - это любое признанное юридическое лицо в США или других странах, которое нанимает как минимум 1 Институционального Участника или Члена Институционального Совета. Институциональные Партнеры могут быть коммерческими или некоммерческими организациями.

Учреждения становятся подходящими для статуса Институционального Партнера, если в них работают лица, которые активно вносят вклад в Проект в рамках своих служебных обязанностей. Другими словами, единственный способ для Партнера влиять на проект — это активно участвовать в открытой разработке проекта на равных условиях с любым другим членом сообщества Участников и Членов Совета. Простое использование Программного Обеспечения Проекта в институциональном контексте не позволяет организации стать Институциональным Партнером. Финансовые пожертвования не дают организации права стать Институциональным Партнером. Как только учреждение становится подходящим для Институционального Партнерства, Руководящий Совет должен номинировать и утвердить Партнерство.

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

Институциональный партнёр может свободно искать финансирование для своей работы над Проектом любыми законными способами. Это может включать некоммерческую организацию, собирающую средства от частных фондов и доноров, или коммерческую компанию, создающую проприетарные продукты и услуги, использующие Программное обеспечение и Услуги Проекта. Финансирование, полученное Институциональными партнёрами для работы над Проектом, называется Институциональным финансированием. Однако никакое финансирование, полученное Институциональным партнёром, не может переопределить решения Руководящего совета. Если у партнёра есть финансирование для работы над NumPy, а Совет решает не включать эту работу в проект, партнёр может продолжить её самостоятельно. Однако в этой ситуации эта часть работы партнёра не будет под эгидой NumPy и не может использовать товарные знаки Проекта таким образом, чтобы это предполагало формальные отношения.

Преимущества институционального партнера:

  • Благодарности на сайтах NumPy, в докладах и на футболках.

  • Возможность указывать свои источники финансирования на сайтах NumPy, в докладах и на футболках.

  • Возможность влиять на проект через участие своего члена Совета.

  • Члены Совета приглашены на встречи разработчиков NumPy.

Список текущих институциональных партнёров поддерживается на странице О нас.

История документации#

numpy/numpy

Благодарности#

Значительные части этого документа были адаптированы из Документ управления проектом Jupyter/IPython

Лицензия#

В максимально возможной степени авторы отказались от всех авторских и смежных прав на документ управления и принятия решений проекта NumPy, в соответствии с CC-0 публичное достояние / лицензия.