Введение

Коллекция исходного кода, используемого для создания системы, приложения или компонента – исходный код программных систем.

В разработке программного обеспечения кодовая база (или база кода) – это коллекция исходного кода, используемая для создания конкретной программной системы, приложения или компонента программного обеспечения. Как правило, кодовая база включает только системные файлы исходного кода, написанные человеком; таким образом, кодовая база обычно не включает файлы исходного кода, генерируемые инструментами (сгенерированные файлы), или файлы двоичных библиотек (объектные файлы), поскольку их можно создать из исходного кода, написанного человеком. Однако, как правило, она включает файлы конфигурации и свойств, поскольку они содержат данные, необходимые для сборки. Кодовая база обычно хранится в репозитории системы управления исходным кодом в системе контроля версий. Репозиторий исходного кода – это место, где хранятся большие объемы исходного кода, публично или конфиденциально. Репозитории исходного кода используются, прежде всего, для резервного копирования и контроля версий, а также в проектах с участием нескольких разработчиков для управления различными версиями исходного кода и помощи в разрешении конфликтов, возникающих при одновременном внесении изменений разными разработчиками. Subversion, Git и Mercurial – примеры популярных инструментов, используемых для организации этого рабочего процесса, который широко распространен в проектах с открытым исходным кодом. Для небольших проектов код может храниться как неуправляемый набор файлов (даже ядро Linux в течение многих лет поддерживалось как набор файлов).

Отдельные и монолитные кодовые базы

Несколько проектов могут иметь отдельные, различные кодовые базы, или могут использовать одну, общую или монолитную кодовую базу. Это особенно характерно для связанных проектов, например, разрабатываемых в рамках одной компании. В частности, монолитная кодовая база обычно подразумевает единый репозиторий (весь код в одном месте) и часто общую систему сборки или общие библиотеки. То, является ли кодовая база общей или разделенной, не зависит от архитектуры системы и фактических результатов сборки; таким образом, монолитная кодовая база, относящаяся к процессу разработки, не подразумевает монолитную систему, относящуюся к архитектуре программного обеспечения или единый монолитный исполняемый файл. Следовательно, монолитная кодовая база может и (особенно для больших кодовых баз) часто состоит из отдельных компонентов, а не только из одной системы или одного исполняемого файла; распределенная кодовая база (с несколькими компонентами) может использоваться для создания единой монолитной системы или даже одного исполняемого файла. Например, ядро Linux является архитектурно единым монолитным ядром, но состоит из отдельных исполняемых файлов (загружаемых модулей) и разрабатывается в нескольких распределенных репозиториях. Монолитная кодовая база имеет как преимущества, так и недостатки по сравнению с распределенной кодовой базой. Проще говоря, монолитная кодовая база упрощает интеграцию – изменения в различные компоненты или рефакторинг кода между ними можно выполнять легко и атомарно – и позволяет выполнять операции над всей кодовой базой, но требует большего репозитория и облегчает накопление технического долга. Отдельная кодовая база или распределенная кодовая база сохраняет отдельные репозитории меньшими и более управляемыми, одновременно обеспечивая разделение компонентов, но также требует интеграции между кодовыми базами (или с основным репозиторием) и усложняет изменения, охватывающие несколько кодовых баз. В контексте стандартов, обозначение нескольких кодовых баз как "отдельных" указывает на наличие независимых реализаций без общего исходного кода и на то, что исторически эти реализации не развивались из общего проекта. Это может быть способом демонстрации совместимости, показывая два независимых программных продукта, реализующих данный стандарт.