Введение

Свободное создание и совершенствование компьютерных программ. Разработка программного обеспечения с открытым исходным кодом (OSSD) — это процесс, в рамках которого программное обеспечение с открытым исходным кодом или аналогичное программное обеспечение, исходный код которого находится в открытом доступе, разрабатывается проектом разработки программного обеспечения с открытым исходным кодом. Это программные продукты, предоставляемые с исходным кодом под открытой лицензией для изучения, изменения и улучшения их конструкции. Примеры популярных программных продуктов с открытым исходным кодом включают Mozilla Firefox, Google Chromium, Android, LibreOffice и VLC media player.

История

В 1997 году Эрик С. Реймонд написал книгу «Кафедральный собор и базар». В этой книге Реймонд проводит различие между двумя подходами к разработке программного обеспечения. Первый – это традиционная разработка с закрытым исходным кодом. Этот метод разработки, по мнению Реймонда, подобен строительству собора: централизованное планирование, строгая организация и единый процесс от начала до конца. Второй – это прогрессивная разработка с открытым исходным кодом, которая больше напоминает «оживлённый базар, полный различных целей и подходов, из которого связная и стабильная система, казалось бы, возникает лишь благодаря череде чудес». Эта аналогия указывает на обсуждения, которые сопровождают процесс разработки с открытым исходным кодом. Различия между этими двумя стилями разработки, согласно Бар и Фогелю, в основном касаются обработки (и создания) отчётов об ошибках и запросов на новые функции, а также ограничений, с которыми работают программисты. В разработке программного обеспечения с закрытым исходным кодом программисты часто тратят много времени на работу с отчётами об ошибках и их создание, а также на обработку запросов на новые функции. Это время уходит на планирование и расстановку приоритетов в дальнейшей разработке. В результате часть команды разработчиков тратит много времени на эти вопросы, а не на непосредственное написание кода. Кроме того, в проектах с закрытым исходным кодом команды разработчиков часто вынуждены работать в условиях управленческих ограничений (таких как сроки, бюджеты и т.п.), которые мешают решению технических задач, связанных с программным обеспечением. В разработке программного обеспечения с открытым исходным кодом эти проблемы решаются за счёт вовлечения пользователей в процесс разработки или даже предоставления им возможности самостоятельно создавать систему.

Модель

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

Типы проектов с открытым исходным кодом

Существует несколько типов проектов с открытым исходным кодом. Прежде всего, это обычные программные продукты и библиотеки, состоящие из независимых фрагментов кода. Некоторые из них могут даже зависеть от других проектов с открытым исходным кодом. Эти проекты служат конкретной цели и удовлетворяют определенную потребность. Примерами таких проектов являются ядро Linux, веб-браузер Firefox и офисный пакет LibreOffice. Дистрибутивы – это другой тип проектов с открытым исходным кодом. Дистрибутивы – это наборы программного обеспечения, публикуемые из одного источника с общей целью. Наиболее ярким примером дистрибутива является операционная система. Существует множество дистрибутивов Linux (таких как Debian, Fedora Core, Mandriva, Slackware, Ubuntu и т.д.), которые поставляются с ядром Linux и множеством компонентов пользовательского пространства. Существуют и другие дистрибутивы, такие как ActivePerl – язык программирования Perl для различных операционных систем, и дистрибутивы Cygwin, содержащие программы с открытым исходным кодом для Microsoft Windows. Другие проекты с открытым исходным кодом, такие как производные BSD, поддерживают исходный код целой операционной системы, включая ядро и все её основные компоненты, в одной системе контроля версий, разрабатывая всю систему совместно как единая команда. Эти проекты по разработке операционных систем тесно интегрируют свои инструменты, в большей степени, чем в системах, основанных на дистрибутивах. Наконец, существуют проекты, представляющие собой книги или отдельные документы. Эти материалы обычно не поставляются в составе пакета программного обеспечения с открытым исходным кодом. Проект документации Linux (Linux Documentation Project) размещает множество подобных проектов, документирующих различные аспекты операционной системы Linux. Существует множество других примеров проектов с открытым исходным кодом такого типа.

Методы

