Re: requesting permission to use some Git for Windows code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Philippe,

Please feel free to use my portions of the mentioned works under the GPLv3.

-Brandon

On Tue, Jul 25, 2017 at 6:53 AM, Johannes Schindelin
<Johannes.Schindelin@xxxxxx> wrote:
> Hi Philippe,
>
> I am not quite certain whether I have replied to this earlier or not.
> Under the assumption that I did not, I'll send this mail; Cc:ed to the
> mailing lists as discussed privately.
>
> On Fri, 23 Jun 2017, Philippe Joyez wrote:
>
>> This message is to request the permission to use code chunks from Git
>> for Windows in GNU TeXmacs <http://texmacs.org/>, to which I contribute.
>> The main developer of TeXmacs is Joris van der Hoeven (in cc).
>>
>> Context:
>>
>> Just like Git, TeXmacs originated on *nix platforms and was subsequently
>> ported to windows using MinGW. Naturally, some issues we have in that
>> port are the very same Git for Windows has faced.
>>
>> One specific problem you have solved and that TeXmacs still hasn't, is
>> dealing with unicode filenames. By taking relevant pieces of code in Git
>> for windows, I could easily come up with a patch that enables TeXmacs to
>> handle unicode filenames in windows.
>>
>> Now, the problem is that Git code is GPL V2, while TeXmacs is GPL V3:
>> Incorporating my patch in TeXmacs' trunk would be a violation of GPL
>> V2... /unless/ we are granted the permission to do so by the authors of
>> the code. This is precisely the reason for this message.
>
> It is great that you can make use of the code!
>
> As to the licensing problem, I agree it is a hassle. The biggest obstacle
> is that you have to have the consent of all the authors.
>
> You hereby have mine.
>
>> The chunks of code we would like to reuse are from these Git for Windows
>> files:
>> git-compat-util.h
>
> This file is quite large, maybe you can cut down on the authors to contact
> by restricting the `git annotate`/`git log`/`git shortlog` calls to
> specific parts, using the `-L <start-line-no>,<end-line-no>` option?
>
>> ctype.c
>
> $ git shortlog -nse ctype.c
>      5  Junio C Hamano <gitster@xxxxxxxxx>
>      4  René Scharfe <l.s.r@xxxxxx>
>      2  Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx>
>      1  Ben Walton <bdwalton@xxxxxxxxx>
>      1  Brandon Casey <drafnel@xxxxxxxxx>
>      1  Gary V. Vaughan <git@xxxxxxxxxxxxxxxxxxxxxxxxx>
>      1  Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
>      1  Namhyung Kim <namhyung@xxxxxxxxx>
>
> I *think* Ben Walton's change (189c860c9ec (kwset: use unsigned char to
> store values with high-bit set, 2015-03-02)) is not copyright-able, as it
> only changes the type from signed to unsigned. But I am not a lawyer ;-)
>
> Likewise, Namhyung Kim's change (1a191a22959 (ctype.c only wants
> git-compat-util.h, 2012-02-10)) only changes which header is included.
> That seems to be a too-obvious/too-trivial change to me.
>
> Also, it looks as if removing a comma as was done in 4b05548fc05 (enums:
> omit trailing comma for portability, 2010-05-14) by Gary V. Vaughan would
> not merit any copyright.
>
> If in doubt, you could simply take the version of ctype.c with those
> changes reverted as basis of your work.
>
> You still have to get the consent of Junio, René, Duy, Brandon and Linus
> to relicense the file's contents.
>
>> compat ¬
>>    mingw.c
>
> I count 35 authors other than myself for that file... Maybe you can narrow
> down what you need?
>
>>    mingw.h
>
> Still 29 authors other than me...
>
>>    win32.h
>
> This is more manageable, as it only saw three authors. But then, you could
> simply reimplement the functionality, it's just two functions, and I do
> not think that get_file_attr() is implemented in the best way: we have a
> function called err_win_to_posix() in compat/mingw.c which is much more
> complete.
>
> Having said that, err_win_to_posix() is still not implemented in the best
> way. The best way is to abuse Windows' own (undocumented) _doserrmap()
> function along with the information in the header files winerror.h and
> errno.h to generate the mapping. Those two files, as per mingw-w64's
> headers, have the very nice preamble:
>
>         /**
>          * This file has no copyright assigned and is placed in the Public Domain.
>          * This file is part of the mingw-w64 runtime package.
>          * No warranty is given; refer to the file DISCLAIMER.PD within this
>          * package.
>          */
>
> Therefore, the result has no copyright assigned and is placed in the
> Public Domain and we can do the very same, too.
>
> As I wanted to have a Windows error -> errno mapping that I could
> relicense as I see fit, anyway, I took this as an excellent opportunity to
> generate exactly that.
>
> Please find the header attached. Here is how I generated that header file:
>
> -- snip --
> cat >/tmp/generrmap.c <<EOF &&
> #include <windows.h>
> #include <stdio.h>
>
> static void map_code(unsigned long code, const char *id);
>
> int _main(int argc, char **argv)
> {
>         printf("/* This file has no copyright assigned and is placed in the "
>                 "Public Domain. */\\n"
>                 "\\n"
>                 "#ifndef WINERR2ERRNO_H\\n"
>                 "#define WINERR2ERRNO_H\\n"
>                 "\\n"
>                 "static int winerror2errno(long code)\\n"
>                 "{\\n");
> $(sed -n 's/^#define \([^ ]*\) __MSABI_LONG([1-9].*/\tmap_code(\1, "\1");/p' \
>         </mingw64/x86_64-w64-mingw32/include/winerror.h)
>         printf("\\tdefault: errno = EINVAL;\\n"
>                 "\\t}\\n"
>                 "\\n"
>                 "\\treturn -1; /* Typical return value when errno was set */\\n"
>                 "}\\n"
>                 "\\n"
>                 "#endif /* WINERR2ERRNO_H */\\n");
>         fflush(stdout);
>         return 0;
> }
>
> /* Undocumented function in the MSVCRT */
> extern void _dosmaperr(unsigned long code);
>
> static const char *errno2constant(int err, const char *id)
> {
>         switch (err) {
> $(sed -n 's/^#define \([^ ]*\) \([0-9]*\)$/\tcase \2: return "\1";/p' \
>         </mingw64/x86_64-w64-mingw32/include/errno.h)
>         default:
>                 fprintf(stderr, "Unhandled err: %d (for %s)\\n", err, id);
>                 exit(1);
>         }
> }
>
> static void map_code(unsigned long code, const char *id)
> {
>         errno = 0;
>         _dosmaperr(code);
>         if (!errno) {
>                 fprintf(stderr, "Unhandled id: '%s' (%ld)\\n", id, code);
>                 exit(1);
>         }
>         if (errno != EINVAL)
>                 printf("\\tcase %s: errno = %s;\\n",
>                         id, errno2constant(errno, id));
> }
> EOF
> gcc -g -nostdlib -o /tmp/generrmap.exe /tmp/generrmap.c -lmsvcr120 &&
> /tmp/generrmap
> -- snap --
>
>>    win32 ¬
>>         dirent.c
>>         dirent.h
>
> I encourage you to have a look whether you really need that full-fledged
> functionality.
>
> For vaguely related work, I recently reimplemented this differently, for
> use in BusyBox-w32, where we really only need to have the file names. The
> implementation is a lot cleaner, and I am happy to relicense this to
> whatever license you see fit (even BSD):
>
>         https://github.com/git-for-windows/busybox-w32/commit/b76eee3aca
>
>>         lazyload.h
>
> This one was authored by me, and I am happy to relicense it to GPLv3. Or
> whatever license, really.
>
> Ciao,
> Johannes




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux