Нужно ли включать лицензионное уведомление с каждым исходным файлом?

111

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

Это просто кажется пустой тратой времени и файлового пространства. Я планирую поставить @licenseи @authorтег в своих проектах, но я не понимаю , почему я должен перечислить такое гигантское уведомление в каждом отдельном файл , если я не хочу , чтобы мой код публичного домена.

Есть ли причина , почему я хотел бы включить такое уведомление в моих проектах, или просто в то числе уведомления в READMEи @licenseтег должен быть достаточно хорошо? Влияет ли это на «четко сформулированное» правило большинства лицензий, или это просто излишество, чтобы люди не спорили?

RétroX
источник
10
Ваш редактор должен позволить вам свернуть / скрыть лицензию в 1 строку.
Pubby
1
Реально, если кто-то украдет ваш код, переименует переменную и удалит авторское право, будет ли суд считать эти 2 файла идентичными?
NoChance
5
@ Эммад: Нет, суд не сказал бы, что они идентичны. (Но они могут быть «по сути идентичными».) Да, суд скажет, что это нарушение авторских прав.
Эндрю Далке
Соответствующий: softwareengineering.stackexchange.com/a/19653/94635
Иоаннис Филиппидис
Также: opensource.stackexchange.com/a/322/7022
Иоаннис Филиппидис

Ответы:

39

В моем понимании, GPLv3 настоятельно рекомендует (или даже, возможно, требует, по крайней мере, того, как я понимаю текст « Как применять эти условия к вашим новым программам» , после раздела 17), уведомление об авторских правах в каждом исходном файле. Это говорит

Для этого приложите к программе следующие уведомления. Безопаснее всего прикрепить их к началу каждого исходного файла, чтобы наиболее эффективно заявить об исключении гарантии; и в каждом файле должна быть хотя бы строка «авторское право» и указатель на то, где находится полное уведомление.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year>  <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

И проекты GNU, принадлежащие FSF, такие как GCC, имеют такое уведомление в каждом файле.

Я также знаю о программе (система CAIA J.Pitrat), в которой было отказано на веб-сайте сообщества свободного программного обеспечения, поскольку в каждом файле такого уведомления не было.

Я не юрист , но я считаю, что такое уведомление практически обязательно в каждом исходном файле программы GPLv3 .

(если вы используете другую лицензию, в частности не-FSF, внимательно прочитайте о том, как ее применить; YMMV; однако AFAIK, написав уведомление в каждом файле, не повредит.)

Василий Старынкевич
источник
16
Это не может быть обязательным, потому что существуют системы, такие как изображения Smalltalk, которые не выражают исходный код в виде файлов. Они говорят «самый безопасный» и «должен», а не «должен». То, что они рекомендуют, - это понятное руководство с небольшой вероятностью того, что кто-то допустит ошибку, но оно определенно не «практически обязательно».
Эндрю Далке
Я согласен, и я специально сказал «исходный файл». На самом деле, система CAIA немного похожа на Smalltalk: изображение находится в файлах данных, а «исходные файлы» CAIA, о которых я упоминал, являются сгенерированными C-файлами. Тем не менее, мой GCC MELT (ветвь GCC, под авторским правом FSF) также является метапрограммированным, и я действительно стараюсь генерировать комментарии об авторских правах в сгенерированных файлах C (и помещаю их в рукописный код C & MELT).
Василий Старынкевич
Дело принято. Теперь я знаю один параграф о MELT. В целом, лучше всего, чтобы сгенерированные файлы содержали уведомление об авторских правах, так как в противном случае очень трудно «прикрепить» лицензию. Например, «yacc» и «lex» ограничены в том, что они могут делать.
Эндрю Далке
1
Из личного опыта: для принятия проекта в Саванне у вас должна быть лицензия на каждый файл.
Mael
1
Просто чтобы прояснить, согласно FAQ по GPL, #LicenseCopyOnly и #NoticeInSourceFile на момент написания этой статьи, необязательно включать текст « Как применять ...» в каждый исходный файл; обратите внимание, что язык использует «должен», а не «должен». Тем не менее, они настоятельно рекомендуют вам следовать этой практике.
ZeroKnight
37

Я видел много проектов, в которых упоминается только лицензия в файле README или в файле LICENSE или COPYING.

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

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

