Готовим код к open source

Короткая инструкция по причёсыванию кода.

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

Это инструкция для команд на тему «Что мне нужно сделать чтобы заопенсорсить код».

Готовим код к open source в 3 этапа

Шаг 1

Проверка указания авторства и оригинальности кода

Шаг 2

Выбор лицензии

Шаг 3

Проверка совместимости сторонних зависимостей

Шаг 1. Проверка указания авторства и оригинальности кода.

Необходимо зафиксировать список участников проекта. Для каждого участника определить:

  • Имя и фамилию – Pavel Griboedov
  • Компанию — LLC «Leroy Merlin Vostok»
  • Контактную почту – pavel.griboedov@leroymerlin.ru

Указание правильной информации в git

Обязательно отправлять корректную мета-информацию с каждым коммитом. По этой информации определяется авторство кода.

git config --global user.name "Pavel Griboedov"
git config --global user.email "pavel.griboedov@leroymerlin.ru"

Нельзя привлекать временных работников или практикантов к разработке собственных продуктов, которые будем выкладывать в open source, а также к работе над внешними open source проектами.

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

Проверка оригинальности

«Оригинальность» — это важный юридический термин. Мы обладаем юридическими правами только если код оригинальный. На практике, оригинальность кода определяется возможностью выделить так называемые design decision.

Шаг 2. Выбор лицензии.

Самый сложный и одновременно важный этап это выбор правильной лицензии для кода. На выбор могут повлиять лицензии сторонних библиотек, использованных в проекте, об этом подробнее в 3 шаге.

Лицензии copyleft

Как правило, copyleft лицензии требуют использования лицензии похожего типа, в случае, когда распространяется код вместе со твоим. Другими словами, если кто-то захочет использовать библиотеку с copyleft лицензией и начнёт распространять своё ПО, то делать это он будет должен тоже по свободной copyleft лицензии.

Самая популярная лицензия этого типа — GNU GPLv3. Даёт возможность делать с твоим проектом почти всё что угодно, за исключением дистрибьюции с закрытым кодом.

Этот тип лицензий разрешает всем использовать и распространять продукты, содержащие твой код, даже в закрытых проприетарных решениях.

  • BSD — есть две основные редакции. Оригинальная версия обязывает добавлять рекламную строчку используемой библиотеки во вссех продуктах, использующих твой код: «Продукт использует программу разработанную в компании Рога и копыта». Изменённая и укороченная версия не включает это обязательство. Две разные версии именуются одинаково и для избежания путаницы мы не рекомендуем использовать эту лицензию. А ещё, эта лицензия полностью игнорирует патентные права, о которых чуть дальше.

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

  • Apache 2.0 — одна из самых популярных open source лицензий, используемая в CNCF и Apache Foundation. Длиннее чем MIT, но покрывает ещё и вопрос с патентами.

Рекомендованный выбор лицензии для большинства случаев

По умолчанию мы предлагаем тебе использовать copyright open source лицензию – Apache 2.0.

Указание лицензии в проекте

  • Каждый файл с кодом должен иметь указание лицензии в шапке
/*
 * Copyright 2020 LLC Leroy Merlin Vostok.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ru.leroymerlin.delivery.tariff.convert;
  • README.md должен упоминать лицензию
## License

This repository is released under version 2.0 of the 
[Apache License](https://www.apache.org/licenses/LICENSE-2.0).

Шаг 3. Проверка совместимости сторонних зависимостей.

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

Тип лицензии зависимостиПримерТребуемые действия
РазрешающиеApache BSD MITNone
CopyleftGPL LGPL AGPLПроверить совместимость
Без лицензииУдалить или заменить компонент
ПроприетарныеCommercialУдалить или заменить компонент
Требующая принятие стороннего
соглашения вместе с open source лицензией
CLA CAAПринять соглашение
или удалить или заменить компонент

Все шаги пройдены

Поздравляю! Теперь можно выкладывать проект в open source.

Для этого необходимо анонсировать желание в CI/CD канале в Слаке и они добавят ваш репозиторий в список исключения в специальном боте, который закрывает репозитории, открытые по ошибке.

После этого можно смело идти в настройки репозитория и выставить его видимость в public.