В последнее время новость о новом протоколе AGPL от Elastic стала горячей темой в сообществе, будь то лояльные пользователи сообщества, люди из других сообществ с открытым исходным кодом или сопровождающие и пользователи других подобных продуктов, похоже, все они обращают на него внимание. к этому вопросу. Я прочитал много статей по теме, и во многих дискуссиях было много мнений, но лишь немногие действительно дошли до сути проблемы.
Чтобы все могли более четко разобраться в этом вопросе, я решил написать эту статью, чтобы подробно проанализировать эту тему, что можно расценивать как опоздание. В то же время многие друзья также спрашивали меня об этом вопросе, поэтому я также хотел бы воспользоваться этой возможностью, чтобы дать некоторые разъяснения на техническом уровне.
Следует подчеркнуть, что мнения, изложенные в этой статье, отражают только мои личные взгляды и могут быть использованы в качестве справочных материалов. Обсуждения и обмен мнениями также приветствуются.
Чтобы позаботиться о тех друзьях, у которых хватит терпения прочитать только минуту или две.,Я решил поиграться с логикой,Напишите заключение прямо в начале:Для большинства людей Эластик Новый AGPL Соглашение не имеет существенного значения。так,Вы можете быть уверены,Не пугайтесь трендовых поисковых запросов.
Мы все знаем, что AGPL Это лицензия на «заразность». Проще говоря, если вы используете AGPL Лицензионное программное обеспечение, ваше программное обеспечение также должно соответствовать Лицензия AGPL,Это общая проблема. Но на самом деле,AGPL Влияние только на тебя прямое использоватьи Связанные с модификациейкодвступит в силу только тогда, когда。
Что, если вы вообще не использовали и не модифицировали его?
если ты просто положишь Elasticsearch в качестве серверной службы (это также 99% пользовательский сценарий), через клиент, путем вызова API Elasticsearch "интегрированный" в ваше приложение (на самом деле,Это не называется интеграцией,Просто позвониили ВОЗиспользовать)。ТакВы используете только клиентский код Elasticsearch.,И этот код не приведет к срабатыванию пункта о заражении AGPL.,Потому что здесь только Apache 2.0。Давайте сначала посмотрим на Java и Python Как представить в Elasticsearch Клиентские библиотеки и перечислите их лицензионную информацию:
// представлять Elasticsearch клиентская библиотека
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
public class ElasticExample {
public static void main(String[] args) {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchResponse response = client.search(new SearchRequest("index"), RequestOptions.DEFAULT);
// Обработка результатов поиска
}
}
# представлять Elasticsearch клиентская библиотека
from elasticsearch import Elasticsearch
def search_index():
client = Elasticsearch("http://localhost:9200")
response = client.search(index="index", body={"query": {"match_all": {}}})
# Обработка результатов поиска
return response
Это означает, что независимо от того, используете ли вы Java все еще Клиентская библиотека Python,Фактически, все клиенты Elasticsearch имеют лицензию Apache v2.,Ни одна из этих библиотек не окажет на вас «заразительного» воздействия.
Вот почему мы говорим, что для 99% разработчиков или пользователей нашего сообщества это изменение не имеет никакого влияния. То же самое касается и SSPL.
Подумайте об этом под другим углом: как заставить себя принять AGPLиSSPL влияние? Давайте сначала посмотрим на первый вариант, когда вы помещаете Elasticsearch Интегрируйте исходный код на стороне сервера в ваше приложение.
Здесь мы рассмотрим простой пример, показывающий, как напрямую изменить или встроить код основной библиотеки Elasticsearch в ваше приложение:
// представлять Elasticsearch основная библиотека
import org.elasticsearch.node.Node;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.node.NodeValidationException;
import org.elasticsearch.client.node.NodeClient;
public class ElasticNodeExample {
public static void main(String[] args) throws NodeValidationException {
Settings settings = Settings.builder().put("cluster.name", "myCluster").build();
Node node = new Node(settings);
node.start();
NodeClient client = node.client();
// прямой и Elasticsearch основная библиотека для взаимодействия
}
}
В этом примере код напрямую зависит от Elasticsearch изосновная библиотека(например:org.elasticsearch.node.Node
),и запустите кластер Elasticsearch прямо в вашем приложении,Тогда в это время,Вы можете быть вовлечены в распространение лицензий AGPL или SSPL.
Но это всего лишь ссылка, и это не означает, что ваше приложение также должно иметь открытый исходный код. Нам нужен дальнейший анализ, потому что только при соблюдении определенных условий ваше приложение будет допущено к заражению. Далее давайте посмотрим, как передается AGPL или SSPL.
Теперь, когда это упомянуто AGPL и SSPL иззаразный,Давайте подробнее рассмотрим оба протокола. Характеристики,И что они значат для разработчиков и бизнеса.
Заразительность, как следует из названия, означает, что когда вы используете фрагмент кода с определенной лицензией, лицензионные требования этого фрагмента кода могут быть «заразными» для всего вашего приложения. В частности, заразительная лицензия обычно требует, чтобы, если вы используете код, содержащий эту лицензию, и изменяете или объединяете его в своем приложении, ваше приложение также должно быть выпущено с той же лицензией.
Это означает, что когда вы разрабатываете приложение, в котором используется библиотека с открытым исходным кодом и заразной лицензией, даже если используется только небольшая часть кода, лицензионные требования всего приложения могут быть затронуты. Вот почему google Крупным компаниям запрещенокод Содержитили ВОЗиспользоватьAGPL/SSPLразрешенокод。Но это не значит google Другие компании не будут его использовать. elasticsearch,mongodb, redis, Графана, как мы говорили вначале, мы должны правильно понимать разницу между кодами клиента и кодом сервера. Эти двое не одинаковы License。
Оглядываясь назад, то есть, если используемая вами библиотека основана на AGPL, то все ваше приложение, возможно, также придется выпускать под лицензией AGPL, отсюда и возникает «заразность».
Однако проблема часто оказывается более сложной. Если в вашем приложении используется несколько библиотек с открытым исходным кодом, и эти библиотеки имеют разные условия лицензирования, например Apache 2.0, GNU, MIT, AGPL и т. д., то окончательный выбор лицензии будет зависеть от наиболее строгой из этих библиотек. Обычно условия лицензий становятся более строгими в следующем порядке:
Поэтому, если ваше приложение использует оба Apache 2.0 и AGPL Лицензированная библиотека благодаря AGPL это более строгая лицензия, соответствие которой может потребоваться от вашего приложения. AGPL требования к открытому исходному коду. В этом случае AGPL Инфекционность будет покрыта Apache 2.0 рыхлость, вынуждающая все приложение принять AGPL Лицензия выдана.
Подвести итог Давайте поговорим,существовать В приложениипредставлять Несколько Открытый исходный библиотеки кода, вы должны тщательно продумать взаимодействие между этими лицензиями, особенно опасаясь более заразных лицензий (таких как AGPL) для всего приложения. Если лицензия одной библиотеки очень заразна, вполне вероятно, что ее лицензионные требования будут иметь приоритет перед другими, более либеральными лицензиями, в результате чего все приложение должно будет соответствовать самым строгим требованиям открытого исходного кода.
Различные лицензии имеют разные условия возникновения заражения. Для упрощения объяснения остановимся на AGPL и SSPL Эти две лицензии более заразительны.
Инфекционность в основном возникает в следующих двух ситуациях:
поэтому,Пока вы предоставляете сетевое AGPL или SSPL разрешено Служить,Даже если вы не меняли или не встраивали код,Все еще подвержен этим заразительным запросам,Соответствующие источники должны быть раскрыты.
В понимании AGPL и SSPL Когда дело доходит до заражения, крайне важно понимать концепцию «доставки услуг по сети». Эта концепция определяет, нужно ли вам раскрывать исходный код. Некоторые читатели могут быть обеспокоены: «Мое приложение вызывает Elasticsearch Сервис, это Предоставление услуг через Интернет? или «Мое приложение вызывает Elasticsearch Облачные сервисы: считается ли это предоставлением услуг через Интернет? "
Здесь мы ответим на эти вопросы один за другим:
Подвести итог Давайте поговорим,Предоставление услуг через Интернетобычно относится киздатыкак поставщик услугвнешним пользователям Предоставить на основе AGPL или SSPL Услуги лицензионного кода. Если вы обращаетесь к сторонним облачным сервисам только внутри компании, таких ситуаций нет. необходимости раскрывать исходный код。
На этом этапе вы должны быть в состоянии смутно догадаться, кого это затронет. AGPL и SSPL Воздействие.
Проще говоря, AGPL и SSPL иззаразный主要影响那些поставщик облачных услугиПоставщик услуг SaaS。
Короче говоря, AGPL и SSPL Основные сферы влияния – это Предоставление. услуг через Интернет-провайдеры облачных технологий Поставщик услуг SaaS,Для обычных пользователей и большинства разработчиков,Влияние этих лицензий относительно невелико.
хотя AGPL и SSPL являются инфекционными заболеваниями, и они различаются по масштабу заражения и применимым сценариям:
и AGPL и SSPL По сравнению с Эластиком License v2 (ELv2) более мягок с точки зрения заразности. ЭЛв2 сделан из Elastic лицензии, разработанные специально для их продуктов для защиты Elastic Обеспечивая коммерческую выгоду, минимизируйте ограничения для пользователей и разработчиков. и AGPL и SSPL Они подчеркивают Открытый исходный Кодикод, предоставленный по лицензии, другой, ELv2 Основное внимание уделяется контролю за деловой практикой, а не требованиям заразности.
Нет. ELv2 не нравится AGPL или SSPL Это заразно. использовать ELv2 разрешено Elastic Продукты, которые вы можете настроить в Зависите отиспользовать, изменять и распространять, не беспокоясь о раскрытии исходного кода. Это означает, что вы можете работать в среде с закрытым исходным кодом. Elastic продукты без соблюдения требований к выпуску открытого исходного кода.
ELv2 в основном ограничивает некоторые конкретные виды деятельности, особенно следующие два пункта:
В целом, ELv2 это более либеральная лицензия, которая позволяет пользователям использовать ее с меньшими ограничениями. Elastic продукты, не беспокоясь о влиянии положений о заражении. Для желающих использовать в проектах с закрытым исходным кодом Elastic Технологическое предприятие, ELv2 обеспечивает более гибкийи Безопасностьизвыбирать。
Для разработчиков и предприятий подходящая выборка зависит от вашей бизнес-модели и сценария. существовать 99.999% случай, если вы просто используете Elasticsearch изклиентская библиотека для взаимодействия с данными, то вам не придется слишком беспокоиться о разрешено проблемах, ведь эти клиентские библиотека основана на Apache v2 Автор: лицензия. Это означает, что ваше приложение не имеет ничего общего с вопросами лицензирования, которые мы сегодня обсуждали.
Однако если ваш вариант использования включает в себя более сложные ситуации, вам следует учитывать несколько вещей:
выбиратьлицензиячас,Ключевым моментом является понимание потребностей вашего бизнеса ииспользовать сценарий. Если вы обычный пользователь и разработчик,Apache v2 Лицензированная клиентская библиотека уже удовлетворяет большую часть ваших потребностей, не создавая при этом заразных проблем. Но если вы используете в более сложных сценариях Elasticsearch изосновная технология,Особенно, когда речь идет об изменении кодов для предоставления облачных сервисов.,Будьте осторожны: выберите соответствующую лицензию.,Чтобы ваш проект прошел гладко,и соблюдать все юридические и коммерческие требования.
Наконец-то снова Подвести итог,Это мое личное мнение,Говорю только за себя.