Предположим, что этот человек хочет использовать один из файлов в вашем дистрибутиве кода, который, конечно, требует копирования, и, следовательно, применяется закон об авторском праве. По умолчанию они НЕ имеют права использовать ваше программное обеспечение в соответствии с законом об авторских правах. Только когда они знают и соблюдают лицензионные ограничения, им разрешается его использовать.

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

Это может быть в самом файле, или когда я использовал код в качестве библиотеки, я поместил соответствующие части в его собственный каталог и добавил «README» или «LICENSE» в этот подкаталог.

Короче говоря, вам не нужно помещать лицензию в каждый файл. Я думаю, что это излишне. При этом нет никакой дополнительной правовой защиты. Это немного помогает нижестоящему пользователю, но не сильно.

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

Например, шаблон Eclipse по умолчанию добавляет то, что я считаю бесполезными метаданными, перед каждой функцией, которая, я думаю, намного лучше фиксируется контролем версий. Но такая практика распространена во многих магазинах.

Эндрю Далке
источник
2
Например, я не вижу ничего связанного с лицензированием в исходных файлах Rails.
Антон Барковский
3
А из 200 файлов в стандартной библиотеке Python верхнего уровня только 34 содержат слово «copyright», и только 4 из них предназначены для Python Software Foundation, который контролирует авторские права на Python.
Эндрю Далке
да, я не думаю, что уведомления об авторских правах для каждого файла будут длиться долго ... это просто слишком много ... это просто не может быть способом будущего ... думаю, СУХОЙ ... ЛИЦЕНЗИЯ на корневом уровне, и давайте называть это днем ​​... я думаю, что в основном все на npm уже делают это так
ChaseMoskal
13

Проблема заключается в том, что очень легко отделить один файл исходного кода от более крупного проекта, например, кто-то просто извлекает, отправляет электронное письмо, загружает один файл, а остальное не содержит полного авторского права. И затем этот файл может передаваться до бесконечности во времени N-м сторонам, которые могут не иметь представления о происхождении файлов.

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

hotpaw2
источник
21
Разве не так же легко разгруппировать с помощью копирования и вставки различные фрагменты исходного файла? Что тогда? Этот аргумент кажется мне противоречивым.
Трэвис Григгс
10
Принятие общественного достояния для работы без уведомления об авторских правах является проблемой. Если вы обнаружите файл без уведомления об авторских правах, вам не следует копировать его и рассылать другим.
Рич Ремер
конечно, есть проблема, что законно «клонировать и владеть» файлом, мы поместили открытый исходный код в репозиторий нашего проекта напрямую, потому что иногда трудно исправить ошибку вне вышестоящего проекта, но вы не можете ждать их отпустить либо. Не сказать, что это хорошая идея, но мы сделали это.
ксенотеррацид
8

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

Это действительно дает понять пользователю, что этот файл находится под любой лицензией, и на самом деле большинство программ GPL содержит краткую преамбулу с надписью read license.txt. Помните, что проекты разделяются, а файлы используются повторно, поэтому размещение сообщения в одном файле может быть плохой идеей.

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

Мартин Беккет
источник
6

Я почти опубликовал удивительно похожий вопрос. Меньше о раздражениях и больше о технических деталях. TL; DR: я считаю, что ответ является вопросом приоритетов автора. Может быть, намерение будет более точным, чем приоритеты ...

Я полагаю, что в вашем источнике можно ссылаться на лицензию, в зависимости от вашего определения «все в порядке». Давайте согласимся, что термин «несопровождаемый» указывает на исходный файл, являющийся частью проекта, который был безжалостно отделен от его любящей базы кода. Указанный файл содержит следующую строку:

# This file is covered by the LICENSING file in the root of this project.

Или намного более прохладная линия, как это:

* @license OMGBBQ <http://goodlics.com/bbq>

