Я могу выпустить библиотеку с открытым исходным кодом, связанную с продуктом с закрытым исходным кодом по правилам GPL? [закрытый]

метод .get() возвращает обещание, которое выполняется асинхронно после вызова .then(). Из-за этого следующая исполняемая строка - console.log("Service Data :: " + data);. Javascript не ждет разрешения обещания и просто продолжает следующую синхронную строку, которая является второй консолью.

Обычно я передаю обещание другому компоненту или, что еще лучше, я использую .valueChanges() из .doc(), который возвращает наблюдаемое, и использую асинхронный канал в компоненте, который я использую. переходя к:

// Get Observable on document. Returns Observable
const group$ = this.firestore.doc('/groups' + tempId).valueChanges();

У вас есть две опции:

  1. Используйте group$.subscribe();
  2. Передайте group$ нужному компоненту и используйте асинхронный канал там

Первый вариант:

// In your component:
let data;
group$.subscribe(doc => {
  if (doc.exists) {
    data = doc
    console.log("Document data:", doc);   // No need to call data().
  } else {
    console.log("No such document!");
  },
  error => console.log("Error getting document:", error);
)

Второй вариант, переход в компонент, где вы хотите, чтобы наблюдаемое было оценено, и данные отображались:

Your html here {{ doc.someProperty }} further html here...

Лично я предпочитаю второй вариант, потому что он прекрасно сочетается с фреймворком и удерживает меня от асинхронных ошибок.

Взгляните на репозиторий Angularfire2 Github для документов здесь . Если нет необходимости оценивать наблюдаемое вручную в коде, я бы не стал это делать и позволил фреймворку справиться с этим.

И еще одна заключительная вещь: если вы используете наблюдаемую и хотите выполнить некоторую обработку ошибок при использовании асинхронного канала, вы, вероятно, захотите сделать это при создании наблюдаемой:

// Get Observable on document. Returns Observable
// In error case, returns Observable of the error string
const group$ = this.firestore.doc('/groups' + tempId).valueChanges()
  .pipe(
    catchError(error => of(`Error getting document: ${error}`))
  );

5
задан James 11 August 2011 в 16:04
поделиться

6 ответов

Нет, если это - GPL, и Вы связываетесь с ним, Ваш код становится GPL также. Если это - LGPL, вещи отличаются (можно создать коммерческие приложения, связанные против лицензируемых библиотек LGPL), но это, кажется, не имеет место здесь.

5
ответ дан 14 December 2019 в 04:48
поделиться

Не верьте людям, которые говорят о вызове удаленной процедуры (COM) или стандартном IO. Если существует что-нибудь к нему вообще, стандартная вещь IO прибывает из ситуаций прежней версии как передача по каналу Вашего вывода к grep и передаче по каналу это в некоторое другое приложение.

Вместо этого думайте об этом этот путь: действительно ли Ваше приложение является полученной работой от компонента GPL? Вы могли объяснить, к довольно умному кладут человека, почему Ваше приложение не является производной библиотеки с открытым исходным кодом. Можно объяснить stdio обертки и COM-интерфейсы, пока Вы не посинели, но Ваш адвокат, судья, клиент, или кто бы ни не купит его. Вместо этого необходимо показать, что удаление той библиотеки GPL не значительно изменило бы операцию приложения. Если Вы не можете сделать, это, ну, в общем, извините, но Вы находитесь на тонком льду.

1
ответ дан 14 December 2019 в 04:48
поделиться

Знайте, существует столько же различных интерпретаций GPL, сколько существуют люди, примерно.

Я не адвокат, но я говорил с адвокатами об этом предмете. Это не юридическая консультация.

Некоторые адвокаты полагают, что динамично соединение против GPL в порядке, и не составляет полученную работу. Другие, такие как RMS и его адвокаты полагают, что динамическое подключение не в порядке и действительно составляет полученную работу. Большинство полагает, что статическое подключение является полученной работой.

Существует много аргумента на предмете, и нет никакого категорического прецедентного права, которое определяет то, что и не является полученной работой в этом отношении.

Посмотрите, например, Эта Статья

0
ответ дан 14 December 2019 в 04:48
поделиться

Если Вы не связываетесь против него, Вы находитесь в ясном. Таким образом вместо того, чтобы разработать API для этого инструмента командной строки с открытым исходным кодом, просто запишите немного обертки, которая взаимодействует с программой непосредственно на командной строке.

Так как Вы не связываетесь и теперь просто выполняете двоичный файл, Ваш код не должен будет быть выпущен под GPL.

Можно использовать ветвление, канал, должностное лицо и друзей, чтобы сделать это! Это - простое решение и в зависимости от того, как приложение ожидает свой вход на командной строке, это может работать очень хорошо (основанный на проклятиях материал более тверд... нуждаются в каком-то терминале),

Править:

Из комментариев это походит, что даже это не допустимо, и могло все еще вызвать проблемы. Я предлагаю связаться с адвокатом, чтобы удостовериться, что Вы находитесь в ясном, он сможет интерпретировать GPL и сказать Вам, что Вы можете и не можете сделать с кодом GPL'ed.

Я думал бы, что, просто выполнив программу GPL'ed и затем отправив ей данные (a.l.a. передача по каналу данных в него) не должны заставлять Вашу программу также быть GPL'ed.

GPL слишком сложен, если я использую инструмент командной строки путем выполнения его и передачи по каналу данных к нему, моя программа может все еще стать GPL. Это просто странно. Дайте мне BSD, и или MIT в любое время дня, путь, более простой понять.

2
ответ дан 14 December 2019 в 04:48
поделиться

С GPL я думаю, что единственный выход должен перенести его во что-то как COM-объект (который должен был бы также быть GPL или compatabile), и соединитесь с объектом во времени выполнения. Так как это сохраняет Вас от (статически) соединения с кодом GPL, Вы были бы от рычага.

Тот прием будет работать с кодом GPL v2, но не может работать с GPL v3.

0
ответ дан 14 December 2019 в 04:48
поделиться

Прежде чем я запущу, я должен сказать, что я не адвокат, и это нельзя рассмотреть как юридическую консультацию. При необходимости в юридической консультации необходимо нанять адвоката.

Пока Вы связываете свою программу с программным обеспечением GPL'd, Ваше программное обеспечение считают производной работой программного обеспечения GPL'd.

Если Вы хотите использовать часть программного обеспечения GPL'd, необходимо выпустить программное обеспечение под GPL или GPL-совместимую лицензию. Иначе необходимо найти другую часть программного обеспечения, которое делает то, в чем Вы нуждаетесь или пишете это сами. Точка GPL - то, что цена лицензирования его - то, что Вы также выпускаете свой исходный код для Вашей производной работы в соответствии с лицензией бесплатного программного обеспечения. Если Вы не рассмотрели бы использование собственного программного обеспечения, не платя соответствующие лицензионные сборы, Вы не должны использовать GPL

Единственный путь, которым Вы могли изолировать его, будет при наличии совершенно отдельного исполняемого файла, который связался по интерфейсу общего назначения (сокет, канал или что-то), такой, что Ваше программное обеспечение или программное обеспечение GPL'd могли быть заменены легко. Интерфейс, который это передает по потребностям быть очень общего назначения; это не может зависеть от деталей реализации программного обеспечения GPL'd, таких как внутренний формат данных или что-либо вида. В основном, если это связывается по протоколу, который мог бы использоваться в качестве стандарта общего назначения, затем Ваше программное обеспечение может говорить с программным обеспечением GPL'd, не будучи рассмотренным производной работой.

Во всяком случае, в то время как возможно общаться с частью программного обеспечения GPL'd из собственного программного обеспечения, Вы не должны стараться изо всех сил делать так. Вы будете нарушать дух GPL и должны были бы очень стараться сделать интерфейс достаточно общего назначения для не подсчета как нарушение. Вместо этого необходимо или найти часть программного обеспечения с другой лицензией, которая делает то, в чем Вы нуждаетесь, запишите это сами или выпустите Ваше программное обеспечение в соответствии с GPL-совместимой лицензией.

править: Существует интересная статья, отправленная на Linux Weekly News по этой самой теме. Согласно анализу в статье, даже если Вы выделяете интерфейс, которым можно общаться с программным обеспечением GPL'd на командной строке, необходимо сделать это как чистую реализацию помещения с одной группой, которая работает с кодом GPL'd, одна группа, которая реализует другое программное обеспечение и всю передачу спецификаций между ними фильтруемый адвокатами. Так, действительно, больше проблемы, чем он стоит.

0
ответ дан 14 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: