Введение
Свободное создание и совершенствование компьютерных программ. Разработка программного обеспечения с открытым исходным кодом (OSSD) — это процесс, в рамках которого программное обеспечение с открытым исходным кодом или аналогичное программное обеспечение, исходный код которого находится в открытом доступе, разрабатывается проектом разработки программного обеспечения с открытым исходным кодом. Это программные продукты, предоставляемые с исходным кодом под открытой лицензией для изучения, изменения и улучшения их конструкции. Примеры популярных программных продуктов с открытым исходным кодом включают Mozilla Firefox, Google Chromium, Android, LibreOffice и VLC media player.
Open source software development (OSSD) is the process by which open source software, or similar software whose source code is publicly available, is developed by an open source software project. These are software products available with its source code under an open source license to study, change, and improve its design. Examples of some popular open source software products are Mozilla Firefox, Google Chromium, Android, LibreOffice and the 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.