"Но ждать!" Вы восклицаете: «Вы только что сказали, что файл был отделен от его проекта! И goodlics.com перенаправляет на доменный скваттер! Вы правы, я это сказал, но это может быть хорошо, и перестаньте на меня кричать. Вот мои аргументы не юриста:

  • Почти каждая страна согласилась с Бернской конвенцией, что AFAIK означает, что если вы что-то создаете, у вас есть авторские права на это, точка. Вам не нужна строка (c) или что-то подобное, но этот материал (плюс сторонняя VCS, такая как GitHub) действительно облегчает доказательство того, что вы ее создали и когда вы ее создали.
  • Поэтому, если вы публикуете какой-то сочный код 1337 онлайн, который вы создали, у вас есть авторское право на него. Никому не разрешено (легально) копировать его. Я знаю, это редко и шокирует, но я слышал, что люди иногда нарушают закон. Это все еще возможно.
  • Этот удивительный nyancat-bcminer-algo.qbasicфайл, который вы написали и опубликовали в Живом Журнале, верите вы или нет, не является общественным достоянием. Нет, если вы не скажете, что это общественное достояние. По умолчанию это только вы и только вы. Это ... драгоценно . (По крайней мере, на 25-50 лет, если вы не Дисней.)
  • Люди обычно сообщают об этом намерении (делая некоторые или все права не только вашими и вашими) с помощью лицензий, но вы должны объявить это намерение; это отказ от участия (HAHA GET IT? Включение отказа от вашего авторского права? УДИВИТЕЛЬНЫЙ). Получите ваши билеты, мы почти у цели!
  • Если все в порядке, что вышеупомянутые несопровождаемые файлы являются частным доменом, то есть не легально копируемым, тогда использование потенциально испорченной ссылки вполне подойдет. Однако, если это не так , то я думаю, что вам нужно включить текст лицензии в каждый исходный файл. Таким образом, несопровождаемые файлы по-прежнему будут лицензированы так, как вы и предполагали . Да, так лучше

Это рассуждение делает два эпических и, вероятно, неверных предположения:

  • «Неработающая» ссылка на лицензию возвращается к поведению по умолчанию (защищенному авторским правом), что может быть неверным предположением.
  • На том сайте, на котором вы разместили, нет политики публикации (например, StackExchange), которая делает все общедоступным.

Спасибо за то, что ездите на дыхательных путях обезьяны.

Отказ от ответственности: это кажется мне логичным, так как я на 90% уверен, что я на 100% неправ.

мистифицировать
источник
6

Существует разница между лицензией и преамбулой .

В некоторых своих проектах я использую стандартную общественную лицензию GNU версии 3.0 . GNU GPL делает необходимым иметь преамбулу для каждого файла исходного кода:

Преамбула и инструкции являются неотъемлемой частью GNU GPL и не могут быть опущены.

Источник: http://www.gnu.org/licenses/gpl-faq.html#GPLOmitPreamble

Итак, вот что я делаю:

1. Добавить License.txt

Чтобы следовать правилам, я поместил файл LICENSE.txt в корень репозитория моего проекта. Это также предлагается GitHub (см. « Где живет лицензия» ).

2. Добавьте преамбулу, используя функцию автоматического сгиба

Затем я включаю преамбулу GPL поверх каждого файла исходного кода, НО, чтобы это не мешало мне скрывать ее в IDE. Большинство IDE имеют функцию автоматического свертывания блоков кода. NetBeans поддерживает функцию Custom Code Folding, а WebStorm также поддерживает сворачивание комментариев .

Вот как это выглядит:

//<editor-fold desc="Preamble">
/*
 * Company Name
 * Copyright (C) 2016 Company Name
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * ...
 */
//</editor-fold>

console.log('Here is my licensed JavaScript code.');

Я думаю, что это очень хороший компромисс между удобством и юридической безопасностью.

Если у вас есть много проектов, в которых вам нужно добавить лицензию, то http://www.addalicense.com/ может помочь.

Обратите внимание: мой совет относится к GPLv3. Другие типы лицензий могут не требовать преамбулы.

Бенни Нойгебауэр
источник
7
«GNU GPL делает необходимым иметь преамбулу для каждого файла исходного кода:» Это не так. Часть, которую вы цитируете, просто не позволяет вам удалить преамбулу из LICENSEфайла, то есть вы не можете изменить текст GPL, удалив его.
Андреа Лаззаротто
6

Есть еще один практический способ, еще не упомянутый здесь.

SPDX-License-Identifierтег. https://spdx.org/using-spdx

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

/* SPDX-License-Identifier: (GPLv3-or-later AND LGPL-2.0-only) WITH bison-exception */
/* Copyright © 1234 Project Author */

Кроме того, люди, которые автоматизируют анализ цепочки поставок программного обеспечения, будут благодарны за то, что вы придерживаетесь общего стандарта машиночитаемого описания лицензии.

ulidtko
источник