1

Тема: Авторские права и лицензирование

Под какой лицензией распространяются модули для Delphi и библиотека KolibriOS.lib? Согласно общепринятым правилам, файл с лицензией должен включаться в хранилище исходного кода, архивы с распространяемыми исходниками и откомпилированными программами. Лицензию хотелось бы знать заранее, во избежание недоразумений.

Разработки «Канторовых систем» распространяются под лицензиями BSD и EULA. Исходники функций FastCode имеют лицензию MPL, сохранена в соответствующих файлах. Для сторонних разработок на Delphi хотелось бы иметь совместимую лицензию, не GPL.

Для Халва-Паскаля есть проблема прав на производный продукт, рассматриваемая в соответствующей теме.

2

Re: Авторские права и лицензирование

Про лицензии вообще не думал.
Да хоть под WTFPL.
Вряд ли какие-либо ограничения привели бы к чему-то хорошему.
Ну или Public Domain просто.
Нет особой разницы и там нет ничего такого, что имело бы смысл ограничивать.
Так что, лицензия пусть будет самая свободная.
К тому же, надеюсь, что это поспособствует дополнительно привлечению заинтересованных разработчиков, тестеров, и т.д.

3

Re: Авторские права и лицензирование

0CodErr пишет:

Да хоть под WTFPL.

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

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

0CodErr пишет:

Ну или Public Domain просто.

От public domain нормальные люди бегут. Это означает отказ автора от каких-либо гарантий, включая развитие продукта. Я не готов использовать код public domain в своих разработках.

Под public domain обычно распространяются какие-то законченные короткие разработки, предусматривающие и поорщряющие изменение под себя. Под public domain распространяется текст лицензии BSD, что логично.

4

Re: Авторские права и лицензирование

Freeman пишет:

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

Ну ок. Если так удобнее. Я ещё кое-что дополнял там, но пока не выкладывал никуда.
Ну одно дело сами исходники. А если просто набор типов, констант и деклараций? И это всё под разные языки. Неужели и тут лицензия должна быть?

Вот что находится в шапке модуля Windows в Delphi

{*******************************************************}
{                                                       }
{       Borland Delphi Run-time Library                 }
{       Win32 API Interface Unit                        }
{                                                       }
{       Copyright (c) 1985-1999, Microsoft Corporation  }
{                                                       }
{       Translator: Borland Software Corporation        }
{                                                       }
{*******************************************************}

То есть, "автор" дельфийских "исходников" вроде как Borland, но автор Win32 API — Microsoft.

Ну BSD так BSD, для меня не существенно.

5

Re: Авторские права и лицензирование

0CodErr пишет:

Ну одно дело сами исходники. А если просто набор типов, констант и деклараций? И это всё под разные языки. Неужели и тут лицензия должна быть?

Можно посмотреть, как сделано в CoreLite и PE Tool:

  • В шапках модулей указано авторство

  • Лицензия BSD лежит в корне

  • Исходники FastCode вынесены во включаемые файлы, в шапке лицензия MPL

«Канторовы системы» — пока чисто виртуальная компания, поэтому авторство идет от моего имени. Использовал настоящие имя и фамилию. Если хочется прослыть оригиналом, можно поставить и ник.

Лицензия как молитва

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

6

Re: Авторские права и лицензирование

Выборочно просматривая исходники программ под KolibriOS, увидел довольно много BSD-подобных лицензий в шапках. Стало быть, это общая практика, за лицензиями никто не следит, — чисто по-русски. А раньше я немного парился по поводу unpacker.obj, например. Он же вроде под GPL?

По правилам, совместное использование GPL с другими лицензиями допускается при двойном лицензировании или при наличии особого разрешения от владельцев прав. Раз я против GPL в каком бы то ни было виде, нужно было бы брать разрешение (на форуме?) и потом ставить на него ссылку.

7 (изменено: Freeman, 19.06.2023 в 20:09)

