gcc4: next release
Charles Wilson
cygwin@cwilson.fastmail.fm
Wed Jul 7 20:40:00 GMT 2010
On 7/7/2010 9:48 AM, Corinna Vinschen wrote:
> On Jul 7 08:58, Christopher Faylor wrote:
>> On Wed, Jul 07, 2010 at 02:39:19PM +0200, Corinna Vinschen wrote:
>>> Oh, and, talking about /opt or /usr, I'd prefer the above /usr/mingw*
>>> sysroot idea. However, I don't like the idea in the least to keep
>>> two different versions of w32api around. It's one target, so we should
>>> have one set of headers only. Right? Wrong? None of that?
>>
>> Unfortunately, it sounds like we've stepped into the middle of a dispute
>> between the mingw folks and the mingw64 folks.
Well, yes. But not one in which third parties like cygwin would take
direct fire. And efforts are underway to enable closer cooperation, at
least, between the two teams.
I don't think the projects will ever merge, and I think...that might be
a good thing. The extra diversity -- so long as both teams continue to
push fixes upstream -- should help make the gcc code better for PE/COFF
all around, and that helps cygwin, too.
>> Maybe the best thing for
>> us to do would be to decide to use only one or the other but not both.
I think both teams would prefer if both toolchains were available on
cygwin -- provided we @ cygwin have sufficient volunteers to handle the
job(s). Is Dave K + JonY enough?
I know I would prefer to see both, and not have cygwin pick one or the
other. More on that, in a different message.
> Hmm, sounds bad. I would love to have a 64 bit gcc in the distro. From
> my POV, the only reason not to use mingw64 would be, if the w32api has
> been changed to 64 bit cleanness at the expense of 32 bit cleanness.
Well, there are three "parts" to the compiler and support packages (not
counting binutils etc). Using the mingw.org and cygwin names:
gcc itself
w32api
mingw-runtime
These are called, in mingw64 land,
gcc
crt
(contains the libs for both "mingw-runtime" and "w32api")
headers
(contains the include files for both "mingw runtime" and "w32api")
The mingw-runtime bits differ between the two projects as JonY has
described elsewhere. The gcc bits for the two projects are all basically
pushed upstream (there may be a few local patches, but those are
probably minor). So, you just choose a different --target when building
gcc and you can get mingw64 or mingw.org version.
JonY also described how the w32api bits differ, from a technical
standpoint. However, what JonY didn't mention was the w32api difference
that actually was the root cause of the fork: licensing and provenance.
(Later, personality issues widened the breach, and then technical
decisions pushed things even farther apart. The personality issues, I
hope, are on their way to being mended. Technical issues can be
resolved. But the licensing...I dunno. And cygwin should probably care
about that, *especially* with regards to the w32api headers and libs
used to build cygwin itself).
Here's the deal, as I understand it:
(1) mingw32's (and cygwin's) w32api is under some custom license dreamed
up by Anders Norlander, which is very MIT/X-ish, but isn't identical.
And it is not, contrary to rumor, public domain. The mingw team is
trying to contact Anders, to get that license revised to either (a)
public domain, with a fallback to some other license in those
jurisdictions that do not recognize public domain, or (b) actual MIT/X.
But that's a side issue to this discussion (important, to be sure, but
save that for later). For more info, see
http://thread.gmane.org/gmane.comp.gnu.mingw.devel/3985
and thread, as well as
http://thread.gmane.org/gmane.comp.gnu.mingw.user/33519/focus=33537
and the subthread branching off of that message.
(2) mingw32's (and cygwin's) mingw-runtime is public domain. This may be
problematic in some jurisdictions (especially some EU countries) that do
not recognized pd -- which is one reason the 'relicensing' discussion
came up and is on-going.
(3) Now, given these issues, especially the pd "problem", mingw64's
crt+headers (which combine and extend elements that fall under cygwin's
w32api AND mingw-runtime categories), are provided under an EITHER/OR
arrangement: according to the lawyers at Kai's company who looked in to
this, the licensing/disclaimer text boils down to: copyright is
disclaimed and it is public domain, UNLESS the legal jurisdiction
doesn't recognize the concept -- in which case copyright is asserted and
the files are available under the ZPL (a very permissive, non-copyleft
but GPL-compatible license).
I don't *really* understand how all that works, 'cause IANAL, but...it's
all kosher according to Kai's legal beagles. And, given all that, then
(IM-not-a-laywer-O) mingw.org can freely snarf, under public domain,
anything in mingw64 so long as they do so in a jurisdiction that
recognizes such -- there's no legal impediment to mingw.org
incorporating a lot of mingw64's stuff.
IF...mingw.org is confident that the contents of mingw64 truly ARE
legally public domain. And that's the rub, and the root of the original
conflict:
(4) In order to preserve the ability of mingw.org to release updates to
w32api under any copyright-based license -- such as Ander's homegrown
"license", a new MIT/X license, or even disclaimed as public domain --
the mingw.org team believes that ALL such contributions must come from
totally open, public sources.
Such as msdn documentation.
They require that all contributions to w32api be so documented, as
coming from such-and-such a page at msdn. Unfortunately, not everything
in MS's w32api is publicly documented. And the EULA of the Windows SDK
includes stuff like prohibitions against reverse engineering, copyright
and specific non-redistribution license terms on the headers, etc.
The big fear, back when Kai & co were originally working on the 64bit
support, was that their changes had been derived from non-public
sources. At the time, Kai presented his initial 64bit support as a
single massive patchdump, and asked for it to be merged into mingw.org.
Danny said no, please break it down into smaller, easily reviewed
pieces, AND document where all changes to the w32api and mingw-runtime
bits came from: what msdn page, etc.
Kai refused (or couldn't, or didn't have time, or ???), and
mingw64.sf.org was born. Then feelings got bent, and things went
downhill on both sides.
IIUC, mingw64 now has a policy where new contributions are developed in
a clean-room setting: some people may look at the Windows SDK and
document what they find, and then DIFFERENT people can use that
documentation to develop patches for mingw64's w32api stuff.
Is this procedure always followed? How long has it been in place? Where
did the contributions that predate that arrangement come from? And even
if EVERY single piece of mingw64 is fully "covered" by this clean room
development technique -- is that sufficient to allow mingw.org to accept
those changes en masse?
Or does mingw.org need to
(a) painstakingly document each and every w32api change in mingw64.org,
whether from msdn or clean-room, and determine individually whether each
piece can be added to mingw.org's w32api
(b) or, change its own policy to match mingw64's and simply adopt any
and all patches derived from their work,
(c) or, work with a CoApp guy (MS employee) who has recently expressed
(official?) interest in working with mingw32. The mingw.org idea was to
try to get at least some of the core Windows SDK headers released under
a less restrictive license. (Pigs can fly, if you strap a rocket pack
on their back...) Then, mingw.org wouldn't care where mingw64 got its
w32api stuff; they could expropriate directly from mingw64's headers or
directly from the newly freed Windows SDK ones.
In any event and regardless of licensing concerns, unless mingw.org
completely drops winsup/mingw and winsup/w32api in favor of mingw64's
crt/headers, you'd still need to do a lot of work because mingw64's code
arrangement differs from mingw.org's -- it's not a simple cut-n-paste to
import mingw64 stuff into mingw.org. And who is going to do that work?
Chris Sutcliff expressed interest in pursing option (a) a few months
ago, but it is a daunting task and AFAIK little progress has been made.
So...where does cygwin fall in this discussion concerning the provenance
of w32api data?
It came up in one of those discussions @ mingw that what they really
need is actual legal advice. But, mingw.org has no independent legal
existence and no access to legal services. It was mentioned that
perhaps Red Hat, given that they have a vested interest in all this,
what with cygwin's reliance on the w32api stuff "from" mingw.org, might
be able to obtain legal advice for mingw.org on this issue. As well as
on the discussion concerning relicensing w32api, and possibly
mingw-runtime, under MIT/X (or whatever) rather than public domain.
> But I certainly won't interfere in a dispute between two communities
> I'm not part of.
I think "picking sides" by choosing one or the other would put us in
greater danger of "interfering in [that] dispute" than simply providing
both, and letting our users choose.
However, with regards to what version of the w32api headers and libs
*cygwin's own compiler* uses...I think cygwin has no choice but to pick
a side, given the licensing issues involved: "our" w32api package would
be either mingw.org-based, or mingw64 based. And that needs legal
advice from Red Hat *for cygwin*, if not for *mingw.org*.
But...that has no bearing on which mingw32-target cross compiler we
provide, since cygwin itself is built using the cygwin compiler.
--
Chuck
More information about the Cygwin-apps
mailing list