From: Marius Storm-Olsen Date: Fri, 28 Jul 2017 15:26:48 GMT Subject: Re: requesting permission to use some Git for Windows code Message-ID: In-Reply-To: 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 > 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 , 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 ,` option? >> >>> ctype.c >> $ git shortlog -nse ctype.c >> 5 Junio C Hamano >> 4 René Scharfe >> 2 Nguyễn Thái Ngọc Duy >> 1 Ben Walton >> 1 Brandon Casey >> 1 Gary V. Vaughan >> 1 Linus Torvalds >> 1 Namhyung Kim >> >> 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 <> #include >> #include >> >> 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' \ >> > 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' \ >> > 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