Re: Авторские права и лицензирование

Freeman пишет:

Библиотечные функции Borland нельзя копировать в модуль System и выкладывать на GitHub. Требуется написать лицензионно чистые реализации.

Freeman пишет:

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

Freeman пишет:

Разработки «Канторовых систем» распространяются под лицензиями BSD и EULA. Исходники функций FastCode имеют лицензию MPL, сохранена в соответствующих файлах. Для сторонних разработок на Delphi хотелось бы иметь совместимую лицензию, не GPL.

В связи с этим возникли вопросы:

  • Насколько коротким должен быть код системных функций, чтобы его можно было просто скопировать?

  • В System немало функций, обусловленных логикой компилятора, означает ли это, что их можно копировать как есть?

  • Если нет, то что тогда делать, ведь мы не знаем внутреннего устройства компилятора, и нам всё равно приходится пользоваться исходным кодом от разработчика?

Например, для полноценной работы с типом object нужны функции: _ObjSetup, _ObjCopy, _Fail
const
    ovtInstanceSize = -8;   { Offset of instance size in OBJECTs    }
    ovtVmtPtrOffs   = -4;

procedure       _ObjSetup;
asm
{       FUNCTION _ObjSetup( self: ^OBJECT; vmt: ^VMT): ^OBJECT; }
{     ->EAX     Pointer to self (possibly nil)  }
{       EDX     Pointer to vmt  (possibly nil)  }
{     <-EAX     Pointer to self                 }
{       EDX     <> 0: an object was allocated   }
{       Z-Flag  Set: failure, Cleared: Success  }

        CMP     EDX,1   { is vmt = 0, indicating a call         }
        JAE     @@skip1 { from a constructor?                   }
        RET                     { return immediately with Z-flag cleared        }

@@skip1:
        PUSH    ECX
        TEST    EAX,EAX { is self already allocated?            }
        JNE     @@noAlloc
        MOV     EAX,[EDX].ovtInstanceSize
        TEST    EAX,EAX
        JE      @@zeroSize
        PUSH    EDX
        CALL    _GetMem
        POP     EDX
        TEST    EAX,EAX
        JZ      @@fail

        {       Zero fill the memory }
        PUSH    EDI
        MOV     ECX,[EDX].ovtInstanceSize
        MOV     EDI,EAX
        PUSH    EAX
        XOR     EAX,EAX
        SHR     ECX,2
        REP     STOSD
        MOV     ECX,[EDX].ovtInstanceSize
        AND     ECX,3
        REP     STOSB
        POP     EAX
        POP     EDI

        MOV     ECX,[EDX].ovtVmtPtrOffs
        TEST    ECX,ECX
        JL      @@skip
        MOV     [EAX+ECX],EDX   { store vmt in object at this offset    }
@@skip:
        TEST    EAX,EAX { clear zero flag                               }
        POP     ECX
        RET

@@fail:
        XOR     EDX,EDX
        POP     ECX
        RET

@@zeroSize:
        XOR     EDX,EDX
        CMP     EAX,1   { clear zero flag - we were successful (kind of) }
        POP     ECX
        RET

@@noAlloc:
        MOV     ECX,[EDX].ovtVmtPtrOffs
        TEST    ECX,ECX
        JL      @@exit
        MOV     [EAX+ECX],EDX   { store vmt in object at this offset    }
@@exit:
        XOR     EDX,EDX { clear allocated flag                  }
        TEST    EAX,EAX { clear zero flag                               }
        POP     ECX
end;

