Ditto, on any of my portions, if any left :)

--
.marius

On 7/28/2017 00:31, Brandon Casey wrote:
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.schinde...@gmx.de> 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 <gits...@pobox.com>
      4  René Scharfe <l....@web.de>
      2  Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
      1  Ben Walton <bdwal...@gmail.com>
      1  Brandon Casey <draf...@gmail.com>
      1  Gary V. Vaughan <g...@mlists.thewrittenword.com>
      1  Linus Torvalds <torva...@linux-foundation.org>
      1  Namhyung Kim <namhy...@gmail.com>

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

Reply via email to