Сервис GitHub открыл код инструмента для кэширования и проверки лицензий зависимостей Licensed

Обложка к Licensed: шестеренка в виде логотипа open source

GitHub опубликовал код Licensed — инструмента на Ruby, призванного усовершенствовать процесс работы с зависимостями в программном обеспечении (OSS) с открытым исходным кодом. При этом разработчики отмечают, что он не является полноценной заменой настоящему open source лицензированию.

Под «зависимостью» в документации подразумевается сторонний программный пакет, используемый в приложении. «Источником зависимости» является класс, способный перечислять зависимости для приложения (например, bundler, npm).

Что за Licensed?

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

Собранные данные помогают:

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

Licensed учитывает не все возможные комбинации языков и менеджеров сборки, однако разработчики добавили возможность пользователям самостоятельно вносить дополнения буквально в несколько строчек кода:

module MyProject
  class MySource

    # Required.  I need a configuration for basic functionality
    def initialize(config)
      @config = config
    end

    # Required.  Tell the world the name of the dependency source
    def type
      "my source"
    end

    # Required.  Give the world the dependencies found for `@config`
    def dependencies
      # Will this parse a package manager file?
      # Will this use CLI tools to find dependencies?
      # Nope!  I'm a hardcoded list!
      [
        Dependency.new(
          @config.source_path, # location used to find license text (e.g. LICENSE)
          name: "licensed",
          type: type,
          homepage: "https://github.com/github/licensed",
          version: "0.13.0",
          summary: "Extract and validate the licenses of dependencies."
        )
      ]
    end
  end
end

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

Источник: блог GitHub Engineering

Ещё интересное для вас:
Тест: какой язык программирования вам стоит выбрать для изучения?
Тест: как хорошо вы разбираетесь в Data Science?
Соревнования и бесплатная онлайн-школа для программистов