I don't think what they're doing is legal. If they're charging for the build process, that's one thing, but if the software's licenced under the GPL they can't possibly impose a shareware licence fee.
Technically, yes they can, it's pretty much covered under distribution. I've read the GPL, I don't see any language that prohibits such behaviour, in fact:
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
--Preamble, Paragraph 2 of the
GNU General Public License (emphasis added)
The only thing I've seen the GPL prohibit is closing up the source, charging for anything REMOTELY related, and imposing royalties on knockoffs. The source is still open, and if you don't like the vendor's Windows solution, you can always build your own and distribute it for free (in fact, it oftentimes looks like they're IN FAVOR of that). I think people forget that it's not exactly an easy process to develop stable software for Windows (given the slipshod OS) and neglect to consider that the LAST thing these guys want to do is develop and maintain a Win port for Windroids that'll never touch any other OSS.
EDIT: Agreed, putting this under a shareware licence / semi-mandatory registration basis is right bullshit, but the GPL doesn't impose any restrictions on HOW the vendor goes about collecting their fees.EDIT 2: I believe the misunderstanding lies in the way they chose to distribute the Windows port. They are free to charge for individual ports what they wish, but the source MUST REMAIN OPEN. I see no effort on their part to close the source, so the GPL still applies on a technicality. I'm not saying that what they're doing is ethical, but unfortunately, it's their perogative if they want to charge for a specific port.