procedure       _ObjCopy;
asm
{       PROCEDURE _ObjCopy( dest, src: ^OBJECT; vmtPtrOff: Longint);    }
{     ->EAX     Pointer to destination          }
{       EDX     Pointer to source               }
{       ECX     Offset of vmt in those objects. }

        PUSH    EBX
        PUSH    ESI
        PUSH    EDI

        MOV     ESI,EDX
        MOV     EDI,EAX

        LEA     EAX,[EDI+ECX]   { remember pointer to dest vmt pointer  }
        MOV     EDX,[EAX]       { fetch dest vmt pointer        }

        MOV     EBX,[EDX].ovtInstanceSize

        MOV     ECX,EBX { copy size DIV 4 dwords        }
        SHR     ECX,2
        REP     MOVSD

        MOV     ECX,EBX { copy size MOD 4 bytes }
        AND     ECX,3
        REP     MOVSB

        MOV     [EAX],EDX       { restore dest vmt              }

        POP     EDI
        POP     ESI
        POP     EBX
end;

procedure       _Fail;
asm
{       FUNCTION _Fail( self: ^OBJECT; allocFlag:Longint): ^OBJECT;     }
{     ->EAX     Pointer to self (possibly nil)  }
{       EDX     <> 0: Object must be deallocated        }
{     <-EAX     Nil                                     }

        TEST    EDX,EDX
        JE      @@exit  { if no object was allocated, return    }
        CALL    _FreeMem
@@exit:
        XOR     EAX,EAX
end;

Можем ли мы использовать сторонний код под лицензией Mozilla Public License Version 1.1?
Очень многое можно было бы позаимствовать из таких проектов:

Но лицензия Mozilla Public License Version 1.1 требует включать уведомление в каждый исходный файл.
Как тут быть?
Кстати, FastMM, которую мы также планируем использовать тоже имеет такую лицензию.
Из оригинального System тоже можно было бы просто скопировать многие вещи.

8

Re: Авторские права и лицензирование

0CodErr пишет:

Можем ли мы использовать сторонний код под лицензией Mozilla Public License Version 1.1?

Оказалось, что MPL имеет особенности, о которых я не знал:

В лицензии MPL явно определено, что для исполняемой формы ("Executable Form") продукта должна предоставляться информация о том, как и где можно получить копию формы с исходным кодом ("Source Code Form"). Разработчики Pale Moon настаивают на том, что публикация ссылки на master-ветку в постоянно обновляемом репозитории не эквивалентна предоставлению варианта продукта в исходных текстах, как того требует лицензия MPL.

Позиция сторонников Mypal сводится к тому, что обвинения Pale Moon базируются на неверной интерпретации лицензии MPL, которая не нарушается, так как фактически код изменений предоставляется в репозитории и требования лицензии по открытию кода производной работы соблюдаются. Более того, в итоге автор Mypal учёл замечание и несколько дней назад организовал присвоение тегов релизам для их идентификации в репозитории (раньше сборки формировались как срезы непрерывно обновляемого репозитория).

Наш SDK завис на середине переделки, подразумевающей полную перегрузку (reupload) исходного кода и перезапись истории в Git. Приложенные к выпускам 2020-05 и 2020-06 архивы я планировал оставить неизменными, привязав их к тегам в новой истории, но до сих пор не уверен, как правильно.

FastMM в тех выпусках не используется, какого-то другого кода под MPL не припоминаю.

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

9

Re: Авторские права и лицензирование

Freeman пишет:

FastMM в тех выпусках не используется, какого-то другого кода под MPL не припоминаю.

С FastMM, думаю, проблем бы и не было, мы же как раз всё в исходных кодах и распространяем, не ограничиваясь только dcu-файлами.
К тому же, мы и так не являемся разработчиками FastMM, так что, в любом случае, тот, кто использовал бы FastMM, имел бы дело с лицензией MPL.

Неясно ещё, можно ли использовать некоторый оригинальный код из System, оставив его полностью без изменений.
К примеру, в KOL(если это оно) рядом с оригинальным копирайтом сбоку есть приписка "(C) by Kladov Vladimir".

10

Re: Авторские права и лицензирование

0CodErr пишет:

К примеру, в KOL(если это оно) рядом с оригинальным копирайтом сбоку есть приписка "(C) by Kladov Vladimir".

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