Cygwin is basically a POSIX emulator, where POSIX is the lowest common denominator of UNIX and other systems. This allows you to have purely written POSIX applications running on Windows.
In cygwin you will find everything that is specified in POSIX (for example, the file system hierarchy, proc file system, signals, sockets) and will behave within the POSIX specifications. But, since there are a lot of things not specified in POSIX, it will not be 100% like any other real Unix system.
For example, on most UNIX systems, you can delete a file while it is open (which will make it a temporary file without a name, which will be deleted when the last user is closed). Windows does not allow this (and POSIX does not provide this); so on Cygwin you will have the semantics of the Windows file (you cannot delete the file while it is open).
The same goes for permitted characters in file names, file case sensitivity, and (of course) all additional APIs (besides POSIX) that most real UNIXs offer but that are not included in Cygwin.
(At the very least, you may have an X server in Cygwin that only supports basic X operations again).
mihi source share