Трудно вести проект с открытым исходным кодом, придерживаясь более традиционного подхода к разработке программного обеспечения, такого как каскадная модель, поскольку в этих традиционных подходах запрещено возвращаться к предыдущим этапам. В разработке программного обеспечения с открытым исходным кодом требования редко собираются до начала проекта; вместо этого они формируются на основе ранних выпусков программного продукта, как описывает Роббинс. Помимо требований, часто именно ранние версии программного обеспечения привлекают добровольцев для участия в его разработке. Этот сетевой эффект, по мнению Абрахамссона и др., имеет решающее значение: «если представленный прототип привлечет достаточно внимания, он постепенно начнет привлекать все больше и больше разработчиков». Однако Абрахамссон и др. также отмечают, что сообщество может быть очень требовательным, как и в коммерческом мире проприетарного программного обеспечения: «найдешь пользователей – выживешь, не найдешь – погибнешь». Фуггетта утверждает, что «быстрое прототипирование, инкрементная и эволюционная разработка, спиральный жизненный цикл, быстрая разработка приложений и, в последнее время, экстремальное программирование и гибкие методологии разработки программного обеспечения могут быть одинаково успешно применены как к проприетарному, так и к программному обеспечению с открытым исходным кодом». Он также выделяет экстремальное программирование как особенно полезный метод для разработки программного обеспечения с открытым исходным кодом. В более широком смысле, все гибкие методологии разработки применимы к разработке программного обеспечения с открытым исходным кодом благодаря их итеративному и инкрементальному характеру. Другие гибкие методологии также одинаково полезны как для разработки программного обеспечения с открытым, так и с закрытым исходным кодом: например, Internet Speed Development подходит для разработки программного обеспечения с открытым исходным кодом благодаря принципу распределенной разработки, который он использует. Internet Speed Development задействует географически распределенные команды для «работы в режиме 24/7». Этот метод, в основном используемый крупными компаниями, разрабатывающими проприетарное программное обеспечение (поскольку только они могут позволить себе центры разработки в разных часовых поясах), также хорошо работает в проектах с открытым исходным кодом, поскольку программное обеспечение, разрабатываемое большой группой добровольцев, по определению будет иметь разработчиков, распределенных по всем часовым поясам.

Каналами связи

Разработчики и пользователи проекта с открытым исходным кодом не всегда работают над проектом находясь рядом друг с другом. Им необходимы какие-либо электронные средства связи. Электронная почта – одна из самых распространенных форм общения среди разработчиков и пользователей проектов с открытым исходным кодом. Часто используются электронные списки рассылки, чтобы обеспечить доставку сообщений всем заинтересованным сторонам одновременно. Это гарантирует, что хотя бы один из участников сможет на них ответить. Для общения в реальном времени многие проекты используют системы обмена мгновенными сообщениями, такие как IRC. Веб-форумы в последнее время стали распространенным способом получения пользователями помощи при возникновении проблем с использованием продукта с открытым исходным кодом. Вики также стали распространенным средством коммуникации для разработчиков и пользователей.

Системы управления версиями

В разработке программного обеспечения с открытым исходным кодом (OSS) участники, которые в основном являются добровольцами, распределены по различным географическим регионам, поэтому необходимы инструменты для помощи в совместной разработке исходного кода. В начале 2000-х годов система одновременных версий (CVS) была заметным примером инструмента для совместной работы с исходным кодом, используемого в проектах OSS. CVS помогает управлять файлами и кодом проекта, когда над ним одновременно работают несколько человек. CVS позволяет нескольким пользователям работать над одним и тем же файлом одновременно, перемещая файл в рабочие каталоги пользователей и затем объединяя изменения после завершения работы. CVS также позволяет легко восстановить предыдущую версию файла. В середине 2000-х годов система контроля версий Subversion (SVN) была создана для замены CVS и быстро набирает популярность как система управления версиями проектов OSS, наряду с Mercurial, используемой в языке программирования Python.

Отслеживатели ошибок и списки задач

Большинство крупных проектов нуждаются в системе отслеживания ошибок для контроля статуса различных проблем в процессе разработки.

Инструменты для тестирования и отладки

Поскольку проекты с открытым исходным кодом часто подвергаются интеграции, используются инструменты, помогающие автоматизировать тестирование в процессе системной интеграции. Tinderbox является примером такого инструмента. Tinderbox позволяет участникам проекта с открытым исходным кодом выявлять ошибки во время системной интеграции. Tinderbox запускает процесс непрерывной сборки и информирует пользователей о проблемных участках исходного кода и платформах, на которых возникают эти проблемы. Отладчик – это компьютерная программа, используемая для отладки (а иногда и для тестирования или оптимизации) других программ. GNU Debugger (GDB) – пример отладчика, применяемого в разработке программного обеспечения с открытым исходным кодом. Этот отладчик поддерживает удаленную отладку, что особенно полезно при разработке программного обеспечения с открытым исходным кодом. Инструмент для поиска утечек памяти, или отладчик памяти, – это инструмент программирования для обнаружения утечек памяти и переполнения буфера. Утечка памяти – это особый вид избыточного потребления памяти компьютерной программой, когда программа не освобождает память, которая больше не требуется. Примеры инструментов обнаружения утечек памяти, используемых Mozilla, – это инструменты XPCOM Memory Leak. Инструменты валидации используются для проверки соответствия фрагментов кода заданному синтаксису. Splint является примером инструмента валидации.

Управление пакетами

Система управления пакетами — это набор инструментов для автоматизации процесса установки, обновления, настройки и удаления программных пакетов с компьютера. Red Hat Package Manager (RPM) для файлов формата rpm и Advanced Packaging Tool (APT) для файлов формата deb — это системы управления пакетами, используемые многими дистрибутивами Linux.