Running Node on Windows presents several technical issues, mainly related to how the internal design of Windows differs from how Linux and the “change of mind” are required to port Unix applications to Windows.
Background
Linux was designed to replace Unix, a well-known multi-tasking operating system, so from the first day it was a multi-user / multi-processor, server-oriented operating system. The idea of sharing multiple system resources is the key to its internal design.
Windows was originally designed as a single-user / single-processor desktop operating system and therefore did not support sharing system resources. In 1993, Microsoft released a new redesigned version of Windows - called Windows / NT - to better support the shared resource, the multi-tasking model required by the servers, but because of the existing user base set, Microsoft required that NT also support all the features of its single-user / single-task predecessor .
Windows 7 is a direct descendant of NT and Microsoft needs the support of outdated users to this day (and, according to many, it is very confused about the internal design of Windows).
Microsoft also hired a system architect named Dave Cutler to develop NT. Dave is best known for developing a Unix competitor called VMS, whose internal design is significantly different from Linux design, which has caused many problems for developers interested in porting their Unix programs to Windows.
The clearest example of this “impedance mismatch” between the internal design of Windows and Linux is how they handle the event-driven non-blocking input / output (io), on which Node relies on its (seemingly) multitasking magic in a single operation flow.
Linux supports two system functions, called select () and epoll (), which can be used to asynchronously inform the process of changes in the operating system that affect it. Node is heavily dependent on these features, but Windows also does not support it, relying instead on “Change notifications” (mostly) to handle event-driven io.