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