linux - What exactly does Cygwin do?

07
2014-07
  • Progger

    I understand that it "looks like" Linux by giving me forward slashes and providing a directory structure similar to Linux. I also know that a lot of apps have been ported to Cygwin, but if the source code is available for these apps that have been ported to Cygwin, why can't they just be compiled directly for Windows?

  • Answers
  • Andrew Schulman

    Because they're Linux apps, that depend on the Linux kernel API. Windows natively doesn't provide that API, so the Cygwin DLL was created to do that. Linux apps can then be built against the Cygwin DLL, which provides (most of) the Linux services the application expects.


  • Related Question

    windows - Virtual Machines vs Cygwin
  • Ram

    With the arrival of virtual machine software like VirtualBox, VMWare, Parallels etc., is Cygwin any useful on the Windows platform to give a linux like environment?


  • Related Answers
  • wfaulk

    Virtual machines and Cygwin answer two different questions.

    Virtual machines are for when you want to run multiple operating systems at the same time. It's like having two computers without the expense of purchasing two sets of hardware.

    Cygwin is intended to give Windows a number of Unix tools, so that Unix geeks can more effectively use Windows (though I'd argue that Cygwin doesn't actually do that very well), and to provide some tools that have greater features than Windows provides on its own. I don't think the characterization of Cygwin providing a "linux like environment" is particularly accurate. (Cygwin is actually intended to provide a more complete POSIX development environment for Windows, and, in doing so, provides a number of utilities. The end result for end users, though, is that it merely provides tools.)

    There's actually kind of a third option, Cooperative Linux, which I think actually does provide a Linux-like environment within Windows. It actually runs the Linux kernel as a process within Windows. There are some distributions that run under it; andLinux comes to mind. With these systems, you actually do have a Linux environment that can more directly interact with your Windows environment than a virtual machine can.

  • andynormancx

    It is still useful for running Unix tools like rsync, which you want to operate on the files on the Windows box rather than it being stuck away in a virtual machine. You can also then use the Windows scheduler for starting jobs with the tools.

  • Peiti Peter Li

    As far as I am concerned, Cygwin is a different concept. Unlike virtual machine it provides an DLL which emulates an Linux environment/layer, which can run and build linux program on a windows machine. For example, if you want to use some library that is only distributed as source code and is intended for built in Linux system, what if you want to use this library in Visual Studio? You cannnot use VS to build it since it relies on Linux dependencies, so you need Cygwin in this situation.