From: David Given on
On 12/05/10 02:11, Kenny McCormack wrote:
[...]
>> The main reason I chose Interix over Cygwin --- apart from the usual one
>> of Cygwin being an abomination from the uttermost depths of hell --- is
>
> Just curious: Why do you hate Cygwin so?

I have to use it at work.

We spend a *stupid* amount of time working around issues involving
Cygwin. As a short list, this is all stuff I've ran into recently:

- creating a file called 'aux.c' failed until quite recently (as 'aux'
is a reserved filename in Windows. They've fixed this, thank god)

- you cannot unlink a file if another process has it open (a win32
limitation)

- you cannot run applications from more than one version of Cygwin at a
time (I once had to deal with a customer machine with *three* different
versions of Cygwin on it at once. That wasn't fun. I believe this has
also been fixed recently, although not recently enough to help us)

- Cygwin applications automatically parse their argument string into an
argv array if they think they've been invoked from a cmd.exe session
(this doesn't happen automatically on Windows), and the heuristic is
easily confused... resulting in command line quotes mysteriously
vanishing under some circumstances

- strong runtime requirements, where just running a Cygwin .exe from a
cmd.exe session won't always work unless you set up environment
variables etc, meaning that Cygwin apps won't play nicely with
non-Cygwin build tools without jumping through hoops

- an infamously terrible installer which will frequently mangle your
Cygwin installation beyond repair, and where due to a UI glitch it's
sometimes impossible to uninstall two packages because every time you
select one it will mark the other one for reinstallation

- most of the packages are rather old and the selection is poor (no
libzip? Really?)

- NO MAN PAGES

- Cygwin has a VFS which tries to enforce Unix-like paths, such as
/cygwin/c/foo/bar/baz instead of the Windows-like c:/foo/bar/baz;
unfortunately none of the third-party tools that we're trying to script
understand Cygwin paths, resulting in huge piles of cumbersome
translation layers in all our scripts

Basically what they've done is applied huge amounts of work and clever
hackery to produce an almost convincing Unix-alike that runs on Windows.
It remains almost convincing until you try to interact with tools
outside Cygwin, at which point all the hacks suddenly become visible,
and instead of helping you, they get in the way. The whole reason for
running Cygwin is so that we can interoperate with third-party tools and
compilers; after all, if we wanted a real Unix-alike, we'd run on a real
Unix! So when we come across issues like Cygwin's make not understanding
compiler-generated dependency files containing c:/foo paths because they
haven't applied the standard patch to make it do so, we get
understandably irritated.

There's actually another project called MingW that does much the same
thing Cygwin does, except their policy is not to emulate features that
Windows does not support. As a result their system is much less
Unix-like... but it's much more consistent and as such is perversely
easier to use.

[...]
> I wonder why they do it that way at all. Many authors have noted that
> the whole Unix way of doing process creation - the idea of creating two
> identical processes when such is wasted in 99% of cases - is a quirk.

This is a perfect example; Cygwin is emulating fork() because they want
to be as Unix-like as possible. MingW does not implement fork() at all
because it can't be done easily on win32, but I believe they do
implement vfork() --- because that *can* be done.

--
┌─── dg@cowlark.com ───── http://www.cowlark.com ─────

│ "There is no Fermi Paradox. Any time space faring aliens make it to
│ Earth, the cows get them." --- Sam Starfall
From: Ersek, Laszlo on
On Wed, 12 May 2010, David Given wrote:

> [...] The whole reason for running Cygwin is so that we can interoperate
> with third-party tools and compilers; after all, if we wanted a real
> Unix-alike, we'd run on a real Unix! [...]

So that a different opinion is voiced too: I have different needs and also
different possibilities at work, and for me Cygwin is a lifesaver. In
order to Get Things Done (TM), I need a rootless X server, about five
xterms, bash prompts, GNU coreutils, OpenSSH, a platform where my own
utilities build and run, and so on. I vaguely remember having experimented
with other, similar tool compilations, but for interactive use, Cygwin
seemed the most polished.

http://cygwin.com/faq.html

----v----
1.1. What is it?

The Cygwin tools are ports of the popular GNU development tools for
Microsoft Windows. They run thanks to the Cygwin library which provides
the POSIX system calls and environment these programs expect.

With these tools installed, it is possible to write Windows console or GUI
applications that make use of significant parts of the POSIX API. As a
result, it is possible to easily port many Unix programs without the need
for extensive changes to the source code. This includes configuring and
building most of the available GNU software (including the packages
included with the Cygwin development tools themselves) as well as lots of
BSD tools and packages (including OpenSSH). Even if the development tools
are of little to no use to you, you may have interest in the many standard
POSIX utilities provided with the package. They can be used from one of
the provided Unix shells like bash, tcsh or zsh, as well as from the
standard Windows command shell if you have to for some sad reason.
----^----

Cheers,
lacos
From: David Given on
On 13/05/10 01:30, Ersek, Laszlo wrote:
[...]
> So that a different opinion is voiced too: I have different needs and
> also different possibilities at work, and for me Cygwin is a lifesaver.
> In order to Get Things Done (TM), I need a rootless X server, about five
> xterms, bash prompts, GNU coreutils, OpenSSH, a platform where my own
> utilities build and run, and so on.

This sounds like you're largely staying inside the Cygwin box, and it
*does* work well in that situation, as I should have made clearer (it's
a very impressive piece of work and I couldn't achieve anything like
it). I find that it's only when you start to stray outside the box and
need to interact with non-Cygwin tools that it starts to fall apart.
Unfortunately for us, this is largely what we need it for.

Just out of interest, given that your tools are so Unix-based, what are
the reasons for using Windows? Third-party tools? Corporate IT?

--
┌─── dg@cowlark.com ───── http://www.cowlark.com ─────

│ "There is no Fermi Paradox. Any time space faring aliens make it to
│ Earth, the cows get them." --- Sam Starfall
From: Ersek, Laszlo on
On Thu, 13 May 2010, David Given wrote:

> This sounds like you're largely staying inside the Cygwin box

That's right.

[...]

> Just out of interest, given that your tools are so Unix-based, what are
> the reasons for using Windows? Third-party tools? Corporate IT?

Both of those. With the addition of Cygwin, my work environment became
bearable, sometimes even pleasant. Ten years ago I would have started a
crusade for a pure GNU/Linux workstation. Now I'm too old for that :)

Cheers,
lacos
From: Kenny McCormack on
In article <1nnrb7-2og.ln1(a)gate.cowlark.com>,
David Given <dg(a)cowlark.com> wrote:
>On 12/05/10 02:11, Kenny McCormack wrote:
>[...]
>>> The main reason I chose Interix over Cygwin --- apart from the usual one
>>> of Cygwin being an abomination from the uttermost depths of hell --- is
>>
>> Just curious: Why do you hate Cygwin so?
>
>I have to use it at work.
>
>We spend a *stupid* amount of time working around issues involving
>Cygwin. As a short list, this is all stuff I've ran into recently:

See my comments below. Understand that I've never seen the point in
using Cygwin as a user environment; I totally agree with what you say
that if you wanted to run Unix, you'd install and run Unix. However
note that, from various Usenet posting over the years, I get the idea
that some people use Cygwin to get work done in an environment where
management prevents them from installing Linux (or even saying the word)
- i.e., they sort of run Cygwin on the sly as a way to get around
corporate policies.

That said, I've only used it to compile Unix-y tools into binaries (EXE
files) that can be run by other people, from the CMD prompt. I note
that another poster on this thread was going on about all the tools that
Cygwin provides - again, I disagree with that POV; If you want
Unix/Linux, you know where to find it (unless you are doing it, as noted
above, as an end-around of your corporate IS policies).

Final note: My text below could be interpreted to sound like the typical
smarmy Usenet response - that is, the usual tone of "Hey, I'm fine;
you're just dense". Trust me; it is not intended as such. I really do
understand your points. What I've tried to make clear is that if you
treat Cygwin as just a compilation system, then you should be OK.
People get in trouble when they start expecting to use it as an
"environment".

>- creating a file called 'aux.c' failed until quite recently (as 'aux'
>is a reserved filename in Windows. They've fixed this, thank god)

Yeah, that's an old chestnut. I wonder if Bill Gates turns over in his
sleep over that decision (making ordinary words act like device names),
made so very long ago. Incidentally, note that DOS had an
(undocumented) option that, if enabled, turned off the "automatic"
recognition of things like "AUX" ("CON", "PRN", etc); that is, required
them to be prefixed with "\dev\" (or "/dev/", if you prefer), like in
Unix. I don't think that option survived into the present day.

>- you cannot unlink a file if another process has it open (a win32
>limitation)

Yeah, that's Windows. I should point out that many (most?) of your
complaints are really just "That's Windows!". I.e., you just can't do
anything about it - since, underneath it all, you're still running Windows.

>- you cannot run applications from more than one version of Cygwin at a
>time (I once had to deal with a customer machine with *three* different
>versions of Cygwin on it at once. That wasn't fun. I believe this has
>also been fixed recently, although not recently enough to help us)

Yeah, that's a pain. I assume you are talking about the underlying
cygwin1.dll. Yes, every time I have to install a new version of
cygwin1.dll, I worry about what breakage is going to result. So far,
I've been pretty lucky.

>- Cygwin applications automatically parse their argument string into an
>argv array if they think they've been invoked from a cmd.exe session
>(this doesn't happen automatically on Windows), and the heuristic is
>easily confused... resulting in command line quotes mysteriously
>vanishing under some circumstances

I'm not quite sure what you are getting at here. Are you just saying
that the command line parsing is different between Cygwin apps and
"normal" DOS/Windows apps? If so, I don't what could be done. That, in
fact, was always a problem in the DOS/Windows world - that since the
shell doesn't do the command line parsing, each app has to do it, and
each app does (read: could/potentially, do) it differently.

>- strong runtime requirements, where just running a Cygwin .exe from a
>cmd.exe session won't always work unless you set up environment
>variables etc, meaning that Cygwin apps won't play nicely with
>non-Cygwin build tools without jumping through hoops

I don't get this. Yes, you have to setup environment variables for
things to work right. That's part of the game.

>- an infamously terrible installer which will frequently mangle your
>Cygwin installation beyond repair, and where due to a UI glitch it's
>sometimes impossible to uninstall two packages because every time you
>select one it will mark the other one for reinstallation

I haven't seen this, but I'll take your word for it.

>- most of the packages are rather old and the selection is poor (no
>libzip? Really?)

Can't you compile it yourself?

>- NO MAN PAGES

I just did "man ls" on my Cygwin installation. Worked fine for me.

>- Cygwin has a VFS which tries to enforce Unix-like paths, such as
>/cygwin/c/foo/bar/baz instead of the Windows-like c:/foo/bar/baz;
>unfortunately none of the third-party tools that we're trying to script
>understand Cygwin paths, resulting in huge piles of cumbersome
>translation layers in all our scripts

Yes, that's annoying, but easily worked around (at least in the current
version). I recently installed Cygwin on a machine, and when I ran an
app, passing it something like "C:/foo", a paragraph long message came
out that told me that it prefers POSIX style file names, but that if you
set the CYGWIN environment variable to "nodosfilewarning", it will shut
up about it. I did, and it did.

>Basically what they've done is applied huge amounts of work and clever
>hackery to produce an almost convincing Unix-alike that runs on Windows.
>It remains almost convincing until you try to interact with tools
>outside Cygwin, at which point all the hacks suddenly become visible,
>and instead of helping you, they get in the way. The whole reason for
>running Cygwin is so that we can interoperate with third-party tools and
>compilers; after all, if we wanted a real Unix-alike, we'd run on a real
>Unix! So when we come across issues like Cygwin's make not understanding
>compiler-generated dependency files containing c:/foo paths because they
>haven't applied the standard patch to make it do so, we get
>understandably irritated.

True. So it goes...

>There's actually another project called MingW that does much the same
>thing Cygwin does, except their policy is not to emulate features that
>Windows does not support. As a result their system is much less
>Unix-like... but it's much more consistent and as such is perversely
>easier to use.

Yes. But I've had less than good results with MingW.
I've posted recently - actually, in comp.lang.awk - about my recent
experiences with it.

>[...]
>> I wonder why they do it that way at all. Many authors have noted that
>> the whole Unix way of doing process creation - the idea of creating two
>> identical processes when such is wasted in 99% of cases - is a quirk.
>
>This is a perfect example; Cygwin is emulating fork() because they want
>to be as Unix-like as possible. MingW does not implement fork() at all
>because it can't be done easily on win32, but I believe they do
>implement vfork() --- because that *can* be done.

Indeed.

--
> No, I haven't, that's why I'm asking questions. If you won't help me,
> why don't you just go find your lost manhood elsewhere.

CLC in a nutshell.